From: Jan Hudec <bulb@ucw.cz>
To: Marco Costalba <mcostalba@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Subject: Re: [Qgit RFC] commit --amend
Date: Wed, 4 Jul 2007 20:28:06 +0200 [thread overview]
Message-ID: <20070704182806.GA3268@efreet.light.src> (raw)
In-Reply-To: <e5bfff550707040544l6272bdeao3a891c1793d29eae@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3523 bytes --]
On Wed, Jul 04, 2007 at 14:44:16 +0200, Marco Costalba wrote:
> On 7/4/07, Junio C Hamano <gitster@pobox.com> wrote:
>> But if a Porcelain like StGIT or Qgit would want to do that kind
>> of operation for different use case than "amending", it can and
>> should use plumbing commands, just like the implementation of
>> "commit --amend" does, with different constraints and error
>> checks.
I would prefer if there was something between git-commit-tree and git-commit.
There are several steps one has to do for commit, that are the same for most
ways of commit:
- call pre-commit hook (unless --no-verify)
- write-tree
- commit-tree
- update-ref
- mv next-index index
- call post-commit hook (unless --no-verify or unconditionally?)
Would factoring out such script from the end of git-commit.sh be accepted?
Or would it be possible to get just that from git-commit with right options?
Basically I need to replicate the logic with
I would suggest a name git-commit-index. It would take the index to commit,
index to move in after commit, head to update, list of parents and commit
message on standard input (as commit-tree does).
The other thing is, that of course qgit (or any other frontend) can't start
using it until it's accepted and released with git. So I'll first try to get
it working in qgit and than think about making it a separate plumbing command
in git.
> I always prefer qgit to use the highest level commands as possible because:
>
> 1- Less error prone
> 2- Easier to implement
Definitely.
> 3- More robust to API change
> 4- Less easy to break by changes in git.
Actually, no. The porcelains are more likely to change than the plumbing.
> Having said that, from '-F' option documentation:
>
> -F <file>::
> Take the commit message from the given file. Use '-' to
> read the message from the standard input.
>
> Jan, what about to use '-' and feed message from stdin?
I actually am, because I am rewriting it to use plumbing, which means
git-write-tree and git-commit-tree directly. And git-commit-tree always reads
commit message from stdin.
> Indeed the full signature of run() is:
>
> bool Git::run(SCRef runCmd, QString* runOutput, QObject* receiver, SCRef
> buf)
>
> Where the last parameter 'buf' it's a string that, if not empty, is
> passed to the launched program stdin.
... except if I read the code correctly, it will create a temporary file
anyway. The comment in QGit::startProcess says it is because of windows, but
there is nothing to disable it in Unix, so to me it seems temporary file is
used anyway.
> I don't know if it is already too late, but I would suggest to stick
> to git-commit if possible, I see only downsides in not doing so. But
> of course who writes the code decides.
The old code needs rewriting in any case, because if I read it correctly, it
will not commit merges either. Yes, you rarely do it, because git
automatically commits non-conflicting merges, but amending such commits is
much more common.
I would personally most like qgit to do all playing with index on it's own
and than call a single command to commit the index. But commit can't really
do that, because I can't give commit the parent list and I don't like the
idea of reset --soft HEAD^ + reinstate whatever MERGE_HEAD there needs to be
(to not clutter reflog and also to leave the tree is as sensible state as
possible if something goes wrong).
--
Jan 'Bulb' Hudec <bulb@ucw.cz>
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
next prev parent reply other threads:[~2007-07-04 18:31 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-10 15:08 [Qgit RFC] commit --amend Jan Hudec
2007-06-10 22:10 ` Marco Costalba
2007-06-11 4:42 ` Jan Hudec
2007-06-11 5:24 ` Marco Costalba
2007-06-11 5:45 ` Marco Costalba
2007-07-01 12:26 ` Jan Hudec
2007-07-01 16:09 ` Marco Costalba
2007-07-02 18:03 ` Jan Hudec
2007-07-04 5:10 ` Junio C Hamano
2007-07-04 12:44 ` Marco Costalba
2007-07-04 18:28 ` Jan Hudec [this message]
2007-07-04 19:51 ` Junio C Hamano
2007-07-06 7:54 ` Marco Costalba
2007-07-05 18:54 ` Jan Hudec
2007-07-06 8:12 ` Marco Costalba
2007-07-08 13:38 ` Jan Hudec
2007-07-08 13:49 ` Marco Costalba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070704182806.GA3268@efreet.light.src \
--to=bulb@ucw.cz \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=mcostalba@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).