# git-changes-script to show inter tree changes

5 messages from 2005-04-23 to 2005-04-24. Participants: James Bottomley, Petr Baudis.
Thread: https://gitlist.dev/t/267

## James Bottomley, 2005-04-23 18:43

Subject: git-changes-script to show inter tree changes
Message-ID: <1114281792.5068.10.camel@mulgrave>
URL: https://gitlist.dev/e/1114281792.5068.10.camel%40mulgrave

```
One of the features I found most useful about bk changes was the ability
to see changes in my tree that weren't in the other tree (I use this to
keep track of what patches I actually have).

I've modified the gitlog script to take the -L and -R options (local
directories only; won't work on remotes like bk changes would) to add
this functionality.

James

#!/bin/bash
#
# Make a log of changes in a GIT branch.
#
# This script was originally written by (c) Ross Vandegrift.
# Adapted to his scripts set by (c) Petr Baudis, 2005.
# Major optimizations by (c) Phillip Lougher.
# Rendered trivial by Linus Torvalds.
# Added -L|-R option by James Bottomley
#
# options:
# script [-L <dir> | -R <dir> |-r <from_sha1> [ -r <to_sha1] ] [<sha1>]
#
# With no options shows all the revisions from HEAD to the root
# -L shows all the changes in the local tree compared to the tree at <dir>
# -R shows all the changes in the remote tree at <dir> compared to the local
# -r shows all the changes in one commit or between two

tmpfile=/tmp/git_changes.$$
r1=
r2=

showcommit() {
	commit="$1"
	echo commit ${commit%:*};
	cat-file commit $commit | \
		while read key rest; do
			case "$key" in
			"author"|"committer")
				date=(${rest#*> })
				sec=${date[0]};
				pdate="$(date -Rd "1970-01-01 UTC + $sec sec" 2>/dev/null)"
				if [ "$pdate" ]; then
					echo $key $rest | sed "s/>.*/> ${pdate/+0000/$tz}/"
				else
					echo $key $rest
				fi
				;;
			"")
				echo; cat
				;;
			*)
				echo $key $rest
				;;
			esac

		done
}

while true; do
	case "$1" in
		-R)	shift;
			diffsearch=+
			remote="$1"
			shift;;
		-L)	shift;
			diffsearch=-
			remote="$1"
			shift;;
		-r)	shift;
			if [ -z "$r1" ]; then
				r1="$1"
			else
				r2="$1"
			fi
			shift;;
		*)	base="$1"
			break;;
	esac
done

if [ -n "$r1" ]; then
	if [ -z "$r2" ]; then
		showcommit $r1
		exit 0
	fi
	diffsearch=+
	remote=`pwd`;
	tobase="$r2";
	base="$r1"
fi
	
if [ -z "$base" ]; then
	base=$(cat .git/HEAD) || exit 1
fi

rev-tree $base | sort -rn  > ${tmpfile}.base
if [ -n "$remote" ]; then
	[ -d $remote/.git ] || exit 1
	if [ -z "$tobase" ]; then
		tobase=$(cat $remote/.git/HEAD) || exit 1
	fi
	pushd $remote > /dev/null
	rev-tree $tobase | sort -rn > ${tmpfile}.remote
	diff -u ${tmpfile}.base ${tmpfile}.remote | grep "^${diffsearch}[^${diffsearch}]" | cut -c 1- > ${tmpfile}.diff
	rm -f ${tmpfile}.base ${tmpfile}.remote
	mv ${tmpfile}.diff ${tmpfile}.base
	if [ $diffsearch = "-" ]; then
		popd > /dev/null
	fi
fi

[ -s "${tmpfile}.base" ] || exit 0

cat ${tmpfile}.base | while read time commit parents; do
	showcommit $commit
	echo -e "\n--------------------------"

done
rm -f ${tmpfile}.base



```

## Petr Baudis, 2005-04-23 23:09

Subject: Re: git-changes-script to show inter tree changes
Message-ID: <20050423230937.GF13222@pasky.ji.cz>
URL: https://gitlist.dev/e/20050423230937.GF13222%40pasky.ji.cz
In-Reply-To: <1114281792.5068.10.camel@mulgrave>

