Changeset 649a64c in rtems-source-builder for source-builder/sb/git.py


Ignore:
Timestamp:
Apr 16, 2013, 4:25:34 AM (8 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.11, 4.9, 5, master
Children:
82e9f91
Parents:
b022691
git-author:
Chris Johns <chrisj@…> (04/16/13 04:25:34)
git-committer:
Chris Johns <chrisj@…> (04/16/13 04:28:34)
Message:

Add download git support.

Add support to use a git cloned repo as the source. Move the download
code out of the build module and into a separate module. Add to this
module support for git.

Update the GCC common configuration to support using a symlinked
git repo.

Add checks for all languages.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source-builder/sb/git.py

    rb022691 r649a64c  
    3838    def _run(self, args, check = False):
    3939        e = execute.capture_execution()
    40         exit_code, proc, output = e.spawn([self.git] + args)
     40        if path.exists(self.path):
     41            cwd = self.path
     42        else:
     43            cwd = None
     44        exit_code, proc, output = e.spawn([self.git] + args, cwd = cwd)
    4145        if check:
    4246            self._git_exit_code(exit_code)
     
    6266        return (int(vs[0]), int(vs[1]), int(vs[2]), int(vs[3]))
    6367
     68    def clone(self, url, path):
     69        ec, output = self._run(['clone', url, path])
     70        if ec != 0:
     71            raise error.general('clone of %s failed: %s' % (url, output))
     72
     73    def fetch(self, url, path):
     74        ec, output = self._run(['fetch', url])
     75        if ec != 0:
     76            raise error.general('fetch of %s failed: %s' % (url, output))
     77
     78    def pull(self):
     79        ec, output = self._run(['pull'])
     80        if ec != 0:
     81            raise error.general('pull of %s failed: %s' % (url, output))
     82
     83    def reset(self, args):
     84        if type(args) == str:
     85            args = [args]
     86        ec, output = self._run(['reset'] + args)
     87        if ec != 0:
     88            raise error.general('pull of %s failed: %s' % (url, output))
     89
     90    def branch(self):
     91        ec, output = self._run(['branch'])
     92        if ec == 0:
     93            for b in output.split('\n'):
     94                if b[0] == '*':
     95                    return b[2:]
     96        return None
     97
     98    def checkout(self, branch = 'master'):
     99        ec, output = self._run(['checkout', branch])
     100        return ec == 0
     101
    64102    def status(self):
    65103        _status = {}
    66         ec, output = self._run(['status'])
    67         if ec == 0:
    68             state = 'none'
    69             for l in output.split('\n'):
    70                 if l.startswith('# On branch '):
    71                     _status['branch'] = l[len('# On branch '):]
    72                 elif l.startswith('# Changes to be committed:'):
    73                     state = 'staged'
    74                 elif l.startswith('# Changes not staged for commit:'):
    75                     state = 'unstaged'
    76                 elif l.startswith('# Untracked files:'):
    77                     state = 'untracked'
    78                 elif state != 'none' and l[0] == '#':
    79                     if l.strip() != '#' and not l.startswith('#   ('):
    80                         if state not in _status:
    81                             _status[state] = []
    82                         l = l[1:]
    83                         if ':' in l:
    84                             l = l.split(':')[1]
    85                         _status[state] += [l.strip()]
     104        if path.exists(self.path):
     105            ec, output = self._run(['status'])
     106            if ec == 0:
     107                state = 'none'
     108                for l in output.split('\n'):
     109                    if l.startswith('# On branch '):
     110                        _status['branch'] = l[len('# On branch '):]
     111                    elif l.startswith('# Changes to be committed:'):
     112                        state = 'staged'
     113                    elif l.startswith('# Changes not staged for commit:'):
     114                        state = 'unstaged'
     115                    elif l.startswith('# Untracked files:'):
     116                        state = 'untracked'
     117                    elif state != 'none' and l[0] == '#':
     118                        if l.strip() != '#' and not l.startswith('#   ('):
     119                            if state not in _status:
     120                                _status[state] = []
     121                            l = l[1:]
     122                            if ':' in l:
     123                                l = l.split(':')[1]
     124                            _status[state] += [l.strip()]
    86125        return _status
    87126
     
    91130
    92131    def valid(self):
    93         ec, output = self._run(['status'])
    94         return ec == 0
     132        if path.exists(self.path):
     133            ec, output = self._run(['status'])
     134            return ec == 0
     135        return False
    95136
    96137    def remotes(self):
Note: See TracChangeset for help on using the changeset viewer.