Re: A simple script to do the reverse of git-push

2005-08-11 Thread Petr Baudis
Dear diary, on Tue, Aug 09, 2005 at 12:42:36AM CEST, I got a letter
where Junio C Hamano [EMAIL PROTECTED] told me that...
 Johannes Schindelin [EMAIL PROTECTED] writes:
 
  BTW, if you are lazy, like me, you just pull from Junio once in a while 
  and do a make test. Turns out there is a missing dependency though:
 
  peek-remote.o: cache.h
 
  which in my case lead to a git-peek-remote program which was unable to 
  peek any ref.
 
 You are right.  Thanks for noticing.
 
 $ (make clean ; make ) /dev/null 2/dev/null
 $ touch cache.h
 $ make 21 | grep peek-remote
 cc -g -O2 -Wall  '-DSHA1_HEADER=openssl/sha.h' -o git-peek-remote 
 peek-remote.o libgit.a -lz -lcrypto
 
 I think recent depend on object files Makefile patch broke
 some things.

Indeed. I took care to make the new dependencies a superset of previous
situation when removing the explicit dependencies list, but before,
rebuilding of libgit.a caused rebuilt from source of all the commands,
which wouldn't happen anymore after adding the object files, which this
way sneakily removed an implicit dependency of the command sources on
$(LIB_H). Eek.

-- 
Petr Pasky Baudis
Stuff: http://pasky.or.cz/
If you want the holes in your knowledge showing up try teaching
someone.  -- Alan Cox
-
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


A simple script to do the reverse of git-push

2005-08-08 Thread Johannes Schindelin
Hi list,

I mentioned in another mail that I needed the opposite of git-push, namely 
getting all heads, and if they are strict parents of the local refs, just 
update them.

Well, Junio pointed out that it's easy using the available tools, and he 
was right. The result is attached (and tested...).

This script makes it easy to work with a central repository, multiple 
heads and users, in a CVS style: to start your day, you call the attached 
script, and after you have committed something, you can do a push on the 
repository. Sometimes, the push fails, then you have to pull that branch 
in order to merge it before trying a push again.

BTW, if you are lazy, like me, you just pull from Junio once in a while 
and do a make test. Turns out there is a missing dependency though:

peek-remote.o: cache.h

which in my case lead to a git-peek-remote program which was unable to 
peek any ref.

Ciao,
Dscho
#!/bin/sh

. git-sh-setup-script || die Not a git archive

. git-parse-remote $@
repo=$_remote_repo

git-ls-remote-script --heads $repo | while read sha1 refname; do
shortname=$(basename $refname)
if [ -e $GIT_DIR/$refname ]; then
if [ $sha1 = $(cat $GIT_DIR/$refname) ]; then
echo $shortname up to date. 12
continue
fi
fi

git-cat-file commit $sha1 /dev/null 21 ||
git-fetch-script $repo $shortname

if [ ! -e $GIT_DIR/$refname ]; then
echo Got new head $shortname 12
echo $sha1  $GIT_DIR/$refname
else
origsha1=$(cat $GIT_DIR/$refname)
if [ -z $(git-rev-list $origsha1 ^$sha1) ]; then
echo Updated head $shortname 12
echo $sha1  $GIT_DIR/$refname
else
saveref=$GIT_DIR/FETCH_HEAD_$shortname
echo Error: $shortname not a child of remote head 12
echo   Saved remote head to $saveref 12
echo $sha1  $saveref
fi
fi
done