[PATCH v3 0/2] ls-tree: exit with non-zero status on error

STALE3717d

Revision v3 of 3 in this series.

7 messages, 3 authors, 2016-06-15 · open the first message on its own page

[PATCH v3 0/2] ls-tree: exit with non-zero status on error

From: Jon Seymour <hidden>
Date: 2016-06-15 22:51:38

While working with a damaged repository, I noticed that git ls-tree was reporting an error 
even though it set a zero exit code. 

This patch uses the return code from read_tree_recursive instead.

| v2: Amended test per Jens Lehmann's suggestion.
| v3: Generalize name of test script (in response to Junio's comment).
|     Removed unnecessary local variable, per Jens' comment.

Jon Seymour (2):
  Add a test to check that git ls-tree sets non-zero exit code on
    error.
  Ensure git ls-tree exits with a non-zero exit code if
    read_tree_recursive fails.

 builtin/ls-tree.c               |    6 +++---
 t/t3103-ls-tree-misc.sh         |   19 +++++++++++++++++++
 2 files changed, 22 insertions(+), 3 deletions(-)
 create mode 100755 t/t3103-ls-tree-missing-tree.sh

-- 
1.7.6.347.g6a5a9c

[PATCH v3 2/2] Ensure git ls-tree exits with a non-zero exit code if read_tree_recursive fails.

From: Jon Seymour <hidden>
Date: 2016-06-15 22:51:38

In the case of a corrupt repository, git ls-tree may report an error but
presently it exits with a code of 0.

This change uses the return code of read_tree_recursive instead.

Improved-by: Jens Lehmann [off-list ref]
Signed-off-by: Jon Seymour <redacted>
---
 builtin/ls-tree.c       |    3 +--
 t/t3103-ls-tree-misc.sh |    2 +-
 2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c
index f08c5b0..d96e9c4 100644
--- a/builtin/ls-tree.c
+++ b/builtin/ls-tree.c
@@ -173,7 +173,6 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix)
 	tree = parse_tree_indirect(sha1);
 	if (!tree)
 		die("not a tree object");
-	read_tree_recursive(tree, "", 0, 0, &pathspec, show_tree, NULL);
+	return read_tree_recursive(tree, "", 0, 0, &pathspec, show_tree, NULL);
 
-	return 0;
 }
diff --git a/t/t3103-ls-tree-misc.sh b/t/t3103-ls-tree-misc.sh
index c9c20f9..09dcf04 100755
--- a/t/t3103-ls-tree-misc.sh
+++ b/t/t3103-ls-tree-misc.sh
@@ -16,7 +16,7 @@ test_expect_success 'setup' '
 	git commit -m test
 '
 
-test_expect_failure 'ls-tree fails with non-zero exit code on broken tree' '
+test_expect_success 'ls-tree fails with non-zero exit code on broken tree' '
 	rm -f .git/objects/5f/cffbd6e4c5c5b8d81f5e9314b20e338e3ffff5 &&
 	test_must_fail git ls-tree -r HEAD
 '
-- 
1.7.6.347.gf855

[PATCH v3 1/2] Add a test to check that git ls-tree sets non-zero exit code on error.

From: Jon Seymour <hidden>
Date: 2016-06-15 22:51:38

Expected to fail at this commit, fixed by subsequent commit.

Additional tests of adhoc or uncategorised nature should be added to this
file.

Improved-by: Jens Lehmann [off-list ref]
Improved-by: Junio C Hamano [off-list ref]
Signed-off-by: Jon Seymour <redacted>
---
 t/t3103-ls-tree-misc.sh |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)
 create mode 100755 t/t3103-ls-tree-misc.sh
diff --git a/t/t3103-ls-tree-misc.sh b/t/t3103-ls-tree-misc.sh
new file mode 100755
index 0000000..c9c20f9
--- /dev/null
+++ b/t/t3103-ls-tree-misc.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+test_description='
+Miscellaneous tests for git ls-tree.
+
+	      1. git ls-tree fails in presence of tree damage.
+
+'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+	mkdir a &&
+	touch a/one &&
+	git add a/one &&
+	git commit -m test
+'
+
+test_expect_failure 'ls-tree fails with non-zero exit code on broken tree' '
+	rm -f .git/objects/5f/cffbd6e4c5c5b8d81f5e9314b20e338e3ffff5 &&
+	test_must_fail git ls-tree -r HEAD
+'
+
+test_done
-- 
1.7.6.347.gf855

