threads / discuss / 23696

Determining if a file exists in a bare repo

Subject: Determining if a file exists in a bare repo

## tl;dr

5 messages between May 4, 2010 and May 4, 2010.

replies: 4people: 3as markdown or json

Adam Mercer· May 4, 2010, 16:11 UTC · lore
Hi

I'm trying to write a post-receive hook that generates some HTML files from reStructured text files stored in a repository. Essentially I'm doing this with

git show master:INSTALL | rst2html --no-raw --no-file-insertion > /path/to/INSTALL.html

However I would like this script to fail gracefully if the INSTALL file is not available in the repository so would like to check if this file exists. The problem I'm having is that git-show seems to return a zero return code even if the file you request doesn't exist, e.g.:

$ git show master:NoneExistantFile fatal: ambiguous argument 'master:NoneExistantFile': unknown revision or path not in the working tree. Use '--' to separate paths from revisions $ echo $? 0 $

is there another, scriptable, way to determine if a given file exists in a given branch of a bare repository?

Cheers
Adam
Jacob Helwig· May 4, 2010, 16:18 UTC · re: Adam Mercer · lore

Re: Determining if a file exists in a bare repo

On Tue, May 4, 2010 at 09:11, Adam Mercer <ramercer@gmail.com> wrote:
Show 28 quoted lines
> Hi
>
> I'm trying to write a post-receive hook that generates some HTML files
> from reStructured text files stored in a repository. Essentially I'm
> doing this with
>
> git show master:INSTALL | rst2html --no-raw --no-file-insertion >
> /path/to/INSTALL.html
>
> However I would like this script to fail gracefully if the INSTALL
> file is not available in the repository so would like to check if this
> file exists. The problem I'm having is that git-show seems to return a
> zero return code even if the file you request doesn't exist, e.g.:
>
> $ git show master:NoneExistantFile
> fatal: ambiguous argument 'master:NoneExistantFile': unknown revision
> or path not in the working tree.
> Use '--' to separate paths from revisions
> $ echo $?
> 0
> $
>
> is there another, scriptable, way to determine if a given file exists
> in a given branch of a bare repository?
>
> Cheers
>
> Adam
What about using "git ls-tree master" to get a file listing?
Adam Mercer· May 4, 2010, 16:26 UTC · re: Jacob Helwig · lore

Re: Determining if a file exists in a bare repo

On Tue, May 4, 2010 at 11:18, Jacob Helwig <jacob.helwig@gmail.com> wrote:
> What about using "git ls-tree master" to get a file listing?
Good idea, thanks that seems to do the trick.
Cheers
Adam
Junio C Hamano· May 4, 2010, 16:39 UTC · re: Adam Mercer · lore

Re: Determining if a file exists in a bare repo

Adam Mercer <ramercer@gmail.com> writes:
Show 13 quoted lines
> Hi
>
> I'm trying to write a post-receive hook that generates some HTML files
> from reStructured text files stored in a repository. Essentially I'm
> doing this with
>
> git show master:INSTALL | rst2html --no-raw --no-file-insertion >
> /path/to/INSTALL.html
>
> However I would like this script to fail gracefully if the INSTALL
> file is not available in the repository so would like to check if this
> file exists. The problem I'm having is that git-show seems to return a
> zero return code even if the file you request doesn't exist

Even if it returned an error status, you are discarding it by placing the process on the upstream side of the pipe, so your command line above won't be able to catch an error anyway. I would probably do something like this if I were you:

    git rev-parse --verify master:INSTALL >/dev/null 2>&1 &&
    git cat-file blob master:INSTALL | rst2...
Adam Mercer· May 4, 2010, 16:57 UTC · re: Junio C Hamano · lore

Re: Determining if a file exists in a bare repo

On Tue, May 4, 2010 at 11:39, Junio C Hamano <gitster@pobox.com> wrote:
> Even if it returned an error status, you are discarding it by placing the
> process on the upstream side of the pipe, so your command line above won't
> be able to catch an error anyway.

Sorry I wasn't very clear, first I trying to use git-show if the file existed and then piping the output to rst2html...

Show 5 quoted lines
> I would probably do something like this
> if I were you:
>
>    git rev-parse --verify master:INSTALL >/dev/null 2>&1 &&
>    git cat-file blob master:INSTALL | rst2...
Thanks, thats a better approach!
Cheers
Adam

← back to recent threads