git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 14/19] rev-parseopt: convert --no-walk and --do-walk

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
May 8, 2019, 11:12 UTC
Message-ID
<20190508111249.15262-15-pclouds@gmail.com>
In-Reply-To
<20190508111249.15262-1-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 revision.c | 47 ++++++++++++++++++++++++++++++-----------------
 1 file changed, 30 insertions(+), 17 deletions(-)
diff --git a/revision.c b/revision.c
index b02cb4660b..f04eb7f140 100644
--- a/revision.c
+++ b/revision.c
@@ -2464,6 +2464,29 @@ static int rev_opt_glob(const struct option *opt,
 	return 0;
 }
 
+static int rev_opt_no_walk(const struct option *opt,
+			   const char *arg, int unset)
+{
+	struct rev_info *revs  = opt->value;
+
+	BUG_ON_OPT_NEG(unset);
+	if (!arg) {
+		revs->no_walk = REVISION_WALK_NO_WALK_SORTED;
+	} else {
+		/*
+		 * Detached form ("--no-walk X" as opposed to "--no-walk=X")
+		 * not allowed, since the argument is optional.
+		 */
+		if (!strcmp(arg, "sorted"))
+			revs->no_walk = REVISION_WALK_NO_WALK_SORTED;
+		else if (!strcmp(arg, "unsorted"))
+			revs->no_walk = REVISION_WALK_NO_WALK_UNSORTED;
+		else
+			return error(_("invalid argument to --no-walk"));
+	}
+	return 0;
+}
+
 static int rev_opt_not(const struct option *opt,
 		       const char *arg, int unset)
 {
@@ -2572,6 +2595,12 @@ static void make_pseudo_options(struct rev_info *revs)
 		OPT_REV_NOARG(0, "not",
 			      N_("reverse the meaning of '^' for all following revisions"),
 			      rev_opt_not),
+		OPT_REV_OPTARG(0, "no-walk", N_("(sorted|unsorted)"),
+			       N_("only show given commits but do not traverse their ancestors"),
+			       rev_opt_no_walk),
+		OPT_SET_INT_F(0, "do-walk", &revs->no_walk,
+			      N_("override a previous --no-walk"),
+			      0, PARSE_OPT_NONEG),
 		OPT_END()
 	};
 	ALLOC_ARRAY(revs->pseudo_options, ARRAY_SIZE(options));
@@ -2583,7 +2612,6 @@ static int handle_revision_pseudo_opt(const char *submodule,
 				int argc, const char **argv, int *flags)
 {
 	const char *arg = argv[0];
-	const char *optarg;
 	struct ref_store *refs;
 
 	if (submodule) {
@@ -2611,22 +2639,7 @@ static int handle_revision_pseudo_opt(const char *submodule,
 	if (argc)
 		return argc;
 
-	if (!strcmp(arg, "--no-walk")) {
-		revs->no_walk = REVISION_WALK_NO_WALK_SORTED;
-	} else if (skip_prefix(arg, "--no-walk=", &optarg)) {
-		/*
-		 * Detached form ("--no-walk X" as opposed to "--no-walk=X")
-		 * not allowed, since the argument is optional.
-		 */
-		if (!strcmp(optarg, "sorted"))
-			revs->no_walk = REVISION_WALK_NO_WALK_SORTED;
-		else if (!strcmp(optarg, "unsorted"))
-			revs->no_walk = REVISION_WALK_NO_WALK_UNSORTED;
-		else
-			return error("invalid argument to --no-walk");
-	} else if (!strcmp(arg, "--do-walk")) {
-		revs->no_walk = 0;
-	} else if (!strcmp(arg, "--single-worktree")) {
+	if (!strcmp(arg, "--single-worktree")) {
 		revs->single_worktree = 1;
 	} else {
 		return 0;
-- 
2.21.0.1141.gd54ac2cb17
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 20 of 25 in “Convert revision.c to parseopt part 1/4”
  1. 00/19 Convert revision.c to parseopt part 1/4Nguyễn Thái Ngọc Duy, May 8, 2019
  2. 01/19 revision.h: avoid bit fields in struct rev_infoNguyễn Thái Ngọc Duy, May 8, 2019
  3. Derrick StoleeMay 8, 2019
  4. Duy NguyenMay 8, 2019
  5. Derrick StoleeMay 8, 2019
  6. Duy NguyenMay 9, 2019
  7. Derrick StoleeMay 9, 2019
  8. 02/19 revision.h: move repo field downNguyễn Thái Ngọc Duy, May 8, 2019
  9. 03/19 revision.c: prepare to convert handle_revision_pseudo_opt()Nguyễn Thái Ngọc Duy, May 8, 2019
  10. 04/19 rev-parseopt: convert --allNguyễn Thái Ngọc Duy, May 8, 2019
  11. 05/19 rev-parseopt: convert --branchesNguyễn Thái Ngọc Duy, May 8, 2019
  12. 06/19 rev-parseopt: convert --bisectNguyễn Thái Ngọc Duy, May 8, 2019
  13. 07/19 rev-parseopt: convert --tagsNguyễn Thái Ngọc Duy, May 8, 2019
  14. 08/19 rev-parseopt: convert --remotesNguyễn Thái Ngọc Duy, May 8, 2019
  15. 09/19 rev-parseopt: convert --globNguyễn Thái Ngọc Duy, May 8, 2019
  16. 10/19 rev-parseopt: convert --excludeNguyễn Thái Ngọc Duy, May 8, 2019
  17. 11/19 rev-parseopt: convert --reflogNguyễn Thái Ngọc Duy, May 8, 2019
  18. 12/19 rev-parseopt: convert --indexed-objectsNguyễn Thái Ngọc Duy, May 8, 2019
  19. 13/19 rev-parseopt: convert --notNguyễn Thái Ngọc Duy, May 8, 2019
  20. 14/19 rev-parseopt: convert --no-walk and --do-walkNguyễn Thái Ngọc Duy, May 8, 2019
  21. 15/19 rev-parseopt: convert --single-worktreeNguyễn Thái Ngọc Duy, May 8, 2019
  22. 16/19 rev-parseopt: prepare to convert handle_revision_opt()Nguyễn Thái Ngọc Duy, May 8, 2019
  23. 17/19 rev-parseopt: convert --max-countNguyễn Thái Ngọc Duy, May 8, 2019
  24. 18/19 rev-parseopt: convert --skipNguyễn Thái Ngọc Duy, May 8, 2019
  25. 19/19 rev-parseopt: convert --min-age and --max-ageNguyễn Thái Ngọc Duy, May 8, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.