git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] cogito: Add cg-undo command
@ 2005-05-03 17:06 Matt Porter
  2005-05-03 21:32 ` Petr Baudis
  0 siblings, 1 reply; 4+ messages in thread
From: Matt Porter @ 2005-05-03 17:06 UTC (permalink / raw)
  To: Petr Baudis; +Cc: git

Adds a cg-undo command which takes a commit ID and resets HEAD
to the parent of the commit ID...refreshing the tree. This undoes
a single commit or a series of commits.

Signed-off-by: Matt Porter <mporter@kernel.crashing.org>

--- a1aff2a6748c0c0d08058c7d74503e724abc5d03/Makefile  (mode:100644 sha1:6ae0afa0208a8f755d383281a6d049a4ef90fe63)
+++ 023d9a7929d2f933d8e008f1679f13a58f7b1229/Makefile  (mode:100644 sha1:6c282aeebe86ecee9e634481b3d51fd53a582791)
@@ -47,7 +47,7 @@
 	cg-add cg-admin-lsobj cg-cancel cg-clone cg-commit cg-diff \
 	cg-export cg-help cg-init cg-log cg-ls cg-merge cg-mkpatch \
 	cg-patch cg-pull cg-branch-add cg-branch-ls cg-rm cg-seek cg-status \
-	cg-tag cg-tag-ls cg-update cg-Xlib
+	cg-tag cg-tag-ls cg-undo cg-update cg-Xlib
 
 COMMON=	read-cache.o
 
Index: cg-help
===================================================================
--- a1aff2a6748c0c0d08058c7d74503e724abc5d03/cg-help  (mode:100755 sha1:1f5d2d79b67490d44ce0f575ff9a4b80134ea47f)
+++ 023d9a7929d2f933d8e008f1679f13a58f7b1229/cg-help  (mode:100755 sha1:c7dc8f3e03895374cd0dae544570a37a459c2466)
@@ -43,6 +43,7 @@
 	cg-status
 	cg-tag		TNAME [COMMIT_ID]
 	cg-tag-ls
+	cg-undo		[COMMIT_ID]
 	cg-update	[BNAME]
 	cg-version
 
Index: cg-undo
===================================================================
--- /dev/null  (tree:a1aff2a6748c0c0d08058c7d74503e724abc5d03)
+++ 023d9a7929d2f933d8e008f1679f13a58f7b1229/cg-undo  (mode:100755 sha1:7fd6d89158fb5aeee42aa05a93f2c81884d9bd34)
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+#
+# Undo a commit or a series of commits
+# Copyright (C) Matt Porter, 2005
+#
+# Takes a commit ID which is the earliest commit to be
+# removed from the repository.
+
+. cg-Xlib
+
+PARENT=`git-cat-file commit $1 | grep parent | cut -f 2 -d " "`
+echo "Undo from $1 to current HEAD"
+echo "Reset HEAD to $PARENT"
+echo "$PARENT" > .git/HEAD
+git-read-tree -m "$PARENT" || {
+	echo >&2 "$PARENT: bad commit"
+	exit 1
+}
+git-checkout-cache -f -a
+git-update-cache --refresh

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

* Re: [PATCH] cogito: Add cg-undo command
  2005-05-03 17:06 [PATCH] cogito: Add cg-undo command Matt Porter
@ 2005-05-03 21:32 ` Petr Baudis
  2005-05-04  5:40   ` Matt Porter
  0 siblings, 1 reply; 4+ messages in thread
From: Petr Baudis @ 2005-05-03 21:32 UTC (permalink / raw)
  To: Matt Porter; +Cc: git

Dear diary, on Tue, May 03, 2005 at 07:06:25PM CEST, I got a letter
where Matt Porter <mporter@kernel.crashing.org> told me that...
> Index: cg-help
> ===================================================================
> --- a1aff2a6748c0c0d08058c7d74503e724abc5d03/cg-help  (mode:100755 sha1:1f5d2d79b67490d44ce0f575ff9a4b80134ea47f)
> +++ 023d9a7929d2f933d8e008f1679f13a58f7b1229/cg-help  (mode:100755 sha1:c7dc8f3e03895374cd0dae544570a37a459c2466)
> @@ -43,6 +43,7 @@
>  	cg-status
>  	cg-tag		TNAME [COMMIT_ID]
>  	cg-tag-ls
> +	cg-undo		[COMMIT_ID]

It doesn't seem very optional now.

>  	cg-update	[BNAME]
>  	cg-version
>  
> Index: cg-undo
> ===================================================================
> --- /dev/null  (tree:a1aff2a6748c0c0d08058c7d74503e724abc5d03)
> +++ 023d9a7929d2f933d8e008f1679f13a58f7b1229/cg-undo  (mode:100755 sha1:7fd6d89158fb5aeee42aa05a93f2c81884d9bd34)
> @@ -0,0 +1,20 @@
> +#!/usr/bin/env bash
> +#
> +# Undo a commit or a series of commits
> +# Copyright (C) Matt Porter, 2005
> +#
> +# Takes a commit ID which is the earliest commit to be
> +# removed from the repository.
> +
> +. cg-Xlib
> +
> +PARENT=`git-cat-file commit $1 | grep parent | cut -f 2 -d " "`

What's wrong with parent-id?

> +echo "Undo from $1 to current HEAD"
> +echo "Reset HEAD to $PARENT"

You talk way too much, I think. I'd just do

	echo "Rewinding $HEAD -> $PARENT" >&2

> +echo "$PARENT" > .git/HEAD
> +git-read-tree -m "$PARENT" || {
> +	echo >&2 "$PARENT: bad commit"
> +	exit 1
> +}
> +git-checkout-cache -f -a
> +git-update-cache --refresh

You really don't want to do this if the tree has any local
modifications.


Please make sure the commit you are rewinding to is an ancestor of your
current HEAD (there should be something like separate cg-branch-rm for
killing enemy branches).

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
C++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor

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

* Re: [PATCH] cogito: Add cg-undo command
  2005-05-03 21:32 ` Petr Baudis
