* [GUILT][RFC] Autotagging
@ 2007-03-10 4:46 Josef 'Jeff' Sipek
2007-03-10 4:46 ` [PATCH 1/2] Automatically create unannotated tags for top, bottom, and base of the stack Josef 'Jeff' Sipek
2007-03-10 4:46 ` [PATCH 2/2] Autotag: Read guilt.autotag config var and tag commits only if this feature is enabled Josef 'Jeff' Sipek
0 siblings, 2 replies; 3+ messages in thread
From: Josef 'Jeff' Sipek @ 2007-03-10 4:46 UTC (permalink / raw)
To: git
Greetings all!
Recently, it has been brought to my attention that it would be nice to be
able to refer to the top/bottom/base of the patch stack in Guilt by a name
instead of fishing around the log for the hash. I quickly coded up the
following solution (which I call "autotagging"), which creates unannotated
tags for the top (topmost applied patch), bottom (first applied patch), and
base (parent of bottom) in with this naming scheme:
${branch}_top
${branch}_bottom
${branch}_base
The branch name is necessary as each branch has its own series of patches,
and potentially different history to begin with.
Of course, I included an option to disable this feature (see patch 2) - just
set guilt.autotag=0 in your git config.
Before I merge this into Guilt master, I was hoping for some feedback. Just
in case I completely missed something obvious, or perhaps there is a better
way to name the branches :)
Thanks,
Josef "Jeff" Sipek.
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH 1/2] Automatically create unannotated tags for top, bottom, and base of the stack
2007-03-10 4:46 [GUILT][RFC] Autotagging Josef 'Jeff' Sipek
@ 2007-03-10 4:46 ` Josef 'Jeff' Sipek
2007-03-10 4:46 ` [PATCH 2/2] Autotag: Read guilt.autotag config var and tag commits only if this feature is enabled Josef 'Jeff' Sipek
1 sibling, 0 replies; 3+ messages in thread
From: Josef 'Jeff' Sipek @ 2007-03-10 4:46 UTC (permalink / raw)
To: git; +Cc: Josef 'Jeff' Sipek
On every push or pop operation (refresh is a pop followed by a push), update
the stack top (${branch}_top), stack bottom (${branch}_bottom), and stack
base (${branch}_base) tags.
Top: Topmost applied patch/commit
Bottom: Bottommost applied patch/commit
Base: Commit on top of which the bottom most patch is applied
Having these three tags, one can easily get the log/diff/other information
only for commits that are (or are not!) part of the patch stack.
Signed-off-by: Josef 'Jeff' Sipek <jsipek@cs.sunysb.edu>
---
guilt | 34 ++++++++++++++++++++++++++++++++--
1 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/guilt b/guilt
index 43e7842..3dbe4b6 100755
--- a/guilt
+++ b/guilt
@@ -277,6 +277,33 @@ function pop_many_patches
mv "$applied.tmp" "$applied"
cd - 2>&1 >/dev/null
+
+ # update references to top, bottom, and base
+ update_stack_tags
+}
+
+# usage: update_stack_tags
+function update_stack_tags
+{
+ if [ `wc -l < $applied` -gt 0 ]; then
+ # there are patches applied, therefore we must get the top,
+ # bottom and base hashes, and update the tags
+
+ local top_hash=`git-rev-parse HEAD`
+ local bottom_hash=`head -1 < $applied | cut -d: -f1`
+ local base_hash=`git-rev-parse $bottom_hash^`
+
+ echo $top_hash > "$GIT_DIR/refs/tags/${branch}_top"
+ echo $bottom_hash > "$GIT_DIR/refs/tags/${branch}_bottom"
+ echo $base_hash > "$GIT_DIR/refs/tags/${branch}_base"
+ else
+ # there are no patches applied, therefore we must remove the
+ # tags to old top, bottom, and base
+
+ rm -f "$GIT_DIR/refs/tags/${branch}_top"
+ rm -f "$GIT_DIR/refs/tags/${branch}_bottom"
+ rm -f "$GIT_DIR/refs/tags/${branch}_base"
+ fi
}
# usage: push_patch patchname [bail_action]
@@ -349,6 +376,11 @@ function push_patch
# mark patch as applied
echo "$commitish:$pname" >> $applied
+ cd - 2>&1 >/dev/null
+
+ # update references to top, bottom, and base of the stack
+ update_stack_tags
+
# restore original GIT_AUTHOR_{NAME,EMAIL}
if [ ! -z "$author_str" ]; then
if [ ! -z "$backup_author_name" ]; then
@@ -376,8 +408,6 @@ function push_patch
rm -f /tmp/guilt.msg.$$ /tmp/guilt.log.$$
- cd - 2>&1 >/dev/null
-
return $bail
}
--
1.5.0.3.268.g3dda
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH 2/2] Autotag: Read guilt.autotag config var and tag commits only if this feature is enabled
2007-03-10 4:46 [GUILT][RFC] Autotagging Josef 'Jeff' Sipek
2007-03-10 4:46 ` [PATCH 1/2] Automatically create unannotated tags for top, bottom, and base of the stack Josef 'Jeff' Sipek
@ 2007-03-10 4:46 ` Josef 'Jeff' Sipek
1 sibling, 0 replies; 3+ messages in thread
From: Josef 'Jeff' Sipek @ 2007-03-10 4:46 UTC (permalink / raw)
To: git; +Cc: Josef 'Jeff' Sipek
Some users may not want to have guilt automatically tag the top, bottom, and
base of the stack. Allow them to disable such functionality by setting
guilt.autotag=0 in their git config file.
guilt-init now accepts a new parameter '-n' to automatically set
guilt.autotag=0 in the current repository.
Signed-off-by: Josef 'Jeff' Sipek <jsipek@cs.sunysb.edu>
---
Documentation/guilt-init.txt | 8 +++++++-
guilt | 15 +++++++++++++++
guilt-init | 15 ++++++++++++---
3 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/Documentation/guilt-init.txt b/Documentation/guilt-init.txt
index e643668..a245c6e 100644
--- a/Documentation/guilt-init.txt
+++ b/Documentation/guilt-init.txt
@@ -8,12 +8,18 @@ guilt-init - Initialize guilt for use in a git repository
SYNOPSIS
--------
-'guilt-init'
+'guilt-init [-n]'
DESCRIPTION
-----------
Initialize a git repository for use with guilt
+OPTIONS
+-------
+-n::
+ Do not automatically create stack top, bottom, and base tags (sets
+ guilt.autotag config variable to 0).
+
EXAMPLES
--------
First, get a repository to work on. Here's one that we'll use as an example:
diff --git a/guilt b/guilt
index 3dbe4b6..e7c22d2 100755
--- a/guilt
+++ b/guilt
@@ -285,6 +285,11 @@ function pop_many_patches
# usage: update_stack_tags
function update_stack_tags
{
+ # bail if autotagging is not enabled
+ if [ $autotag -eq 0 ]; then
+ return 0
+ fi
+
if [ `wc -l < $applied` -gt 0 ]; then
# there are patches applied, therefore we must get the top,
# bottom and base hashes, and update the tags
@@ -480,12 +485,22 @@ function munge_hash_range
fi
}
+#
# Some constants
+#
# used for: git-apply -C <val>
guilt_push_diff_context=1
#
+# Parse any part of .git/config that belongs to us
+#
+
+# autotag?
+autotag=`git-config guilt.autotag`
+[ -z "$autotag" ] && autotag=1
+
+#
# The following gets run every time this file is source'd
#
diff --git a/guilt-init b/guilt-init
index 1277998..feacf95 100755
--- a/guilt-init
+++ b/guilt-init
@@ -5,11 +5,19 @@
DO_NOT_CHECK_BRANCH_EXISTENCE=1
+USAGE="[-n]"
. guilt
-if [ $# -ne 0 ]; then
- usage
-fi
+autotag=1
+
+while case $# in 0) break ;; esac; do
+ if [ "$1" = "-n" ]; then
+ autotag=0
+ shift
+ else
+ usage
+ fi
+done
if [ -d "$GUILT_DIR/$branch" ]; then
die "Branch $branch appears to be already initialized (GIT_DIR=$GIT_DIR)"
@@ -20,3 +28,4 @@ mkdir $GUILT_DIR/$branch
touch $GUILT_DIR/$branch/series
touch $GUILT_DIR/$branch/status
+git-config --int --replace-all guilt.autotag $autotag
--
1.5.0.3.268.g3dda
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-03-10 4:46 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-10 4:46 [GUILT][RFC] Autotagging Josef 'Jeff' Sipek
2007-03-10 4:46 ` [PATCH 1/2] Automatically create unannotated tags for top, bottom, and base of the stack Josef 'Jeff' Sipek
2007-03-10 4:46 ` [PATCH 2/2] Autotag: Read guilt.autotag config var and tag commits only if this feature is enabled Josef 'Jeff' Sipek
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).