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

Re: how-to get commit content with pre-receive hook ?

From
IDIgor Djordjevic <igor.d.djordjevic@gmail.com>
Date
Apr 6, 2017, 20:13 UTC
Message-ID
<0dec12a8-b3d2-41e5-4563-4bec2a6df7be@gmail.com>
In-Reply-To
<955c152a-b278-ecfd-8bc7-671c3aa81dc6@ricozome.net>
Hello Eric,
On 06/04/2017 16:03, Eric Belhomme wrote:
Show 15 quoted lines
> Until now I ever had a quite "basic" Git usage, but now I'm working 
> on a project based on Git hooks feature.. and I'm a very beginner 
> with Git hooks !
> 
> My need consist doing a syntax check on submitted files before a 'git 
> push'. So the right hook is 'pre-receive' and I'm already able to 
> identify the files I want to check using 'git show'.
> 
> But I don't know how to get the *content* of the file being submitted 
> to run my syntax check rules against it !
> 
> I googled but most examples using pre-receive I found are doing 
> sanity check on enveloppe but never on actual content of the file !
> 
> Could someone here put me on the rails ?

I`m yet another beginner with both Git hooks and Bash scripting, but I`ve managed to patch something up that might give you an idea, just drop it inside your "pre-receive" hook file:

	while read oldrev newrev
	do
		for commit in $(git rev-list --reverse $oldrev..$newrev)
		do
			for file in $(git diff-tree --no-commit-id --name-only -r $commit)
			do
				echo "$(git show $commit:$file)" >&1
			done
		done
	done
	exit 1

This should reject any push attempt, returning back *content* of each changed file for each new commit.

Feel free to adapt as needed, like processing/checking file content instead of sending it over, allowing or rejecting the push accordingly, and also handling corner cases (for example, "oldrev" value of 0000... in case of a new ref creation).

I guess there might be better ways (comments welcome), but this should at least get you going... and I`ve learned something new as well ;)

Regards, Buga

Previous: Stefan Beller
Message 4 of 4 in “how-to get commit content with pre-receive hook ?”
  1. Eric BelhommeApr 6, 2017
  2. Ævar Arnfjörð BjarmasonApr 6, 2017
  3. Stefan BellerApr 6, 2017
  4. Igor DjordjevicApr 6, 2017

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.