Re: [PATCH 02/10] revert: Propogate errors upwards from do_pick_commit

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

Re: [PATCH 02/10] revert: Propogate errors upwards from do_pick_commit

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:51:19

Ramkumar Ramachandra [off-list ref] writes:
+static int error_dirty_index(const char *me)
 {
+	if (read_cache_unmerged())
+		return error_resolve_conflict(me);
+
+	int ret = error(_("Your local changes would be overwritten by %s.\n"), me);
+	if (advice_commit_before_merge)
+		advise(_("Please, commit your changes or stash them to proceed."));
+	return ret;
 }
I like this rewrite whose result is short-and-sweet, but you do not even
need the "ret" variable. error() always yields -1, no?
quoted hunk
@@ -594,14 +584,28 @@ static int revert_or_cherry_pick(int argc, const char **argv)
 
 int cmd_revert(int argc, const char **argv, const char *prefix)
 {
+	int res = 0;
 	if (isatty(0))
 		edit = 1;
 	action = REVERT;
-	return revert_or_cherry_pick(argc, argv);
+	res = revert_or_cherry_pick(argc, argv);
+	if (res > 0)
+		/* Exit status from conflict */
+		return res;
+	if (res < 0)
+		/* Other error */
+		exit(128);
+	return 0;
 }
 
 int cmd_cherry_pick(int argc, const char **argv, const char *prefix)
 {
+	int res = 0;
 	action = CHERRY_PICK;
-	return revert_or_cherry_pick(argc, argv);
+	res = revert_or_cherry_pick(argc, argv);
+	if (res > 0)
+		return res;
+	if (res < 0)
+		exit(128);
+	return 0;
 }
This hunk is dubious.

 - Why initialize res to zero if it always is assigned the return value of
   revert_or_cherry_pick() before it is used?

 - The called function seems to return errors from various places but as
   far as I see they are all return value of error(), so it would be
   equivalent to

	if (r_o_c_p(...))
		exit(128);
	return 0;

If you are going to introduce different return values from r-o-c-p() in a
later patch, these functions should be updated in that patch, I think.

Re: [PATCH 02/10] revert: Propogate errors upwards from do_pick_commit

From: Ramkumar Ramachandra <hidden>
Date: 2016-06-15 22:51:19

Hi Junio,

Junio C Hamano writes:
Ramkumar Ramachandra [off-list ref] writes:
quoted
+static int error_dirty_index(const char *me)
 {
+     if (read_cache_unmerged())
+             return error_resolve_conflict(me);
+
+     int ret = error(_("Your local changes would be overwritten by %s.\n"), me);
+     if (advice_commit_before_merge)
+             advise(_("Please, commit your changes or stash them to proceed."));
+     return ret;
 }
I like this rewrite whose result is short-and-sweet, but you do not even
need the "ret" variable. error() always yields -1, no?
Okay; I didn't do this in the first place because I thought it would
be inelegant to hardcode '-1'. Fixed anyway.
quoted
@@ -594,14 +584,28 @@ static int revert_or_cherry_pick(int argc, const char **argv)
 int cmd_revert(int argc, const char **argv, const char *prefix)
 {
+     int res = 0;
      if (isatty(0))
              edit = 1;
      action = REVERT;
-     return revert_or_cherry_pick(argc, argv);
+     res = revert_or_cherry_pick(argc, argv);
+     if (res > 0)
+             /* Exit status from conflict */
+             return res;
+     if (res < 0)
+             /* Other error */
+             exit(128);
+     return 0;
 }

 int cmd_cherry_pick(int argc, const char **argv, const char *prefix)
 {
+     int res = 0;
      action = CHERRY_PICK;
-     return revert_or_cherry_pick(argc, argv);
+     res = revert_or_cherry_pick(argc, argv);
+     if (res > 0)
+             return res;
+     if (res < 0)
+             exit(128);
+     return 0;
 }
This hunk is dubious.

 - Why initialize res to zero if it always is assigned the return value of
  revert_or_cherry_pick() before it is used?
Okay. Fixed.
 - The called function seems to return errors from various places but as
  far as I see they are all return value of error(), so it would be
  equivalent to

       if (r_o_c_p(...))
               exit(128);
       return 0;

If you are going to introduce different return values from r-o-c-p() in a
later patch, these functions should be updated in that patch, I think.
revert_or_cherry_pick *does* return different values in this patch! As
I've pointed out in the comment, positive exit status indicates a
conflict, while a negative one indicates an error. To prove to myself
that this is case, I applied this diff temporarily and ran all tests
-- and viola, t3505-cherry-pick-empty.sh broke. Is there something I'm
not understanding correctly?

Thanks for the review.

Signed-off-by: Ramkumar Ramachandra <redacted>
diff --git a/builtin/revert.c b/builtin/revert.c
index 523d41a..9c7921b 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -584,28 +584,22 @@ static int revert_or_cherry_pick(int argc, const
char **argv)

 int cmd_revert(int argc, const char **argv, const char *prefix)
 {
-	int res = 0;
+	int res;
 	if (isatty(0))
 		edit = 1;
 	action = REVERT;
 	res = revert_or_cherry_pick(argc, argv);
-	if (res > 0)
-		/* Exit status from conflict */
-		return res;
-	if (res < 0)
-		/* Other error */
+	if (res)
 		exit(128);
 	return 0;
 }

 int cmd_cherry_pick(int argc, const char **argv, const char *prefix)
 {
-	int res = 0;
+	int res;
 	action = CHERRY_PICK;
 	res = revert_or_cherry_pick(argc, argv);
-	if (res > 0)
-		return res;
-	if (res < 0)
+	if (res)
 		exit(128);
 	return 0;
 }
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help