It's not safe to use the git commit -a option since there might
authorZac Medico <zmedico@gentoo.org>
Wed, 3 Dec 2008 08:22:10 +0000 (08:22 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 3 Dec 2008 08:22:10 +0000 (08:22 -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.

svn path=/main/trunk/; revision=12142

bin/repoman

index d773419b9335ead98a29a564c1cd21aa6a517c98..9dc6ed6c942e6fabef8a576043e90a89b4c60d61 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[:]