shithub: git9

Download patch

ref: b18bdb3ef382966221a4ea5be3c2443a6cf57b9e
parent: 6ac8cd916fbefdd081b25585aabc535d9dd0c49e
author: Michael Forney <mforney@mforney.org>
date: Sun Jan 31 22:22:14 EST 2021

git/query: add -r flag to print commits in reverse

This is useful for git/rebase and git/export, which need to
apply/export commits in chronological order.

--- a/git.1.man
+++ b/git.1.man
@@ -169,7 +169,7 @@
 .PP
 .B git/query
 [
-.B -pc
+.B -pcr
 ]
 .I query
 .PP
@@ -444,7 +444,11 @@
 
 .B Git/query
 takes an expression describing a commit, or set of commits,
-and resolves it to a list of commits. With the
+and resolves it to a list of commits.
+The
+.I -r
+option reverses the order of the commit list.
+With the
 .I -p
 option, instead of printing the commit hashes, the full
 path to their
--- a/query.c
+++ b/query.c
@@ -7,6 +7,7 @@
 
 int fullpath;
 int changes;
+int reverse;
 char *path[128];
 int npath;
 
@@ -120,7 +121,7 @@
 void
 usage(void)
 {
-	fprint(2, "usage: %s [-pc] query\n", argv0);
+	fprint(2, "usage: %s [-pcr] query\n", argv0);
 	exits("usage");
 }
 
@@ -135,6 +136,7 @@
 	ARGBEGIN{
 	case 'p':	fullpath++;	break;
 	case 'c':	changes++;	break;
+	case 'r':	reverse ^= 1;	break;
 	default:	usage();	break;
 	}ARGEND;
 
@@ -163,7 +165,7 @@
 	}else{
 		p = (fullpath ? "/mnt/git/object/" : "");
 		for(j = 0; j < n; j++)
-			print("%s%H\n", p, h[j]);
+			print("%s%H\n", p, h[reverse ? n - 1 - j : j]);
 	}
 	exits(nil);
 }