It's not safe to use the git commit -a option since there might
authorZac Medico <zmedico@gentoo.org>
Wed, 3 Dec 2008 08:23:34 +0000 (08:23 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 3 Dec 2008 08:23:34 +0000 (08:23 -0000)
be some modified files elsewhere in the working tree that the
user doesn't want to commit. Therefore, call git update-index
in order to ensure that the index is updated with the latest
versions of all new and modified files in the relevant portion
of the working tree. (trunk r12142)

svn path=/main/branches/2.1.6/; revision=12143

bin/repoman

index 9c4e1ad91275f1ae1c5a07bc12929b9d870851aa..da3e4fcdf5c1a02f968fff53090d20ec854c97c5 100755 (executable)
@@ -1764,6 +1764,8 @@ else:
                        mymanifests.add(f)
                else:
                        myupdates.add(f)
+       if vcs == 'git':
+               myupdates.difference_update(myremoved)
        myupdates = list(myupdates)
        mymanifests = list(mymanifests)
        myheaders = []
@@ -2058,6 +2060,27 @@ else:
                        portage.writemsg("!!! Disabled FEATURES='sign'\n")
                        signed = False
 
+       if vcs == 'git':
+               # It's not safe to use the git commit -a option since there might
+               # be some modified files elsewhere in the working tree that the
+               # user doesn't want to commit. Therefore, call git update-index
+               # in order to ensure that the index is updated with the latest
+               # versions of all new and modified files in the relevant portion
+               # of the working tree.
+               myfiles = mymanifests + myupdates
+               myfiles.sort()
+               update_index_cmd = ["git", "update-index"]
+               update_index_cmd.extend(f.lstrip("./") for f in myfiles)
+               if options.pretend:
+                       print "(%s)" % (" ".join(update_index_cmd),)
+               else:
+                       retval = spawn(update_index_cmd, env=os.environ)
+                       if retval != os.EX_OK:
+                               writemsg_level(("!!! Exiting on %s (shell) " + \
+                                       "error code: %s\n") % (vcs, retval),
+                                       level=logging.ERROR, noiselevel=-1)
+                               sys.exit(retval)
+
        if vcs == 'git' or manifest_commit_required or signed:
 
                myfiles = mymanifests[:]