git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Problem creating commits/trees with commit-tree/mktree
@ 2010-01-11 18:14 Gavin Beatty
  2010-01-11 18:17 ` Shawn O. Pearce
  2010-01-11 18:38 ` Avery Pennarun
  0 siblings, 2 replies; 4+ messages in thread
From: Gavin Beatty @ 2010-01-11 18:14 UTC (permalink / raw)
  To: git

Hello,

I want to write commits to a branch without touching the index or
having a checkout (for a git subcommand I'm writing).

I can create new blobs and trees but can't figure out how to commit a
new tree/blob _with_ the old tree.

Currently, I do something a lot like:

objsha=$(echo 'contents' | git hash-object -w --stdin)
objtreesha=$(printf "100644 blob $objsha\tfile.txt\000" | git mktree -z)
newtreesha=$(printf "040000 tree $objtreesha\ttreefileisin\000" | git mktree -z)
echo 'commit msg' | git commit-tree $newtreesha -p $(git rev-parse
refs/heads/new)

I get a commit with treefileisin/file.txt. I haven't included the
other trees/files so they are gone in this commit. How do I include
them? Is commit-tree the wrong tool?

Is there some way to use git ls-tree that I don't know about?

Gavin

-- 
Gavin Beatty

SEMPER UBI SUB UBI

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Problem creating commits/trees with commit-tree/mktree
  2010-01-11 18:14 Problem creating commits/trees with commit-tree/mktree Gavin Beatty
@ 2010-01-11 18:17 ` Shawn O. Pearce
  2010-01-11 18:38 ` Avery Pennarun
  1 sibling, 0 replies; 4+ messages in thread
From: Shawn O. Pearce @ 2010-01-11 18:17 UTC (permalink / raw)
  To: Gavin Beatty; +Cc: git

Gavin Beatty <gavinbeatty@gmail.com> wrote:
> I want to write commits to a branch without touching the index or
> having a checkout (for a git subcommand I'm writing).
> 
> I can create new blobs and trees but can't figure out how to commit a
> new tree/blob _with_ the old tree.
> 
> Currently, I do something a lot like:
> 
> objsha=$(echo 'contents' | git hash-object -w --stdin)
> objtreesha=$(printf "100644 blob $objsha\tfile.txt\000" | git mktree -z)
> newtreesha=$(printf "040000 tree $objtreesha\ttreefileisin\000" | git mktree -z)

You aren't feeding in the old tree contents as part of this command.

If you are really doing this via a script, you should look at
git-fast-import.  Its faster, and its language better supports
this notion of editing an existing tree.

-- 
Shawn.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Problem creating commits/trees with commit-tree/mktree
  2010-01-11 18:14 Problem creating commits/trees with commit-tree/mktree Gavin Beatty
  2010-01-11 18:17 ` Shawn O. Pearce
@ 2010-01-11 18:38 ` Avery Pennarun
  2010-01-14 23:18   ` Gavin Beatty
  1 sibling, 1 reply; 4+ messages in thread
From: Avery Pennarun @ 2010-01-11 18:38 UTC (permalink / raw)
  To: Gavin Beatty; +Cc: git

On Mon, Jan 11, 2010 at 1:14 PM, Gavin Beatty <gavinbeatty@gmail.com> wrote:
> I can create new blobs and trees but can't figure out how to commit a
> new tree/blob _with_ the old tree.
[...]
> I get a commit with treefileisin/file.txt. I haven't included the
> other trees/files so they are gone in this commit. How do I include
> them? Is commit-tree the wrong tool?

When I'm doing similar things, I often prefer just using a temporary
git index file to keep track of my intermediate trees.  Just set
GIT_INDEX_FILE to point at a temporary file; then you can use
git-read-tree to read in an old tree, and git-update-index
(particularly with the --stdin flag) to update it.  Then you can use
git-write-tree to convert the temporary index into a real tree object.

Have fun,

Avery

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Problem creating commits/trees with commit-tree/mktree
  2010-01-11 18:38 ` Avery Pennarun
@ 2010-01-14 23:18   ` Gavin Beatty
  0 siblings, 0 replies; 4+ messages in thread
From: Gavin Beatty @ 2010-01-14 23:18 UTC (permalink / raw)
  To: Avery Pennarun; +Cc: git

On Mon, Jan 11, 2010 at 19:38, Avery Pennarun <apenwarr@gmail.com> wrote:
> When I'm doing similar things, I often prefer just using a temporary
> git index file to keep track of my intermediate trees.  Just set
> GIT_INDEX_FILE to point at a temporary file; then you can use
> git-read-tree to read in an old tree, and git-update-index
> (particularly with the --stdin flag) to update it.  Then you can use
> git-write-tree to convert the temporary index into a real tree object.

Your suggestion works well.  git update-index --info-only -z
--index-info takes ls-tree -r -z style format and pre-existing
objects: just as I wanted.

Thanks, git-fast-import was too much for the quite simple git-related
code I need.

-- 
Gavin Beatty

SEMPER UBI SUB UBI

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-01-14 23:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-11 18:14 Problem creating commits/trees with commit-tree/mktree Gavin Beatty
2010-01-11 18:17 ` Shawn O. Pearce
2010-01-11 18:38 ` Avery Pennarun
2010-01-14 23:18   ` Gavin Beatty

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).