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

Re: Commiting automatically

From
MMaaartin <grajcar1@seznam.cz>
Date
Oct 10, 2010, 19:23 UTC
Message-ID
<loom.20101010T212207-709@post.gmane.org>
In-Reply-To
<AANLkTimpyTVe+OhYRhsV3H8TGahgsASOPAZRqwR=V6od@mail.gmail.com>
On 10-09-25 12:05, Alex Riesen wrote:
> On Fri, Sep 24, 2010 at 22:43, Maaartin <grajcar1@seznam.cz> wrote:
>> I'm going to run periodically a process which uses the current working tree 
and
Show 19 quoted lines
>> I'd like to protocol what happens. As a part of the protocol I need the exact
>> state of the working tree and that's what is git good for, right? But it must
>> neither disturb my normal workflow nor interfere with my ordinal commits. I
>> could probably use something like
>
> Try using low-level git commands (the "plumbing").
> Take a look at GIT_INDEX_FILE environment variable and
> "git write-tree", "git commit-tree" and "git update-ref", in
> addition to "git add".
> 
> I.e. (untested):
> 
>   $ (
>   export GIT_INDEX_FILE=.git/myindex
>   git add . &&
>   tree=$(git write-tree) &&
>   commit=$(date |git commit-tree $tree -p protocol) &&
>   git update-ref -m autolog protocol $commit
>   )

Based on this, I've created a simple script "git-autocom" which seems to work somehow. In order to test it place both attachments in a new directory and run "test-git-autocom". The test creates a new working tree with a repository and some commits and then invokes "git-autocom".

A branch autocom gets created, but I'm quite unsure if it's correct. I see a problem in case the script runs with the branch autocom checked out. Maybe a tag could be better or whatever.

I see I can attach no files here in http://post.gmane.org

So I placed them in http://dl.dropbox.com/u/4971686/101010/git-autocom and http://dl.dropbox.com/u/4971686/101010/test-git-autocom and copied them here as well (I hope there's a better way).

====== git-autocom #!/bin/sh message="autocom $(date)" head=$(git show-ref -s --head HEAD)

# the first parent should be autocom parent1="-p $(git show-ref -s refs/heads/autocom)" # needed for the very first use test -f .git/refs/heads/autocom || parent1="" # the second parent should be the current head parent2="-p $head" # make sure not giving the same parent twice test "$parent1" = "$parent2" && parent1=""

#temporary index export GIT_INDEX_FILE=.git/autocom.tmp

git add -A && tree=$(git write-tree) && commit=$(echo "$message" | git commit-tree $tree $parent1 $parent2) && git update-ref -m "$message" refs/heads/autocom $commit ====== test-git-autocom #!/bin/sh

/bin/rm -fR testtree 2>/dev/null mkdir testtree && cd testtree && git init && echo a > a && git add -A && git commit -m "a" && echo b > b && git add -A && git commit -m "b" && echo c > c && /bin/rm b && git add -A && /bin/rm a && echo "preparation OK" && ../git-autocom && echo "autocom OK" && git log && git log autocom ======

Previous: Alex RiesenNext: Matthieu Moy
Message 4 of 5 in “Commiting automatically”
  1. MaaartinSep 24, 2010
  2. Ramkumar RamachandraSep 25, 2010
  3. Alex RiesenSep 25, 2010
  4. MaaartinOct 10, 2010
  5. Matthieu MoyOct 10, 2010

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.