[PATCH/RFC] Add git-changelog-script to show the changes between two commits

Subsystems: kernel build + files below scripts/ (unless maintained elsewhere), the rest

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

[PATCH/RFC] Add git-changelog-script to show the changes between two commits

From: Ryan Anderson <hidden>
Date: 2016-06-15 22:42:02

I'll start by saying that, well, I'm pretty sure this patch is wrong.

I was trying to look at the changes between two commits, sanely, but
failed to find a tool or example in the tree that hinted at how to do
this.

After poking around at git-whatchanged trying to figure out what it is
trying to do - I gave up and wrote something that *seems* to work
correctly for the simple test cases I pulled together.  I just don't
trust it.

My thinking here is that, when doing a release of a package such as git
or Linux, the releaser could do something like:

	git changelog $LAST_RELEASED_COMMIT HEAD | git-shortlog |\
		mail -s "Linux 2.7.0 finally open" linux-kernel

Where LAST_RELEASED is recorded somewhere or pulled from an internal
changelog with something like:
	grep "Released commit-id:" changelog | awk -F: '{print $2}'" |\
		head -1

Signed-off-by: Ryan Anderson <redacted>
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -36,7 +36,8 @@ SCRIPTS=git git-apply-patch-script git-m
 	git-reset-script git-add-script git-checkout-script git-clone-script \
 	gitk git-cherry git-rebase-script git-relink-script git-repack-script \
 	git-format-patch-script git-sh-setup-script git-push-script \
-	git-branch-script git-parse-remote
+	git-branch-script git-parse-remote \
+	git-changelog-script git-revdiff-script
 
 PROG=   git-update-cache git-diff-files git-init-db git-write-tree \
 	git-read-tree git-commit-tree git-cat-file git-fsck-cache \
diff --git a/git-changelog-script b/git-changelog-script
new file mode 100755
--- /dev/null
+++ b/git-changelog-script
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+git-revdiff-script $@ | git-diff-tree --stdin --pretty -r | LESS="$LESS -S" ${PAGER:-less}
diff --git a/git-revdiff-script b/git-revdiff-script
new file mode 100755
--- /dev/null
+++ b/git-revdiff-script
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+my ($start,$end) = @ARGV;
+
+open(R,"-|","git-rev-list",$start)
+	or die "Failed to pipe from git-rev-list: " . $!;
+
+my $rev;
+while ($rev = <R>) {
+	chomp $rev;
+	print $rev,"\n";
+	last if $end eq $rev;
+}
+
+close(R);

-- 

Ryan Anderson
  sometimes Pug Majere

Re: [PATCH/RFC] Add git-changelog-script to show the changes between two commits

From: Ryan Anderson <hidden>
Date: 2016-06-15 22:42:02

Nevermind, I apparently wanted:
	git-whatchanged HEAD ^$LAST_RELEASED_COMMIT

I'll see about writing up a description of the extended commit reference
scheme.  Currently I can't find a description of it anywhere in the
source tree.

On Thu, Jul 21, 2005 at 02:31:43AM -0400, Ryan Anderson wrote:
quoted hunk
I'll start by saying that, well, I'm pretty sure this patch is wrong.

I was trying to look at the changes between two commits, sanely, but
failed to find a tool or example in the tree that hinted at how to do
this.

After poking around at git-whatchanged trying to figure out what it is
trying to do - I gave up and wrote something that *seems* to work
correctly for the simple test cases I pulled together.  I just don't
trust it.

My thinking here is that, when doing a release of a package such as git
or Linux, the releaser could do something like:

	git changelog $LAST_RELEASED_COMMIT HEAD | git-shortlog |\
		mail -s "Linux 2.7.0 finally open" linux-kernel

Where LAST_RELEASED is recorded somewhere or pulled from an internal
changelog with something like:
	grep "Released commit-id:" changelog | awk -F: '{print $2}'" |\
		head -1

Signed-off-by: Ryan Anderson <redacted>
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -36,7 +36,8 @@ SCRIPTS=git git-apply-patch-script git-m
 	git-reset-script git-add-script git-checkout-script git-clone-script \
 	gitk git-cherry git-rebase-script git-relink-script git-repack-script \
 	git-format-patch-script git-sh-setup-script git-push-script \
-	git-branch-script git-parse-remote
+	git-branch-script git-parse-remote \
+	git-changelog-script git-revdiff-script
 
 PROG=   git-update-cache git-diff-files git-init-db git-write-tree \
 	git-read-tree git-commit-tree git-cat-file git-fsck-cache \
diff --git a/git-changelog-script b/git-changelog-script
new file mode 100755
--- /dev/null
+++ b/git-changelog-script
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+git-revdiff-script $@ | git-diff-tree --stdin --pretty -r | LESS="$LESS -S" ${PAGER:-less}
diff --git a/git-revdiff-script b/git-revdiff-script
new file mode 100755
--- /dev/null
+++ b/git-revdiff-script
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+my ($start,$end) = @ARGV;
+
+open(R,"-|","git-rev-list",$start)
+	or die "Failed to pipe from git-rev-list: " . $!;
+
+my $rev;
+while ($rev = <R>) {
+	chomp $rev;
+	print $rev,"\n";
+	last if $end eq $rev;
+}
+
+close(R);

-- 

Ryan Anderson
  sometimes Pug Majere
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
-- 

Ryan Anderson
  sometimes Pug Majere

Re: [PATCH/RFC] Add git-changelog-script to show the changes between two commits

From: Linus Torvalds <torvalds@osdl.org>
Date: 2016-06-15 22:42:02


On Thu, 21 Jul 2005, Ryan Anderson wrote:
Nevermind, I apparently wanted:
	git-whatchanged HEAD ^$LAST_RELEASED_COMMIT
Yes. And since git-whatchanged uses git-rev-parse, and can thus use the 
extended git commit format, including ranges, you can literally write the 
above as

	git-whatchanged $LAST_RELEASED_COMMIT..

(or, if you only care about the log, not the actual diff lines, use the 
faster and simpler

	git log $LAST_RELEASED_COMMIT..

which will also show you merges - something git-whatchanged doesn't do).

You can also use the "--pretty" format specializers, so

	git log --pretty=short $LAST_RELEASED_COMMIT..

will do exactly what you'd expect it to do.

		Linus
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help