@ 2005-05-04  5:40   ` Matt Porter
  2005-05-08 20:59     ` Petr Baudis
  0 siblings, 1 reply; 4+ messages in thread
From: Matt Porter @ 2005-05-04  5:40 UTC (permalink / raw)
  To: Petr Baudis; +Cc: git

On Tue, May 03, 2005 at 11:32:04PM +0200, Petr Baudis wrote:
> Dear diary, on Tue, May 03, 2005 at 07:06:25PM CEST, I got a letter
> where Matt Porter <mporter@kernel.crashing.org> told me that...
> > +	cg-undo		[COMMIT_ID]
> 
> It doesn't seem very optional now.

Yep, changed.

> > +PARENT=`git-cat-file commit $1 | grep parent | cut -f 2 -d " "`
>
> What's wrong with parent-id?

Missed it...changed to use parent-id.

> > +echo "Undo from $1 to current HEAD"
> > +echo "Reset HEAD to $PARENT"
> 
> You talk way too much, I think. I'd just do
> 
> 	echo "Rewinding $HEAD -> $PARENT" >&2

Done.

> > +git-update-cache --refresh
> 
> You really don't want to do this if the tree has any local
> modifications.

Ugh, yes. I added a check for this. 

> Please make sure the commit you are rewinding to is an ancestor of your
> current HEAD (there should be something like separate cg-branch-rm for
> killing enemy branches).

Added a check for this as well as verifying we have an argument.
 
Signed-off-by: Matt Porter <mporter@kernel.crashing.org>

