threads / rfc / 546

[RFC] allow file list editing during cg-commit

Subject: [RFC] allow file list editing during cg-commit

## tl;dr

6 messages between May 9, 2005 and May 9, 2005.

replies: 5people: 4as markdown or json

Eugene Surovegin· May 9, 2005, 04:14 UTC · lore
Hi!

I just started playing with cogito and failed to find _easy_ way to select which files will be committed and which won't. cg-commit seems to support specifying file list in command line, but this isn't very convenient when the list is big.

I tend to have many modified files in my repo, but commit them in several different changeset.

I just made simple change to cg-commit which allows editing file list while editing log message; for example, if I have 30 files ready for commit, but want to commit only 29, I just remove this file from "CG:" list.

Patch which demonstrates the idea follows. Please note, this is just a quick hack, and I probably missed some cg-commit cases, when such behavior is undesirable; also, I cheated a little to make grepping easy :).

Signed-off-by: Eugene Surovegin <ebs@ebshome.net>
Index: cg-commit
===================================================================
--- 3974261da777f55a7a11aff6e02f584bbfe2b475/cg-commit  (mode:100755)
+++ uncommitted/cg-commit  (mode:100755)
@@ -116,7 +116,7 @@
 	for file in "${commitfiles[@]}"; do
 		# TODO: Prepend a letter describing whether it's addition,
 		# removal or update. Or call git status on those files.
-		echo "CG:    $file" >>$LOGMSG
+		echo "CG:F    $file" >>$LOGMSG
 		[ "$msgs" ] && ! [ "$forceeditor" ] && echo $file
 	done
 fi
@@ -131,6 +131,11 @@
 		rm $LOGMSG $LOGMSG2
 		die 'Commit message not modified, commit aborted'
 	fi
+	eval commitfiles=($(grep ^CG:F $LOGMSG2 | sed 's/^CG:F//'))
+	if [ ! "${commitfiles[*]}" ]; then
+		rm $LOGMSG $LOGMSG2
+		die 'Nothing to commit'
+	fi
 else
 	cat >>$LOGMSG2
 fi
Marcel Holtmann· May 9, 2005, 08:27 UTC · re: Eugene Surovegin · lore

Re: [RFC] allow file list editing during cg-commit

Hi Eugene,
> I just started playing with cogito and failed to find _easy_ way to
> select which files will be committed and which won't. cg-commit seems
> to support specifying file list in command line, but this isn't very
> convenient when the list is big.

do you know any SCM native text interface that supports such a thing? In general this is done by high-level GUI based interfaces to the SCM or a special Emacs mode etc.

Regards
Marcel
Eugene Surovegin· May 9, 2005, 08:33 UTC · re: Marcel Holtmann · lore

Re: [RFC] allow file list editing during cg-commit

On Mon, May 09, 2005 at 10:27:09AM +0200, Marcel Holtmann wrote:
Show 10 quoted lines
> Hi Eugene,
> 
> > I just started playing with cogito and failed to find _easy_ way to
> > select which files will be committed and which won't. cg-commit seems
> > to support specifying file list in command line, but this isn't very
> > convenient when the list is big.
> 
> do you know any SCM native text interface that supports such a thing? In
> general this is done by high-level GUI based interfaces to the SCM or a
> special Emacs mode etc.
Perforce works like that. This is where I "stole" this idea :)
I think cogito _is_ UI, a text one, of course.
-- 
Eugene
Petr Baudis· May 9, 2005, 08:46 UTC · re: Marcel Holtmann · lore

Re: [RFC] allow file list editing during cg-commit

Dear diary, on Mon, May 09, 2005 at 10:27:09AM CEST, I got a letter where Marcel Holtmann <marcel@holtmann.org> told me that...

> Hi Eugene,
Hello,
Show 8 quoted lines
> > I just started playing with cogito and failed to find _easy_ way to
> > select which files will be committed and which won't. cg-commit seems
> > to support specifying file list in command line, but this isn't very
> > convenient when the list is big.
> 
> do you know any SCM native text interface that supports such a thing? In
> general this is done by high-level GUI based interfaces to the SCM or a
> special Emacs mode etc.