```
Dear diary, on Sat, Apr 23, 2005 at 08:43:12PM CEST, I got a letter
where James Bottomley <James.Bottomley@SteelEye.com> told me that...
> One of the features I found most useful about bk changes was the ability
> to see changes in my tree that weren't in the other tree (I use this to
> keep track of what patches I actually have).
> 
> I've modified the gitlog script to take the -L and -R options (local
> directories only; won't work on remotes like bk changes would) to add
> this functionality.

Linus isn't probably the right person to Cc on this, since this is
git-pasky thing.  Can you please post it as a signed-off patch?

I don't get what are you doing anyway. I don't know the "bk changes"
tool. Can't you just do

	git log theothertree yourtree

?

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
C++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor

```

## James Bottomley, 2005-04-24 01:39

Subject: Re: git-changes-script to show inter tree changes
Message-ID: <1114306762.4805.3.camel@mulgrave>
URL: https://gitlist.dev/e/1114306762.4805.3.camel%40mulgrave
In-Reply-To: <20050423230937.GF13222@pasky.ji.cz>

```
On Sun, 2005-04-24 at 01:09 +0200, Petr Baudis wrote:
> Linus isn't probably the right person to Cc on this, since this is
> git-pasky thing.  Can you please post it as a signed-off patch?

I'm just offering it as one of the scripts I need to operate a git tree
as a maintainer.  I don't have git-pasky installed, so I can't patch it
against anything.  However, feel free to incorporate any pieces you
need.

> I don't get what are you doing anyway. I don't know the "bk changes"
> tool. Can't you just do
> 
> 	git log theothertree yourtree

No idea .. not used it.  However, how does this show the -L and -R diffs
since there are two possible views of changes between trees?  It's
primarily -L (changes in local) I need to keep the changes in my local
tree.  -R (changes in remote) is just useful to show what changes I'm
missing and might need to merge.

James



```

## Petr Baudis, 2005-04-24 12:36

Subject: Re: git-changes-script to show inter tree changes
Message-ID: <20050424123621.GB1507@pasky.ji.cz>
URL: https://gitlist.dev/e/20050424123621.GB1507%40pasky.ji.cz
In-Reply-To: <1114306762.4805.3.camel@mulgrave>

```
Dear diary, on Sun, Apr 24, 2005 at 03:39:22AM CEST, I got a letter
where James Bottomley <James.Bottomley@SteelEye.com> told me that...
> On Sun, 2005-04-24 at 01:09 +0200, Petr Baudis wrote:
> > Linus isn't probably the right person to Cc on this, since this is
> > git-pasky thing.  Can you please post it as a signed-off patch?
> 
> I'm just offering it as one of the scripts I need to operate a git tree
> as a maintainer.  I don't have git-pasky installed, so I can't patch it
> against anything.  However, feel free to incorporate any pieces you
> need.

Aha,  I thought this is based on the current gitlog.sh, sorry.

> > I don't get what are you doing anyway. I don't know the "bk changes"
> > tool. Can't you just do
> > 
> > 	git log theothertree yourtree
> 
> No idea .. not used it.  However, how does this show the -L and -R diffs
> since there are two possible views of changes between trees?  It's
> primarily -L (changes in local) I need to keep the changes in my local
> tree.  -R (changes in remote) is just useful to show what changes I'm
> missing and might need to merge.

For -R, you'd probably do

	git log yourtree theothertree

(the range of changes between yourtree and theothertree, literally).

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
C++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor

```

## James Bottomley, 2005-04-24 12:48

Subject: Re: git-changes-script to show inter tree changes
Message-ID: <1114346892.4997.5.camel@mulgrave>
URL: https://gitlist.dev/e/1114346892.4997.5.camel%40mulgrave
In-Reply-To: <20050424123621.GB1507@pasky.ji.cz>

```
On Sun, 2005-04-24 at 14:36 +0200, Petr Baudis wrote:
> Aha,  I thought this is based on the current gitlog.sh, sorry.

I think it is ... such a beast briefly appeared in the git tree, which
is where I got the skeleton from.

> For -R, you'd probably do
> 
> 	git log yourtree theothertree
> 
> (the range of changes between yourtree and theothertree, literally).

As long as that's a true what's in the other tree only, -L should appear
if you simply reverse the arguments.

James



```
