Re: [PATCH] hg-to-git: handle an empty dir in hg by combining git commits

5 messages, 3 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH] hg-to-git: handle an empty dir in hg by combining git commits

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:43:55

Mark Drago [off-list ref] writes:
This patch will detect that there are no changes to commit (using git-status),
and will not perform the commit, but will instead combine the log messages of
that (non-)commit with the next commit.
I think a better approach would be to implement --no-tree-change-is-ok
option to git-commit, strictly for use by foreign scm interface scripts
like yours.  It does not usually make sense to record a commit that has
the exact same tree as its sole parent commit and that is why git-commit
prevents you from making that mistake, but when data from foreign scm is
involved, it is a different story.  We are equipped to represent such a
(perhaps insane, perhaps by mistake, or perhaps done on purpose) change
and it is better to represent it bypassing the safety valve for native
use.

[PATCH] git-commit --allow-empty

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:43:55

It does not usually make sense to record a commit that has the exact
same tree as its sole parent commit and that is why git-commit prevents
you from making such a mistake, but when data from foreign scm is
involved, it is a different story.  We are equipped to represent such an
(perhaps insane, perhaps by mistake, or perhaps done on purpose) empty
change, and it is better to represent it bypassing the safety valve for
native use.

This is primarily for use by foreign scm interface scripts.

Signed-off-by: Junio C Hamano <redacted>
---

 * This is for 'next', on top of an earlier "allow amending '-s ours' merge".

 Documentation/git-commit.txt |    8 +++++++-
 builtin-commit.c             |    5 +++--
 2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index d4bfd49..a7ef71f 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -10,7 +10,7 @@ SYNOPSIS
 [verse]
 'git-commit' [-a | --interactive] [-s] [-v] [-u]
 	   [(-c | -C) <commit> | -F <file> | -m <msg> | --amend]
-	   [--no-verify] [-e] [--author <author>]
+	   [--allow-empty] [--no-verify] [-e] [--author <author>]
 	   [--] [[-i | -o ]<file>...]
 
 DESCRIPTION
@@ -89,6 +89,12 @@ OPTIONS
 	This option bypasses the pre-commit hook.
 	See also link:hooks.html[hooks].
 
+--allow-empty::
+	Usually recording a commit that has the exact same tree as its
+	sole parent commit and the command prevents you from making such
+	a mistake.  This option bypasses the safety, and is primarily
+	for use by foreign scm interface scripts.
+
 -e|--edit::
 	The message taken from file with `-F`, command line with
 	`-m`, and from file with `-C` are usually used as the