--- aa6233be6d1b8bf42797c409a7c23b50593afc99/Makefile  (mode:100644 sha1:6ae0afa0208a8f755d383281a6d049a4ef90fe63)
+++ ce72371d991b15a0ca8db7c2332d215b59b909af/Makefile  (mode:100644 sha1:6c282aeebe86ecee9e634481b3d51fd53a582791)
@@ -47,7 +47,7 @@
 	cg-add cg-admin-lsobj cg-cancel cg-clone cg-commit cg-diff \
 	cg-export cg-help cg-init cg-log cg-ls cg-merge cg-mkpatch \
 	cg-patch cg-pull cg-branch-add cg-branch-ls cg-rm cg-seek cg-status \
-	cg-tag cg-tag-ls cg-update cg-Xlib
+	cg-tag cg-tag-ls cg-undo cg-update cg-Xlib
 
 COMMON=	read-cache.o
 
Index: cg-help
===================================================================
--- aa6233be6d1b8bf42797c409a7c23b50593afc99/cg-help  (mode:100755 sha1:1f5d2d79b67490d44ce0f575ff9a4b80134ea47f)
+++ ce72371d991b15a0ca8db7c2332d215b59b909af/cg-help  (mode:100755 sha1:1b75114ee90d2b3b9786fc4f14bf179feef54f87)
@@ -43,6 +43,7 @@
 	cg-status
 	cg-tag		TNAME [COMMIT_ID]
 	cg-tag-ls
+	cg-undo		COMMIT_ID
 	cg-update	[BNAME]
 	cg-version
 
Index: cg-undo
===================================================================
--- /dev/null  (tree:aa6233be6d1b8bf42797c409a7c23b50593afc99)
+++ ce72371d991b15a0ca8db7c2332d215b59b909af/cg-undo  (mode:100644 sha1:7b1cb04c79731b137d88ebd05ee41553af7246d2)
@@ -0,0 +1,32 @@
+#!/usr/bin/env bash
+#
+# Undo a commit or a series of commits
+# Copyright (C) Matt Porter, 2005
+#
+# Takes a commit ID which is the earliest commit to be
+# removed from the repository.
+
+. cg-Xlib
+
+[ "$1" ] || die "usage: cg-undo COMMIT_ID"
+
+HEAD=$(commit-id) || exit 1;
+PARENT=$(parent-id "$1") || exit 1;
+
+git-rev-list $HEAD | grep -q $1 || {
+	echo >&2 "$1: not an ancestor of HEAD"
+	exit 1
+}
+[ "$(git-diff-files -s)" ] && git-update-cache --refresh
+if [ "$(git-diff-files -s)" ] || [ "$(git-diff-cache $(tree-id))" ]; then
+        die "Undo blocked: local changes"
+fi
+
+echo "Rewinding HEAD -> $PARENT" >&2
+echo "$PARENT" > .git/HEAD
+git-read-tree -m "$PARENT" || {
+	echo >&2 "$PARENT: bad commit"
+	exit 1
+}
+git-checkout-cache -f -a
+git-update-cache --refresh

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

* Re: [PATCH] cogito: Add cg-undo command
  2005-05-04  5:40   ` Matt Porter
@ 2005-05-08 20:59     ` Petr Baudis
  0 siblings, 0 replies; 4+ messages in thread
From: Petr Baudis @ 2005-05-08 20:59 UTC (permalink / raw)
  To: Matt Porter; +Cc: git

Dear diary, on Wed, May 04, 2005 at 07:40:07AM CEST, I got a letter
where Matt Porter <mporter@kernel.crashing.org> told me that...
> Signed-off-by: Matt Porter <mporter@kernel.crashing.org>

Thanks. I took it, hacked upon it for a while and then committed
something similar but largely rewritten as cg-admin-uncommit. ;-)

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
C++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor

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

end of thread, other threads:[~2005-05-08 20:52 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-05-03 17:06 [PATCH] cogito: Add cg-undo command Matt Porter
2005-05-03 21:32 ` Petr Baudis
2005-05-04  5:40   ` Matt Porter
2005-05-08 20:59     ` Petr Baudis

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).