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