4 # Copyright (c) 2017 Vojtech Horky
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
11 # - Redistributions of source code must retain the above copyright
12 # notice, this list of conditions and the following disclaimer.
13 # - Redistributions in binary form must reproduce the above copyright
14 # notice, this list of conditions and the following disclaimer in the
15 # documentation and/or other materials provided with the distribution.
16 # - The name of the author may not be used to endorse or promote products
17 # derived from this software without specific prior written permission.
19 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 from hbuild
.scheduler
import Task
33 class CvsCheckoutTask(Task
):
34 def __init__(self
, **attrs
):
35 Task
.__init
__(self
, 'checkout', **attrs
)
37 def do_checkout(self
, target_directory
):
38 raise Exception('CvsCheckoutTask.do_checkout() cannot be called directly.')
41 dname
= '%s/%s' % (self
.ctl
.make_temp_dir('repo'), self
.name
)
43 self
.do_checkout(dname
)
49 class BzrCheckoutTask(CvsCheckoutTask
):
50 def __init__(self
, name
, url
):
53 CvsCheckoutTask
.__init
__(self
, repository
=url
, alias
=name
)
55 def do_checkout(self
, target_directory
):
56 res
= self
.ctl
.run_command(['bzr', 'branch', self
.url
, target_directory
])
58 raise Exception('Bazaar checkout of %s failed.' % self
.url
)
60 class GitCheckoutTask(CvsCheckoutTask
):
61 def __init__(self
, name
, url
):
64 CvsCheckoutTask
.__init
__(self
, repository
=url
, alias
=name
)
66 def do_checkout(self
, target_directory
):
67 res
= self
.ctl
.run_command(['git', 'clone', '--quiet', '--depth', '5', self
.url
, target_directory
])
69 raise Exception('Git clone of %s failed.' % self
.url
)
70 hash = self
.ctl
.run_command(['git', 'rev-parse', 'HEAD'], cwd
=target_directory
, needs_output
=True)
71 if not hash['failed']:
72 self
.report
['attrs']['revision'] = hash['stdout'].strip()
74 class RsyncCheckoutTask(CvsCheckoutTask
):
75 def __init__(self
, name
, base
):
78 CvsCheckoutTask
.__init
__(self
, repository
=base
, alias
=name
)
80 def do_checkout(self
, target_directory
):
81 res
= self
.ctl
.run_command(['rsync', '-a', self
.base
+ '/', target_directory
])
83 raise Exception('Rsync of %s failed.' % self
.base
)