Bug #305393 - Handle new sdiff exit status for diffutils-2.9.
authorZac Medico <zmedico@gentoo.org>
Thu, 18 Feb 2010 08:13:29 +0000 (08:13 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 18 Feb 2010 08:13:29 +0000 (08:13 -0000)
svn path=/main/trunk/; revision=15365

bin/dispatch-conf

index fa8ca92009b5ac32d189eb629684ece077746b81..776ce5dd836ea1e72cfc87d4ef02381d3cf21c32 100755 (executable)
@@ -42,6 +42,7 @@ FIND_EXTANT_CONFIGS  = "find '%s' %s -name '._cfg????_%s' ! -name '.*~' ! -iname
 DIFF_CONTENTS        = "diff -Nu '%s' '%s'"
 DIFF_CVS_INTERP      = "diff -Nu '%s' '%s' | grep '^[+-][^+-]' | grep -v '# .Header:.*'"
 DIFF_WSCOMMENTS      = "diff -Nu '%s' '%s' | grep '^[+-][^+-]' | grep -v '^[-+]#' | grep -v '^[-+][:space:]*$'"
+diffutils_2_9 = False
 
 # We need a secure scratch dir and python does silly verbose errors on the use of tempnam
 oldmask = os.umask(0o077)
@@ -117,6 +118,17 @@ class dispatch:
                         "use-rcs=yes in config; fatal', file=sys.stderr)
                     return False
 
+        merge_cmd = self.options.get("merge", "").split()
+        global diffutils_2_9
+        if merge_cmd and merge_cmd[0] == 'sdiff':
+            vardb = portage.db['/']['vartree'].dbapi
+            diffutils = vardb.match('sys-apps/diffutils')
+            if diffutils:
+                diffutils = diffutils[0]
+                diffutils_split = portage.catpkgsplit(diffutils)[1:]
+                if portage.vercmp(diffutils_split,
+                    portage.pkgsplit('diffutils-2.9')) >= 0:
+                    diffutils_2_9 = True
 
         # config file freezing support
         frozen_files = set(self.options.get("frozen-files", "").split())
@@ -267,6 +279,10 @@ class dispatch:
                     merged = SCRATCH_DIR+"/"+os.path.basename(conf['current'])
                     print()
                     ret = os.system (self.options['merge'] % (merged, conf ['current'], newconf))
+                    ret = os.WEXITSTATUS(ret)
+                    if diffutils_2_9:
+                        if ret < 2:
+                            ret = 0
                     if ret:
                         print("Failure running 'merge' command")
                         continue