'update' and 'update-rebase' commands
authorTimo Savola <tsavola@movial.fi>
Fri, 18 Jul 2008 07:59:48 +0000 (10:59 +0300)
committerTimo Savola <tsavola@movial.fi>
Fri, 18 Jul 2008 07:59:48 +0000 (10:59 +0300)
both run git remote update for the repositories.  'update-rebase' rebases
the repositories immediately.

matrix/matrix.py
matrix/repositories.py

index 5f122c9..33e25f5 100644 (file)
@@ -57,7 +57,9 @@ def main():
                'meta':         meta,
                'clone':        clone,
                'clean':        clean,
+               'update':       update,
                'rebase':       rebase,
+               'update-rebase':update_rebase,
                'pull':         pull,
                'changes':      changes,
                'source-dist':  source_dist,
@@ -80,8 +82,11 @@ commands:
                 dependencies
   clean         remove all non-tracked files from the component git repository
                 directories
-  rebase        update repositories from server by rebasing
-  pull          update repositories from server by merging
+  update        download remote repositories from server
+  rebase        rebase local repositories against remote repositories (remotes
+                won't be updated first)
+  update-rebase update remote repositories and rebase local repositories
+  pull          update remote repositories and merge with local repositories
   changes       show commits which are not on the server
   source-dist   download and package the component sources
 '''
@@ -131,14 +136,14 @@ def parse_args():
        parser.add_option(
                '-c', '--config-dir', metavar='DIR',
                help='add a directory for finding config files (may be set ' \
-                    'multiple times; last is searched first)',
+                    'multiple times)',
                dest='initial_config_dirs', action='callback', callback=append,
                type='string')
 
        parser.add_option(
                '-r', '--root', metavar='URL',
                help='add a location for finding git repos when cloning ' \
-                    '(may be set multiple times; last is searched first)',
+                    '(may be set multiple times)',
                dest='roots', action='callback', callback=append,
                type='string')
 
@@ -240,9 +245,19 @@ def for_each_repository(func, targets=None):
 
        return ret
 
+def update(targets):
+       for_each_repository(lambda repo: repo.update(), targets)
+
 def rebase(targets):
        for_each_repository(lambda repo: repo.rebase(), targets)
 
+def update_rebase(targets):
+       def action(repo):
+               repo.update()
+               repo.rebase()
+
+       for_each_repository(action, targets)
+
 def pull(targets):
        for_each_repository(lambda repo: repo.pull(), targets)
 
index 5a5f1de..236543c 100644 (file)
@@ -127,10 +127,14 @@ class Repository(object):
                finally:
                        os.rmdir(tmp)
 
+       def update(self):
+               print 'Updating', self
+
+               git.remote_update(self.path)
+
        def rebase(self):
                print 'Rebasing', self
 
-               git.remote_update(self.path)
                git.rebase(self.path)
 
        def pull(self):