test-in-vm: always let command finish
[ci.git] / hbuild / cvs.py
blobf525c3e5ae115bc0cb407b3480524f385b359ad7
1 #!/usr/bin/env python3
4 # Copyright (c) 2017 Vojtech Horky
5 # All rights reserved.
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
9 # are met:
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.')
40 def run(self):
41 dname = '%s/%s' % (self.ctl.make_temp_dir('repo'), self.name)
43 self.do_checkout(dname)
45 return {
46 'dir': dname
49 class BzrCheckoutTask(CvsCheckoutTask):
50 def __init__(self, name, url):
51 self.name = name
52 self.url = 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 ])
57 if res['failed']:
58 raise Exception('Bazaar checkout of %s failed.' % self.url)
60 class GitCheckoutTask(CvsCheckoutTask):
61 def __init__(self, name, url):
62 self.name = name
63 self.url = 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 ])
68 if res['failed']:
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):
76 self.name = name
77 self.base = 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 ])
82 if res['failed']:
83 raise Exception('Rsync of %s failed.' % self.base)