Thread (4 messages) flat view 4 messages, 3 authors, 2016-06-15

Re: Commiting automatically

From: Maaartin <hidden>
Date: 2016-06-15 22:49:45

On 10-09-25 12:05, Alex Riesen wrote:
On Fri, Sep 24, 2010 at 22:43, Maaartin [off-list ref] wrote:
quoted
I'm going to run periodically a process which uses the current working tree 
and
quoted
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
======
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help