]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
patman: Detect missing upstream in CountCommitsToBranch
authorSimon Glass <sjg@chromium.org>
Fri, 30 Oct 2020 03:46:34 +0000 (21:46 -0600)
committerSimon Glass <sjg@chromium.org>
Thu, 5 Nov 2020 16:11:31 +0000 (09:11 -0700)
At present if we fail to find the upstream then the error output is piped
to wc, resulting in bogus results. Avoid the pipe and check the output
directly.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/patman/func_test.py
tools/patman/gitutil.py

index b39e3f671dc9c6681d2078f5731d802eb4c192e0..cce3905c09373de0f9dbf0fc3a755beb14bb1aab 100644 (file)
@@ -588,3 +588,22 @@ diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
         self.assertEqual(
             ["Found possible blank line(s) at end of file 'lib/fdtdec.c'"],
             pstrm.commit.warn)
+
+    @unittest.skipIf(not HAVE_PYGIT2, 'Missing python3-pygit2')
+    def testNoUpstream(self):
+        """Test CountCommitsToBranch when there is no upstream"""
+        repo = self.make_git_tree()
+        target = repo.lookup_reference('refs/heads/base')
+        self.repo.checkout(target, strategy=pygit2.GIT_CHECKOUT_FORCE)
+
+        # Check that it can detect the current branch
+        try:
+            orig_dir = os.getcwd()
+            os.chdir(self.gitdir)
+            with self.assertRaises(ValueError) as exc:
+                gitutil.CountCommitsToBranch(None)
+            self.assertIn(
+                "Failed to determine upstream: fatal: no upstream configured for branch 'base'",
+                str(exc.exception))
+        finally:
+            os.chdir(orig_dir)
index 27a0a9fbc1f94611c6a5c0b464fff4b99e8ec112..3a2366bcf597b18648877083007ece1ec5c2f57d 100644 (file)
@@ -66,9 +66,13 @@ def CountCommitsToBranch(branch):
         rev_range = '%s..%s' % (us, branch)
     else:
         rev_range = '@{upstream}..'
-    pipe = [LogCmd(rev_range, oneline=True), ['wc', '-l']]
-    stdout = command.RunPipe(pipe, capture=True, oneline=True).stdout
-    patch_count = int(stdout)
+    pipe = [LogCmd(rev_range, oneline=True)]
+    result = command.RunPipe(pipe, capture=True, capture_stderr=True,
+                             oneline=True, raise_on_error=False)
+    if result.return_code:
+        raise ValueError('Failed to determine upstream: %s' %
+                         result.stderr.strip())
+    patch_count = len(result.stdout.splitlines())
     return patch_count
 
 def NameRevision(commit_hash):