From: "Santi Béjar" <sbejar@gmmail.es>
To: Git Mailing List <git@vger.kernel.org>
Subject: [COGITO PATCH] Heads and tags in subdirectories
Date: Wed, 01 Jun 2005 00:00:35 +0200 [thread overview]
Message-ID: <87is0zginw.fsf@ifae.es> (raw)
Keep heads and tags in their respective subtirectoris named as
the branch. This fixes the case where two repositoris have tags
with the same name.
Add a "-a" flag to cg-pull to download all the repositories heads,
so you can now do a "cg-log -r repo#branch" (cg-Xnormid repo#branch
job).
The transition is automatic when you do the first "cg-pull repo".
Signed-off-by: "Santi Béjar" <sbejar@gmmail.es>
cg-Xnormid | 14 ++++++++++-
cg-commit | 7 +++++
cg-pull | 72 +++++++++++++++++++++++++++++++++++++------------------------
3 files changed, 62 insertions(+), 31 deletions(-)
diff --git a/cg-Xnormid b/cg-Xnormid
--- a/cg-Xnormid
+++ b/cg-Xnormid
@@ -16,15 +16,25 @@
id="$1"
+repo=$(echo $id | cut -d '#' -f 1)
+(echo $repo | egrep -qv '[^a-zA-Z0-9_.@!:-]') || \
+ die "name contains invalid characters"
+id=$(echo $id | sed 's@#@/@')
+
if [ ! "$id" ] || [ "$id" = "this" ] || [ "$id" = "HEAD" ]; then
read id < "$_git/HEAD"
-elif [ -r "$_git/refs/tags/$id" ]; then
+elif [ -r "$_git/refs/tags/$id" ] && [ ! -d "$_git/refs/tags/$id" ]; then
read id < "$_git/refs/tags/$id"
-elif [ -r "$_git/refs/heads/$id" ]; then
+elif [ -r "$_git/refs/heads/$id" ] && [ ! -d "$_git/refs/tags/$id" ]; then
read id < "$_git/refs/heads/$id"
+elif [ -r "$_git/branches/$id" ]; then
+ repobranch=$(cat "$_git/branches/$id" | cut -d '#' -f 2 -s)
+ repobranch=${repobranch:-master}
+ read id < "$_git/refs/heads/$id/$repobranch"
+
# Short id's must be lower case and at least 4 digits.
elif [[ "$id" == [0-9a-z][0-9a-z][0-9a-z][0-9a-z]* ]]; then
idpref=${id:0:2}
diff --git a/cg-commit b/cg-commit
--- a/cg-commit
+++ b/cg-commit
@@ -141,7 +141,12 @@ if [ "$merging" ]; then
[ "$msgs" ] && echo -n 'Merge with '
[ -s $_git/merging-sym ] || cp $_git/merging $_git/merging-sym
for sym in $(cat $_git/merging-sym); do
- uri=$(cat $_git/branches/$sym)
+ repo=$(echo $sym | cut -d '#' -f 1)
+ branch=$(echo $sym | cut -d '#' -f 2 -s)
+ uri=$(cat $_git/branches/$repo)
+ uribranch=$(echo $uri | cut -d '#' -f 2 -s)
+ [ -z "$uribranch" ] && [ -n "$branch" ] &&
+ [ "$branch" != master ] && uri=${uri}#$branch
[ "$uri" ] || uri="$sym"
echo "$uri" >>$LOGMSG
[ "$msgs" ] && echo "$uri"
diff --git a/cg-pull b/cg-pull
--- a/cg-pull
+++ b/cg-pull
@@ -6,23 +6,41 @@
# Takes the branch name as an argument, defaulting to "origin".
#
# See `cg-branch-add` for some description.
+#
+# OPTIONS
+# -------
+# -a::
+# Pull all the heads from repositori.
-USAGE="cg-pull [BRANCH_NAME]"
+USAGE="cg-pull [-a] [BRANCH_NAME]"
. ${COGITO_LIB}cg-Xlib
-name=$1
-
+[ "$1" == "-a" ] && all=yes && shift
+name=$1 && shift
[ "$name" ] || { [ -s $_git/refs/heads/origin ] && name=origin; }
[ "$name" ] || die "where to pull from?"
-uri=$(cat "$_git/branches/$name" 2>/dev/null) || die "unknown branch: $name"
-rembranch=master
+repo=$(echo $name | cut -d '#' -f 1)
+repobranch=$(echo $name | cut -s -d '#' -f 2)
+
+uri=$(cat "$_git/branches/$name" 2>/dev/null) || die "unknown branch: $name"
if echo "$uri" | grep -q '#'; then
+ [ -z "$repobranch" ] && repobranch=$(echo $uri | cut -d '#' -f 2)
rembranch=$(echo $uri | cut -d '#' -f 2)
uri=$(echo $uri | cut -d '#' -f 1)
fi
+repobranch=${repobranch:-master}
+branch=$repo/$repobranch
+[ "$all" ] && repobranch=
+
+# So long we have:
+# $repo = name of the repositori
+# $uri = uri of the repositori
+# $repobranch = name of the branch in the repositori
+# empty if we want all the branches
+# $branch = name of the local branch in refs/heads/
pull_progress() {
percentage=""
@@ -232,39 +250,37 @@ fi
orig_head=
-[ -s "$_git/refs/heads/$name" ] && orig_head=$(cat "$_git/refs/heads/$name")
-
+[ -s "$_git/refs/heads/$branch" ] && orig_head=$(cat "$_git/refs/heads/$branch")
-mkdir -p $_git/refs/heads
-rsyncerr=
-$fetch -i "$uri/refs/heads/$rembranch" "$_git/refs/heads/$name" || rsyncerr=1
-if [ "$rsyncerr" ]; then
- rsyncerr=
- $fetch -s "$uri/heads/$rembranch" "$_git/refs/heads/$name" || rsyncerr=1
-fi
-if [ "$rsyncerr" ] && [ "$rembranch" = "master" ]; then
- rsyncerr=
- $fetch -s "$uri/HEAD" "$_git/refs/heads/$name" || rsyncerr=1
+# 2005/05 Convert old layout
+[ -f $_git/refs/heads/$repo ] && orig_head=$(cat $_git/refs/heads/$repo) &&
+rm -f $_git/refs/heads/$repo
+
+mkdir -p $_git/refs/heads/$repo
+if [ "$repobranch" ] ; then
+ $fetch -i "$uri/refs/heads/$repobranch" "$_git/refs/heads/$branch" ||
+ $fetch -s "$uri/heads/$repobranch" "$_git/refs/heads/$branch" ||
+ { [ "$repobranch" = "master" ] && $fetch -s "$uri/HEAD" "$_git/refs/heads/$branch"; } ||
+ rsyncerr=1
+else
+ $fetch -i -d "$uri/refs/heads" "$_git/refs/heads/$repo" ||
+ $fetch -s -d "$uri/heads" "$_git/refs/heads/$repo" ||
+ rsyncerr=1
fi
-[ "$rsyncerr" ] && die "unable to get the head pointer of branch $rembranch"
+[ "$rsyncerr" ] && die "unable to get the head pointer of branch $repobranch"
[ -d $_git_objects ] || mkdir -p $_git_objects
-$pull "$name" "$uri" || die "objects pull failed"
+$pull "$branch" "$uri" || die "objects pull failed"
-# FIXME: Warn about conflicting tag names?
# XXX: We now throw stderr to /dev/null since not all repositories
# may have tags/ and users were confused by the harmless errors.
-[ -d $_git/refs/tags ] || mkdir -p $_git/refs/tags
+[ -d $_git/refs/tags/$repo ] || mkdir -p $_git/refs/tags/$repo
rsyncerr=
-$fetch -i -s -u -d "$uri/refs/tags" "$_git/refs/tags" || rsyncerr=1
-if [ "$rsyncerr" ]; then
- rsyncerr=
- $fetch -i -s -u -d "$uri/tags" "$_git/refs/tags" || rsyncerr=1
-fi
+$fetch -i -s -u -d "$uri/refs/tags" "$_git/refs/tags/$repo" ||
+$fetch -i -s -u -d "$uri/tags" "$_git/refs/tags/$repo" || rsyncerr=1
[ "$rsyncerr" ] && echo "unable to get tags list (non-fatal)" >&2
-
-new_head=$(cat "$_git/refs/heads/$name")
+new_head=$(cat "$_git/refs/heads/$branch")
if [ ! "$orig_head" ]; then
echo "New branch: $new_head"
next reply other threads:[~2005-05-31 21:59 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-31 22:00 Santi Béjar [this message]
2005-06-01 10:55 ` [COGITO PATCH] fetch_local -d behaves different from other fetch_* Santi Béjar
2005-06-01 12:59 ` [COGITO PATCH] Heads and tags in subdirectories Santi Béjar
2005-06-01 16:17 ` Santi Béjar
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87is0zginw.fsf@ifae.es \
--to=sbejar@gmmail.es \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).