so what? I still think the idea is cool, why shouldn't support it if noone else does?

The only thing to watch out for is that cg-commit -C produces no such list at all; it should deal with that and tell the user he is not going to be able to control what is going to be committed then.

Another thing is that at the moment you modify the file list, you should set customfiles - otherwise you will commit even cg-adds and cg-rms of files you didn't select. But do that really only when you change the file list, since it is more expensive.

You should also place an appropriate hint near the CG: lines, saying that removing some of them will limit the list of files to be committed.

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
C++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor
Eugene Surovegin· May 9, 2005, 22:24 UTC · re: Petr Baudis · lore

Re: [RFC] allow file list editing during cg-commit

On Mon, May 09, 2005 at 10:46:06AM +0200, Petr Baudis wrote:
[snip]
Show 11 quoted lines
> The only thing to watch out for is that cg-commit -C produces no such
> list at all; it should deal with that and tell the user he is not going
> to be able to control what is going to be committed then.
> 
> Another thing is that at the moment you modify the file list, you should
> set customfiles - otherwise you will commit even cg-adds and cg-rms of
> files you didn't select. But do that really only when you change the
> file list, since it is more expensive.
> 
> You should also place an appropriate hint near the CG: lines, saying
> that removing some of them will limit the list of files to be committed.

OK, how about the following patch? I tried to address all issues you mentioned and also $merging case as well.

Signed-off-by: Eugene Surovegin <ebs@ebshome.net>
Index: cg-commit
===================================================================
--- 972d8624458936868e6f392b40858b7c362af8cd/cg-commit  (mode:100755)
+++ uncommitted/cg-commit  (mode:100755)
@@ -111,12 +111,16 @@
 		rm $LOGMSG $LOGMSG2
 		die 'Nothing to commit'
 	fi
+	if [ ! "$merging" ]; then
+		echo "CG: By deleting lines beginning with CG:F the associated file" >>$LOGMSG 
+		echo "CG: will be removed from the commit list." >>$LOGMSG 
+	fi	
 	echo "CG:" >>$LOGMSG
 	echo "CG: Modified files:" >>$LOGMSG
 	for file in "${commitfiles[@]}"; do
 		# TODO: Prepend a letter describing whether it's addition,
 		# removal or update. Or call git status on those files.
-		echo "CG:    $file" >>$LOGMSG
+		echo "CG:F    $file" >>$LOGMSG
 		[ "$msgs" ] && ! [ "$forceeditor" ] && echo $file
 	done
 fi
@@ -131,6 +135,17 @@
 		rm $LOGMSG $LOGMSG2
 		die 'Commit message not modified, commit aborted'
 	fi
+	if [ ! "$ignorecache" ] && [ ! "$merging" ]; then
+		eval newcommitfiles=($(grep ^CG:F $LOGMSG2 | sed 's/^CG:F//'))
+		if [ ! "${newcommitfiles[*]}" ]; then
+			rm $LOGMSG $LOGMSG2
+			die 'Nothing to commit'
+		fi
+		if [ "${commitfiles[*]}" != "${newcommitfiles[*]}" ]; then
+			commitfiles="${newcommitfiles[*]}"
+			customfiles="${commitfiles[*]}"
+		fi
+	fi
 else
 	cat >>$LOGMSG2
 fi
Jonas Fonseca· May 9, 2005, 15:24 UTC · re: Eugene Surovegin · lore

Re: [RFC] allow file list editing during cg-commit

Eugene Surovegin <ebs@ebshome.net> wrote Sun, May 08, 2005:
> I just started playing with cogito and failed to find _easy_ way to
> select which files will be committed and which won't. cg-commit seems
> to support specifying file list in command line, but this isn't very
> convenient when the list is big.

The commit message is already very self documenting so it would be great if this feature was also documented there. Something like the following, but clearer:

CG: -----------------------------------------------------------------
CG: Lines beginning with the CG: prefix are removed automatically.
CG: By deleting lines beginning with `CG:F' the associated file will
CG: be removed from the commit list.
CG: ...
-- 
Jonas Fonseca

← back to recent threads