git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 4/5] Create/delete branch ref logs.

From
Shawn Pearce <spearce@spearce.org>
Date
May 19, 2006, 09:16 UTC
Message-ID
<20060519091658.GL22257@spearce.org>

When crating a new branch offer '-l' as a way for the user to quickly enable ref logging for the new branch.

When deleting a branch also delete its ref log.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 This was discussed on #git earlier today and was thought to be a
 useful feature.  :-)
 Documentation/git-branch.txt |   10 ++++++++--
 git-branch.sh                |   12 +++++++++++-
 2 files changed, 19 insertions(+), 3 deletions(-)
e4fb59c8b73009e3bcae71bfb7edd7de2c648117
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 72fb2f8..a7bec3c 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -9,7 +9,7 @@ SYNOPSIS
 --------
 [verse]
 'git-branch' [-r]
-'git-branch' [-f] <branchname> [<start-point>]
+'git-branch' [-l] [-f] <branchname> [<start-point>]
 'git-branch' (-d | -D) <branchname>...
 
 DESCRIPTION
@@ -23,7 +23,8 @@ If no <start-point> is given, the branch
 equal to that of the currently checked out branch.
 
 With a `-d` or `-D` option, `<branchname>` will be deleted.  You may
-specify more than one branch for deletion.
+specify more than one branch for deletion.  If the branch currently
+has a ref log then the ref log will also be deleted.
 
 
 OPTIONS
@@ -34,6 +35,11 @@ OPTIONS
 -D::
 	Delete a branch irrespective of its index status.
 
+-l::
+	Create the branch's ref log.  This activates recording of
+	all changes to made the branch ref, enabling use of date
+	based sha1 expressions such as "<branchname>@{yesterday}".
+
 -f::
 	Force the creation of a new branch even if it means deleting
 	a branch that already exists with the same name.
diff --git a/git-branch.sh b/git-branch.sh
index d1e3730..e0501ec 100755
--- a/git-branch.sh
+++ b/git-branch.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-USAGE='[(-d | -D) <branchname>] | [[-f] <branchname> [<start-point>]] | -r'
+USAGE='[-l] [(-d | -D) <branchname>] | [[-f] <branchname> [<start-point>]] | -r'
 LONG_USAGE='If no arguments, show available branches and mark current branch with a star.
 If one argument, create a new branch <branchname> based off of current HEAD.
 If two arguments, create a new branch <branchname> based off of <start-point>.'
@@ -42,6 +42,7 @@ If you are sure you want to delete it, r
 	    esac
 	    ;;
 	esac
+	rm -f "$GIT_DIR/logs/refs/heads/$branch_name"
 	rm -f "$GIT_DIR/refs/heads/$branch_name"
 	echo "Deleted branch $branch_name."
     done
@@ -55,6 +56,7 @@ ls_remote_branches () {
 }
 
 force=
+create_log=
 while case "$#,$1" in 0,*) break ;; *,-*) ;; *) break ;; esac
 do
 	case "$1" in
@@ -69,6 +71,9 @@ do
 	-f)
 		force="$1"
 		;;
+	-l)
+		create_log="yes"
+		;;
 	--)
 		shift
 		break
@@ -117,4 +122,9 @@ then
 		die "cannot force-update the current branch."
 	fi
 fi
+if test "$create_log" = 'yes'
+then
+	mkdir -p $(dirname "$GIT_DIR/logs/refs/heads/$branchname")
+	touch "$GIT_DIR/logs/refs/heads/$branchname"
+fi
 git update-ref -m "branch: Created from $head" "refs/heads/$branchname" $rev
-- 
1.3.2.g7278
Message 1 of 1 in “Create/delete branch ref logs.”
  1. 4/5 Create/delete branch ref logs.Shawn Pearce, May 19, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.