git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: process committed files in post-receive hook

From
Jeff King <peff@peff.net>
Date
Dec 15, 2011, 07:23 UTC
Message-ID
<20111215072301.GC1327@sigill.intra.peff.net>
In-Reply-To
<4EE95523.9030702@gmail.com>
On Wed, Dec 14, 2011 at 06:02:11PM -0800, Hao Wang wrote:
Show 5 quoted lines
> Thank you all for providing the options. Just so you know I finally
> went with Alexey's suggestion. I used 'git show' to get both a list
> of files in a directory and the content of each file. It works great
> on a bare repository so there is no need to check out a copy on the
> server.

If you are scripting, we usually encourage the use of "plumbing" commands whose output is guaranteed not to change ("show" is a "porcelain" command intended to be used by end-users, and it's possible that its behavior might change from version to version).

The plumbing command to get a directory listing for a tree is "git ls-tree" (try the "--name-only" option for terse output, and use "-z" if you want to be robust in the face of filenames with funny characters).

Show 14 quoted lines
> # get a list of rule files using git show
> def getRuleFileList(rev):
>     # run git show
>     p = subprocess.Popen(['git', 'show', rev], stdout=subprocess.PIPE)
>     p.wait()
>     if p.returncode != 0: return None # error
> 
>     # parse output
>     i = 0
>     filelist = []
>     for line in p.stdout.readlines():
>         filelist.append(line)
>     p.stdout.close()
>     return filelist

Doesn't this put "tree HEAD:foo", as printed by "git show", at the top of your filelist? Another reason to use ls-tree.

Show 7 quoted lines
> # read the content of a file
> def readfile(rev):
>     # run git show
>     p = subprocess.Popen(['git', 'show', rev], stdout=subprocess.PIPE)
>     p.wait()
>     if p.returncode != 0: return None # error
>     return p.stdout.read()
The plumbing for this is "git cat-file blob ...".
-Peff
Previous: Hao WangNext: Hao Wang
Message 7 of 8 in “process committed files in post-receive hook”
  1. HaoDec 10, 2011
  2. Michael SchubertDec 10, 2011
  3. Ivan HeffnerDec 10, 2011
  4. Alexey ShumkinDec 10, 2011
  5. Neal KreitzingerDec 15, 2011
  6. Hao WangDec 15, 2011
  7. Jeff KingDec 15, 2011
  8. Hao WangDec 15, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.