diff --git a/builtin-commit.c b/builtin-commit.c
index 6c2dc39..e635d99 100644
--- a/builtin-commit.c
+++ b/builtin-commit.c
@@ -46,7 +46,7 @@ static enum {
 static char *logfile, *force_author, *template_file;
 static char *edit_message, *use_message;
 static int all, edit_flag, also, interactive, only, amend, signoff;
-static int quiet, verbose, untracked_files, no_verify;
+static int quiet, verbose, untracked_files, no_verify, allow_empty;
 
 static int no_edit, initial_commit, in_merge;
 const char *only_include_assumed;
@@ -87,6 +87,7 @@ static struct option builtin_commit_options[] = {
 	OPT_BOOLEAN('n', "no-verify", &no_verify, "bypass pre-commit hook"),
 	OPT_BOOLEAN(0, "amend", &amend, "amend previous commit"),
 	OPT_BOOLEAN(0, "untracked-files", &untracked_files, "show all untracked files"),
+	OPT_BOOLEAN(0, "allow-empty", &allow_empty, "ok to record an empty change"),
 
 	OPT_END()
 };
@@ -710,7 +711,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
 	}
 
 	if (!prepare_log_message(index_file, prefix) && !in_merge &&
-	    !(amend && is_a_merge(head_sha1))) {
+	    !allow_empty && !(amend && is_a_merge(head_sha1))) {
 		run_status(stdout, index_file, prefix);
 		rollback_index_files();
 		unlink(commit_editmsg);
-- 
1.5.3.7-2077-ga07a

Re: [PATCH] git-commit --allow-empty

From: Nicolas Pitre <hidden>
Date: 2016-06-15 22:43:55

On Mon, 3 Dec 2007, Junio C Hamano wrote:
+--allow-empty::
+	Usually recording a commit that has the exact same tree as its
+	sole parent commit and the command prevents you from making such
+	a mistake.  This option bypasses the safety, and is primarily
+	for use by foreign scm interface scripts.
The first sentence is rather buggy I would say.


Nicolas

Re: [PATCH] hg-to-git: handle an empty dir in hg by combining git commits

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:43:56

Junio C Hamano [off-list ref] writes:
Mark Drago [off-list ref] writes:
quoted
This patch will detect that there are no changes to commit (using git-status),
and will not perform the commit, but will instead combine the log messages of
that (non-)commit with the next commit.
I think a better approach would be to implement --no-tree-change-is-ok
option to git-commit, strictly for use by foreign scm interface scripts
like yours.  It does not usually make sense to record a commit that has
the exact same tree as its sole parent commit and that is why git-commit
prevents you from making that mistake, but when data from foreign scm is
involved, it is a different story.  We are equipped to represent such a
(perhaps insane, perhaps by mistake, or perhaps done on purpose) change
and it is better to represent it bypassing the safety valve for native
use.
So I did "git commit --allow-empty".  With that, perhaps the following
will fix the issue?

I won't be commiting this myself until I hear a positive Ack.

---
 contrib/hg-to-git/hg-to-git.py |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/contrib/hg-to-git/hg-to-git.py b/contrib/hg-to-git/hg-to-git.py
index 7a1c3e4..9befb92 100755
--- a/contrib/hg-to-git/hg-to-git.py
+++ b/contrib/hg-to-git/hg-to-git.py
@@ -211,7 +211,7 @@ for cset in range(int(tip) + 1):
     os.system('git-ls-files -x .hg --deleted | git-update-index --remove --stdin')
 
     # commit
-    os.system(getgitenv(user, date) + 'git-commit -a -F %s' % filecomment)
+    os.system(getgitenv(user, date) + 'git commit --allow-empty -a -F %s' % filecomment)
     os.unlink(filecomment)
 
     # tag

Re: [PATCH] hg-to-git: handle an empty dir in hg by combining git commits

From: Mark Drago <hidden>
Date: 2016-06-15 22:43:56

On Dec 5, 2007 2:01 AM, Junio C Hamano [off-list ref] wrote:
Junio C Hamano [off-list ref] writes:
quoted
Mark Drago [off-list ref] writes:
quoted
This patch will detect that there are no changes to commit (using git-status),
and will not perform the commit, but will instead combine the log messages of
that (non-)commit with the next commit.
I think a better approach would be to implement --no-tree-change-is-ok
option to git-commit, strictly for use by foreign scm interface scripts
like yours.  It does not usually make sense to record a commit that has
the exact same tree as its sole parent commit and that is why git-commit
prevents you from making that mistake, but when data from foreign scm is
involved, it is a different story.  We are equipped to represent such a
(perhaps insane, perhaps by mistake, or perhaps done on purpose) change
and it is better to represent it bypassing the safety valve for native
use.
So I did "git commit --allow-empty".  With that, perhaps the following
will fix the issue?

I won't be commiting this myself until I hear a positive Ack.
I gave this a test and it works perfectly well.  Commit away.

Thanks,
Mark.
quoted hunk
---
 contrib/hg-to-git/hg-to-git.py |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/contrib/hg-to-git/hg-to-git.py b/contrib/hg-to-git/hg-to-git.py
index 7a1c3e4..9befb92 100755
--- a/contrib/hg-to-git/hg-to-git.py
+++ b/contrib/hg-to-git/hg-to-git.py
@@ -211,7 +211,7 @@ for cset in range(int(tip) + 1):
     os.system('git-ls-files -x .hg --deleted | git-update-index --remove --stdin')

     # commit
-    os.system(getgitenv(user, date) + 'git-commit -a -F %s' % filecomment)
+    os.system(getgitenv(user, date) + 'git commit --allow-empty -a -F %s' % filecomment)
     os.unlink(filecomment)

     # tag
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help