threads / discuss / 8743

post-update script to update wc - version 2

Subject: post-update script to update wc - version 2

## tl;dr

9 messages between Jun 27, 2007 and Jun 27, 2007.

replies: 8people: 6as markdown or json

Sam Vilain· Jun 27, 2007, 02:05 UTC · lore

#!/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
Sam Vilain· Jun 27, 2007, 02:06 UTC · re: Sam Vilain · lore

Re: post-update script to update wc - version 2

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.
Alex Riesen· Jun 27, 2007, 09:21 UTC · re: Sam Vilain · lore

Re: post-update script to update wc - version 2

On 6/27/07, Sam Vilain <sam@vilain.net> wrote:
Show 5 quoted lines
> 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}?
Junio C Hamano· Jun 27, 2007, 10:09 UTC · re: Alex Riesen · lore

Re: post-update script to update wc - version 2

"Alex Riesen" <raa.lkml@gmail.com> writes:
Show 7 quoted lines
> 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.

Alex Riesen· Jun 27, 2007, 12:43 UTC · re: Junio C Hamano · lore

Re: post-update script to update wc - version 2

On 6/27/07, Junio C Hamano <gitster@pobox.com> wrote:
Show 18 quoted lines
> "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.

Sam Vilain· Jun 27, 2007, 22:45 UTC · re: Alex Riesen · lore

Re: post-update script to update wc - version 2

Alex Riesen wrote:
Show 5 quoted lines
> 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.
Steven Grimm· Jun 27, 2007, 07:54 UTC · re: Sam Vilain · lore

Re: post-update script to update wc - version 2

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
Sam Vilain· Jun 27, 2007, 23:53 UTC · re: Steven Grimm · lore

Re: post-update script to update wc - version 2

Steven Grimm wrote:
Show 5 quoted lines
> 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.

← back to recent threads