git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* post-update script to update wc - version 2
@ 2007-06-27  2:05 Sam Vilain
  2007-06-27  2:06 ` Sam Vilain
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Sam Vilain @ 2007-06-27  2:05 UTC (permalink / raw)
  To: git

#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, make this file executable by "chmod +x post-update".

git-update-server-info

export GIT_DIR=`cd $GIT_DIR; pwd`
[ `expr "$GIT_DIR" : '.*/\.git'` = 0 ] && exit 0

tree_in_revlog() {
    ref=$1
    tree=$2
    found=$(
    tail logs/$ref | while read commit rubbish
    do
        this_tree=`git-cat-file commit $commit | awk '/^tree/ { print $2; exit }'`
	if [ "$this_tree" = "$tree" ]
        then
	    echo $commit
        fi
    done
    )
    [ -n "$found" ] && true
}

for ref
do
active=`git-symbolic-ref HEAD`
if [ "$ref" = "$active" ]
then
  echo "Pushing to checked out branch - updating working copy" >&2
  success=
  if ! (cd ..; git-diff-files) | grep -q .
  then
    # save the current index just in case
    current_tree=`git-write-tree`
    if tree_in_revlog $ref $current_tree
    then
      cd ..
      if git-diff-index -R --name-status HEAD >&2 &&
         git-diff-index -z --name-only --diff-filter=A HEAD | xargs -0r rm &&
         git-reset --hard HEAD
      then
         success=1
      else
        echo "E:unexpected error during update" >&2
      fi
    else
      echo "E:uncommitted, staged changes found" >&2
    fi
  else
    echo "E:unstaged changes found" >&2
  fi

  if [ -z "$success" ]
  then
    (
    echo "Non-bare repository checkout is not clean - not updating it"
    echo "However I AM going to update the index.  Any half-staged commit"
    echo "in that checkout will be thrown away, but on the bright side"
    echo "this is probably the least confusing thing for us to do and at"
    echo "least we're not throwing any files somebody has changed away"
    git-reset --mixed HEAD
    echo 
    echo "This is the new status of the upstream working copy:"
    git-status
    ) >&2
  fi
fi
done

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: post-update script to update wc - version 2
  2007-06-27  2:05 post-update script to update wc - version 2 Sam Vilain
@ 2007-06-27  2:06 ` Sam Vilain
  2007-06-27  9:21   ` Alex Riesen
  2007-06-27  7:54 ` Steven Grimm
  2007-06-27 10:36 ` Johannes Schindelin
  2 siblings, 1 reply; 9+ messages in thread
From: Sam Vilain @ 2007-06-27  2:06 UTC (permalink / raw)
  To: Sam Vilain; +Cc: git

Sam Vilain wrote:
>         this_tree=`git-cat-file commit $commit | awk '/^tree/ { print $2; exit }'`

Of course on newer git, `git-rev-parse $commit:` will do that.

Sam.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: post-update script to update wc - version 2
  2007-06-27  2:05 post-update script to update wc - version 2 Sam Vilain
  2007-06-27  2:06 ` Sam Vilain
@ 2007-06-27  7:54 ` Steven Grimm
  2007-06-27 23:53   ` Sam Vilain
  2007-06-27 10:36 ` Johannes Schindelin
  2 siblings, 1 reply; 9+ messages in thread
From: Steven Grimm @ 2007-06-27  7:54 UTC (permalink / raw)
  To: Sam Vilain; +Cc: git

Sam Vilain wrote:
> # An example hook script to prepare a packed repository for use over
> # dumb transports.
>   
Maybe this comment isn't quite accurate any more?

-Steve

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: post-update script to update wc - version 2
  2007-06-27  2:06 ` Sam Vilain
@ 2007-06-27  9:21   ` Alex Riesen
  2007-06-27 10:09     ` Junio C Hamano
  2007-06-27 22:45     ` Sam Vilain
  0 siblings, 2 replies; 9+ messages in thread
From: Alex Riesen @ 2007-06-27  9:21 UTC (permalink / raw)
  To: Sam Vilain; +Cc: Sam Vilain, git

On 6/27/07, Sam Vilain <sam@vilain.net> wrote:
> Sam Vilain wrote:
> >         this_tree=`git-cat-file commit $commit | awk '/^tree/ { print $2; exit }'`
>
> Of course on newer git, `git-rev-parse $commit:` will do that.
>

Are you sure? Maybe you mean git-rev-parse "$commit"^{tree}?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: post-update script to update wc - version 2
  2007-06-27  9:21   ` Alex Riesen
