* Origin handling
@ 2005-06-02 6:12 Santi Béjar
2005-06-02 10:18 ` [COGITO PATCH]Re: " Santi Béjar
0 siblings, 1 reply; 2+ messages in thread
From: Santi Béjar @ 2005-06-02 6:12 UTC (permalink / raw)
To: Git Mailing List
I propose that the origin of a branch comes from a file in
.git/branches/ of the same name. So the origin of default branch
master is the content of the file .git/branches/master that in
the current practice would be "origin". But we could have the
remote branch "git", being the origin of the local branch
"git_dirs" (the content of .git/branches/git_dirs = "git").
What do you think?
Santi
^ permalink raw reply [flat|nested] 2+ messages in thread
* [COGITO PATCH]Re: Origin handling
2005-06-02 6:12 Origin handling Santi Béjar
@ 2005-06-02 10:18 ` Santi Béjar
0 siblings, 0 replies; 2+ messages in thread
From: Santi Béjar @ 2005-06-02 10:18 UTC (permalink / raw)
To: Git Mailing List
I propose that the origin of a branch comes from a file in
.git/branches/ of the same name. So the origin of default branch
master is the content of the file .git/branches/master that in
the current practice would be "origin". But we could have the
remote branch "git", being the origin of the local branch
"git_dirs" (the content of .git/branches/git_dirs = "git").
The origin branch is reserved. When you cg-clone the origin is now
called cloned (but "commit-id cloned" = "commit-id origin" while you do
not switch to another branch whith other origin). The transition from
old handling is not in the patch.
So now you can:
cg-clone -s rsync://rsync.kernel.org/pub/scm/git/git.git/
and work in this in your "master" branch with origin "cloned".
You can add another repository:
cg-branch-add pb http://pasky.or.cz/~pasky/dev/git/git-pb.git
cg-pull pb
and if you want to do some modifications based on pb:
cg-branch-add pb-sb pb
ln -s refs/heads/pb-sb .git/HEAD
commit-id pb > .git/HEAD
git-read-tree HEAD
git-checkout-cache -f -q -u -a
and work on your branch.
The last four lines are the work of the hipothetical cg-branch-switch.
Signed-off-by: "Santi Béjar" <sbejar@gmail.com>
---
cg-Xnormid | 6 ++++++
cg-branch-add | 2 +-
cg-clone | 2 +-
cg-commit | 7 ++++++-
cg-init | 9 +++++----
cg-merge | 7 ++++++-
cg-pull | 7 ++++++-
7 files changed, 31 insertions(+), 9 deletions(-)
diff --git a/cg-Xnormid b/cg-Xnormid
--- a/cg-Xnormid
+++ b/cg-Xnormid
@@ -6,6 +6,7 @@
#
# Strings resolve in this order:
# NULL, this, HEAD => .git/HEAD
+# origin => origin of the branch
# <tags>
# <heads>
# short SHA1 (4 or more hex digits)
@@ -19,6 +20,11 @@ id="$1"
if [ ! "$id" ] || [ "$id" = "this" ] || [ "$id" = "HEAD" ]; then
read id < "$_git/HEAD"
+elif [ "$id" = "origin" ]; then
+ branch=$(readlink $_git/HEAD | sed 's@refs/heads/@@')
+ origin=$(cat $_git/branches/$branch)
+ read id < "$_git/refs/heads/$origin"
+
elif [ -r "$_git/refs/tags/$id" ]; then
read id < "$_git/refs/tags/$id"
diff --git a/cg-branch-add b/cg-branch-add
--- a/cg-branch-add
+++ b/cg-branch-add
@@ -40,7 +40,7 @@ location=$2
([ "$name" ] && [ "$location" ]) || usage
(echo $name | egrep -qv '[^a-zA-Z0-9_.@!:-]') || \
die "name contains invalid characters"
-if [ "$name" = "this" ] || [ "$name" = "HEAD" ]; then
+if [ "$name" = "this" ] || [ "$name" = "HEAD" ] || [ "$name" = "origin" ]; then
die "given branch name is reserved"
fi
diff --git a/cg-clone b/cg-clone
--- a/cg-clone
+++ b/cg-clone
@@ -56,4 +56,4 @@ fi
trap "rm -rf $dir" SIGTERM EXIT
cg-init $location || exit $?
trap "" SIGTERM EXIT
-echo "Cloned to $dir/ (origin $location available as branch \"origin\")"
+echo "Cloned to $dir/ (origin $location available as branch \"cloned\")"
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)
+ if [ $sym = origin ] ; then
+ branch=$(readlink $_git/HEAD | sed 's@refs/heads/@@')
+ uri=$(cat $_git/branches/$branch)
+ else
+ uri=$(cat $_git/branches/$sym)
+ fi
[ "$uri" ] || uri="$sym"
echo "$uri" >>$LOGMSG
[ "$msgs" ] && echo "$uri"
diff --git a/cg-init b/cg-init
--- a/cg-init
+++ b/cg-init
@@ -26,15 +26,16 @@ mkdir $_git/branches
touch $_git/refs/heads/master
if [ "$uri" ]; then
- echo "$uri" >$_git/branches/origin
- cg-pull origin || die "pull failed"
+ echo "$uri" >$_git/branches/cloned
+ echo cloned >$_git/branches/master
+ cg-pull cloned || die "pull failed"
- cp $_git/refs/heads/origin $_git/refs/heads/master
+ cp $_git/refs/heads/cloned $_git/refs/heads/master
git-read-tree HEAD
git-checkout-cache -a
git-update-cache --refresh
- echo "Cloned (origin $uri available as branch \"origin\")"
+ echo "Cloned (cloned $uri available as branch \"cloned\")"
else
git-read-tree # Seed the dircache
find * \( -type f -o -type l \) -print0 | xargs -0r cg-add
diff --git a/cg-pull b/cg-pull
--- a/cg-pull
+++ b/cg-pull
@@ -14,10 +14,15 @@ USAGE="cg-pull [BRANCH_NAME]"
name=$1
-[ "$name" ] || { [ -s $_git/refs/heads/origin ] && name=origin; }
+if [ -z "$name" ]; then
+ branch=$(readlink $_git/HEAD | sed 's@refs/heads/@@')
+ name=$(cat $_git/branches/$branch 2>/dev/null)
+fi
[ "$name" ] || die "where to pull from?"
uri=$(cat "$_git/branches/$name" 2>/dev/null) || die "unknown branch: $name"
+[ -e "$_git/branches/$uri" ] && die "local branches cannot pull"
+
rembranch=master
if echo "$uri" | grep -q '#'; then
rembranch=$(echo $uri | cut -d '#' -f 2)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-06-02 10:15 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-02 6:12 Origin handling Santi Béjar
2005-06-02 10:18 ` [COGITO PATCH]Re: " Santi Béjar
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).