public inbox for git@vger.kernel.org 
 help / color / mirror / Atom feed
From: Matt Porter <mporter@kernel•crashing.org>
To: Petr Baudis <pasky@ucw•cz>
Cc: git@vger•kernel.org
Subject: Re: [PATCH] cogito: Add cg-undo command
Date: Tue, 3 May 2005 22:40:07 -0700	[thread overview]
Message-ID: <20050503224007.B637@cox.net> (raw)
In-Reply-To: <20050503213204.GC15995@pasky.ji.cz>; from pasky@ucw.cz on Tue, May 03, 2005 at 11:32:04PM +0200

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

  reply	other threads:[~2005-05-04  5:36 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
2005-05-08 20:59     ` Petr Baudis

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=20050503224007.B637@cox.net \
    --to=mporter@kernel$(echo .)crashing.org \
    --cc=git@vger$(echo .)kernel.org \
    --cc=pasky@ucw$(echo .)cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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