@ 2007-06-27 10:09     ` Junio C Hamano
  2007-06-27 12:43       ` Alex Riesen
  2007-06-27 22:45     ` Sam Vilain
  1 sibling, 1 reply; 9+ messages in thread
From: Junio C Hamano @ 2007-06-27 10:09 UTC (permalink / raw)
  To: Alex Riesen; +Cc: Sam Vilain, Sam Vilain, git

"Alex Riesen" <raa.lkml@gmail.com> writes:

> On 6/27/07, Sam Vilain <sam@vilain.net> wrote:
>> Sam Vilain wrote:
>> >         this_tree=`git-cat-file commit $commit | awk '/^tree/ { print $2; exit }'`
>>
>> Of course on newer git, `git-rev-parse $commit:` will do that.
>
> Are you sure? Maybe you mean git-rev-parse "$commit"^{tree}?

I had the same "Huh?"  moment as you had, but what Sam said is
correct.  He is being too clever to confuse us ;-).

When "$commit" is a tree-ish,

	$commit:$path

is the name of the tree or blob object at that $path, and as 
very strange special case, an empty $path is the whole tree.

It's been this way since early this year (before v1.5.0-rc1),
thanks to Jeff King.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: post-update script to update wc - version 2
  2007-06-27  2:05 post-update script to update wc - version 2 Sam Vilain
  2007-06-27  2:06 ` Sam Vilain
  2007-06-27  7:54 ` Steven Grimm
@ 2007-06-27 10:36 ` Johannes Schindelin
  2 siblings, 0 replies; 9+ messages in thread
From: Johannes Schindelin @ 2007-06-27 10:36 UTC (permalink / raw)
  To: Sam Vilain; +Cc: git

Hi,

On Wed, 27 Jun 2007, Sam Vilain wrote:

> # An example hook script to prepare a packed repository for use over
> # dumb transports.

???

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: post-update script to update wc - version 2
  2007-06-27 10:09     ` Junio C Hamano
@ 2007-06-27 12:43       ` Alex Riesen
  0 siblings, 0 replies; 9+ messages in thread
From: Alex Riesen @ 2007-06-27 12:43 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Sam Vilain, Sam Vilain, git

On 6/27/07, Junio C Hamano <gitster@pobox.com> wrote:
> "Alex Riesen" <raa.lkml@gmail.com> writes:
> > On 6/27/07, Sam Vilain <sam@vilain.net> wrote:
> >> Sam Vilain wrote:
> >> >         this_tree=`git-cat-file commit $commit | awk '/^tree/ { print $2; exit }'`
> >>
> >> Of course on newer git, `git-rev-parse $commit:` will do that.
> >
> > Are you sure? Maybe you mean git-rev-parse "$commit"^{tree}?
>
> I had the same "Huh?"  moment as you had, but what Sam said is
> correct.  He is being too clever to confuse us ;-).
>
> When "$commit" is a tree-ish,
>
>         $commit:$path
>
> is the name of the tree or blob object at that $path, and as
> very strange special case, an empty $path is the whole tree.

I didn't even see the colon. That's GMail, they obviously have
no idea what font should be used for the mail of a technical user.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: post-update script to update wc - version 2
  2007-06-27  9:21   ` Alex Riesen
  2007-06-27 10:09     ` Junio C Hamano
@ 2007-06-27 22:45     ` Sam Vilain
  1 sibling, 0 replies; 9+ messages in thread
From: Sam Vilain @ 2007-06-27 22:45 UTC (permalink / raw)
  To: Alex Riesen; +Cc: git

Alex Riesen wrote:
> On 6/27/07, Sam Vilain <sam@vilain.net> wrote:
>> Sam Vilain wrote:
>>>         this_tree=`git-cat-file commit $commit | awk '/^tree/ { print $2; exit }'`
>> Of course on newer git, `git-rev-parse $commit:` will do that.
> Are you sure? Maybe you mean git-rev-parse "$commit"^{tree}?

Ah, I missed that on the git-rev-parse man page.  Much better!

Sam.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: post-update script to update wc - version 2
  2007-06-27  7:54 ` Steven Grimm
@ 2007-06-27 23:53   ` Sam Vilain
  0 siblings, 0 replies; 9+ messages in thread
From: Sam Vilain @ 2007-06-27 23:53 UTC (permalink / raw)
  To: Steven Grimm; +Cc: Sam Vilain, git

Steven Grimm wrote:
> Sam Vilain wrote:
>> # An example hook script to prepare a packed repository for use over
>> # dumb transports.
>>   
> Maybe this comment isn't quite accurate any more?

Ok that should read something like

# This hook does two things:
#
#  1. update the "info" files that allow the list of references to be
#     queries over dumb transports such as http
#
#  2. if this repository looks like it is a non-bare repository, and
#     the checked-out branch is pushed to, then update the working copy.
#     This makes "push" and "pull" symmetric operations as in darcs and
#     bzr.

Sam.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2007-06-27 23:53 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-27  2:05 post-update script to update wc - version 2 Sam Vilain
2007-06-27  2:06 ` Sam Vilain
2007-06-27  9:21   ` Alex Riesen
2007-06-27 10:09     ` Junio C Hamano
2007-06-27 12:43       ` Alex Riesen
2007-06-27 22:45     ` Sam Vilain
2007-06-27  7:54 ` Steven Grimm
2007-06-27 23:53   ` Sam Vilain
2007-06-27 10:36 ` Johannes Schindelin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).