Thread (2 messages) 2 messages, 2 authors, 2005-05-17

Re: [git patches] 2.6.x libata fixes

From: Linus Torvalds <torvalds@osdl.org>
Date: 2005-05-17 16:22:35
Also in: lkml


On Tue, 17 May 2005, Jeff Garzik wrote:
Please pull the master (HEAD) branch of
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-2.6.git
Pulled.
Review contents (diffstat/changelog/patch) attached to this email.  I'm 
still new to git, so pull carefully.  :)
My pull gets the same diffstat as you claimed, and everything looks good.
Three git-related comments:

1) James Bottomley's git-changes-script is darned useful, for this 
ex-BitKeeper user.  I've attached it.
It should _really_ be updated to do a better job, modern git can do much 
better. 

See the answer to the next question, since that's really the same thing:
2) What is the preferred way to generate a 'for Linus' diff?  I used to 
BitKeeper's "repogca" feature to find the GCA for the diff.
You can use

	"git-merge-base HEAD OTHER_HEAD"

to get the global common ancestor. However, that's pretty pointless, since 
what you're after is really "what are the differences", and that's what 
"git-rev-tree" gives you for any arbitrary points.

With modern git, what you do is something like this (totally untested, 
but you hopefully get the idea):

	local=.
	remote=.
	localhead=HEAD
	remotehead=HEAD

	#
	# default to silent mode (changelog only),
	# use "-p" to enable full patch information.
	#
	diff-tree-arg=-s

	#
	# Get the arguments
	#
	while true; do
	   case "$1" in
	      -R)     shift;
	              remote="$1"
	              shift;;
	      -L)     shift;
	              local="$1"
	              shift;;
	      -r)     shift;
	              remotehead="$1"
	              shift;;
	      -p)     diff-tree-args=-p
	              shift;;
	       *)     localhead="$1"
                      break;;
	   esac
	done
	
	#
	# Tell git about where it can find all the objects
	#
	export GIT_OBJECT_DIRECTORY=$local/.git/objects
	export GIT_ALTERNATE_OBJECT_DIRECTORIES=$remote/.git/objects

	# ..and get the heads
	head=$(cat $local/.git/$localhead)
	other_head=$(cat $remote/.git/$remotehead)

	# What exists in remote-head but not in the local head?
	git-rev-tree $other_head ^$head |
		cut -d' ' -f2 |
		git-diff-tree --stdin -v $diff-tree-args

and it should just DoTheRightThing(tm) modulo the inevitable
ObviousBugs(tm).
3) Note that my object database is not pruned.  When I used 
git-pull-script to locally merge my libata-dev.git#misc-fixes branch 
into libata-2.6.git, it pulled all the objects in libata-dev.  I was too 
slack to bother with pruning libata-2.6.git, knowing that eventually the 
other changesets will make their way upstream.
I do keep my trees pruned and I still run fsck religiously, so I just 
force a prune after a pull. I _prefer_ to see clean trees, though - not 
because it matters from a techncial perspective, but because it tells me 
that the other side didn't have any left-over strange objects that might 
have been intended to be included.

But your tree looked fine.

		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