Re: [PATCH v3 2/2] Ensure git ls-tree exits with a non-zero exit code if read_tree_recursive fails.

From: Nguyen Thai Ngoc Duy <hidden>
Date: 2016-06-15 22:51:38

On Sun, Jul 24, 2011 at 9:59 PM, Jon Seymour [off-list ref] wrote:
quoted hunk
@@ -173,7 +173,6 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix)
       tree = parse_tree_indirect(sha1);
       if (!tree)
               die("not a tree object");
-       read_tree_recursive(tree, "", 0, 0, &pathspec, show_tree, NULL);
+       return read_tree_recursive(tree, "", 0, 0, &pathspec, show_tree, NULL);

-       return 0;
Nit picking. Most programs return positive value (usually 1) for error
cases here. read_tree_recursive may return -1 (which turns out to be
255). Also removing the last blank line in this function would be
nice.
-- 
Duy

Re: [PATCH v3 2/2] Ensure git ls-tree exits with a non-zero exit code if read_tree_recursive fails.

From: Jon Seymour <hidden>
Date: 2016-06-15 22:51:38

Fair point.

Everyone ok with this revision? If so, I will re-roll v4.

Jens: I added the variable back because the return statement with a
ternary operator needed a line break. Let me know
if there is a better way to format it.

jon.
diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c
index d96e9c4..990e1a3 100644
--- a/builtin/ls-tree.c
+++ b/builtin/ls-tree.c
@@ -120,7 +120,7 @@ int cmd_ls_tree(int argc, const char **argv, const
char *prefix)
 {
        unsigned char sha1[20];
        struct tree *tree;
-       int i, full_tree = 0;
+       int i, full_tree = 0, ret;
        const struct option ls_tree_options[] = {
                OPT_BIT('d', NULL, &ls_options, "only show trees",
                        LS_TREE_ONLY),
@@ -173,6 +173,7 @@ int cmd_ls_tree(int argc, const char **argv, const
char *prefix)
        tree = parse_tree_indirect(sha1);
        if (!tree)
                die("not a tree object");
-       return read_tree_recursive(tree, "", 0, 0, &pathspec, show_tree, NULL);
+       ret = read_tree_recursive(tree, "", 0, 0, &pathspec, show_tree, NULL);

+       return ret ? 1 : 0;
 }


On Mon, Jul 25, 2011 at 11:31 AM, Nguyen Thai Ngoc Duy
[off-list ref] wrote:
On Sun, Jul 24, 2011 at 9:59 PM, Jon Seymour [off-list ref] wrote:
quoted
@@ -173,7 +173,6 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix)
       tree = parse_tree_indirect(sha1);
       if (!tree)
               die("not a tree object");
-       read_tree_recursive(tree, "", 0, 0, &pathspec, show_tree, NULL);
+       return read_tree_recursive(tree, "", 0, 0, &pathspec, show_tree, NULL);

-       return 0;
Nit picking. Most programs return positive value (usually 1) for error
cases here. read_tree_recursive may return -1 (which turns out to be
255). Also removing the last blank line in this function would be
nice.
--
Duy

Re: [PATCH v3 2/2] Ensure git ls-tree exits with a non-zero exit code if read_tree_recursive fails.

From: Nguyen Thai Ngoc Duy <hidden>
Date: 2016-06-15 22:51:39

On Mon, Jul 25, 2011 at 3:45 PM, Jon Seymour [off-list ref] wrote:
Fair point.

Everyone ok with this revision? If so, I will re-roll v4.
I'm good.
-- 
Duy

Re: [PATCH v3 2/2] Ensure git ls-tree exits with a non-zero exit code if read_tree_recursive fails.

From: Jens Lehmann <hidden>
Date: 2016-06-15 22:51:39

Am 25.07.2011 10:45, schrieb Jon Seymour:
Fair point.

Everyone ok with this revision? If so, I will re-roll v4.

Jens: I added the variable back because the return statement with a
ternary operator needed a line break. Let me know
if there is a better way to format it.
Now the extra variable makes sense to me, so I'm good too.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help