* [PATCH] Add "git push"
@ 2005-04-21 12:43 Matthias Urlichs
2005-04-21 20:41 ` Petr Baudis
0 siblings, 1 reply; 2+ messages in thread
From: Matthias Urlichs @ 2005-04-21 12:43 UTC (permalink / raw)
To: git
This patch adds the ability to "git push", as the obvious converse of
"git pull".
Signed-Off-By: Matthias Urlichs <smurf@smurf.noris.de>
Index: git
===================================================================
--- 42a073eb6b5bb397a3e8768a032463a7fa02e6b9/git (mode:100755 sha1:557122dfb05580e4af2c55767f3d6f92b9110edd)
+++ 265515f9c4f089b1b61e9d2312c4b3babe189618/git (mode:100644 sha1:c32ee037c4dd68f8fa6723cb115644d46810bc89)
@@ -42,6 +42,7 @@
merge [-c] [-b BASE_ID] FROM_ID
patch [COMMIT_ID]
pull [RNAME]
+ push [RNAME]
rm FILE...
seek [COMMIT_ID]
status
@@ -86,6 +87,7 @@
"lsremote") gitlsremote.sh "$@";;
"merge") gitmerge.sh "$@";;
"pull") gitpull.sh "$@";;
+"push") gitpush.sh "$@";;
"patch") gitpatch.sh "$@";;
"rm") gitrm.sh "$@";;
"seek") gitseek.sh "$@";;
--- /dev/null (tree:42a073eb6b5bb397a3e8768a032463a7fa02e6b9)
+++ 265515f9c4f089b1b61e9d2312c4b3babe189618/gitpush.sh (mode:100644 sha1:0a658141991c602ca327edb9ab982d7660d7c665)
@@ -0,0 +1,59 @@
+#!/bin/sh
+#
+# Pushes changes from the local GIT repository to "remote".
+# Copyright (c) Matthias Urlichs, 2005
+#
+# Takes the remote's name.
+
+name=$1
+
+die () {
+ echo gitpush.sh: $@ >&2
+ exit 1
+}
+
+
+[ "$name" ] || name=$(cat .git/tracking 2>/dev/null)
+[ "$name" ] || die "where to push to?"
+uri=$(grep $(echo -e "^$name\t" | sed 's/\./\\./g') .git/remotes | cut -f 2)
+[ "$uri" ] || die "unknown remote"
+
+
+tracking=
+[ -s .git/tracking ] && tracking=$(cat .git/tracking)
+
+orig_head=
+if [ "$tracking" = "$name" ]; then
+ [ -s .git/HEAD.tracked ] && orig_head=$(cat .git/HEAD.tracked)
+else
+ [ -s ".git/heads/$name" ] && orig_head=$(cat ".git/heads/$name")
+fi
+
+rsync $RSYNC_FLAGS -Lr "$uri/HEAD" ".git/HEAD_$name"
+$id=$(cat ".git/HEAD_$name")
+rm .git/HEAD_$name
+
+if [ -z "$id" ] ; then
+ echo "The remote system doesn't have a HEAD file: Doing an initial upload." >&2
+ echo "." >&2
+elif [ "$(cat-file -t "$id")" != "commit" ]; then
+ echo "The remote system has stuff we don't have: pull first!" >&2
+ echo " Commit ID: $id" >&2
+ exit 1
+fi
+
+# We already saw the MOTD, thank you very much.
+rsync $RSYNC_FLAGS --ignore-existing --whole-file \
+ -v -r ".git/objects" "$uri" | grep -v '^MOTD:'
+
+# FIXME: Warn about conflicting tag names?
+rsync $RSYNC_FLAGS --ignore-existing \
+ -v -r ".git/tags" "$uri" 2>/dev/null | grep -v '^MOTD:'
+
+# Finally, update the remote HEAD
+rsync $RSYNC_FLAGS -Lr ".git/HEAD" "$uri/HEAD" \
+ 2>/dev/null | grep -v '^MOTD:'
+
+echo "Now up to date."
+exit
+
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH] Add "git push"
2005-04-21 12:43 [PATCH] Add "git push" Matthias Urlichs
@ 2005-04-21 20:41 ` Petr Baudis
0 siblings, 0 replies; 2+ messages in thread
From: Petr Baudis @ 2005-04-21 20:41 UTC (permalink / raw)
To: Matthias Urlichs; +Cc: git
Dear diary, on Thu, Apr 21, 2005 at 02:43:33PM CEST, I got a letter
where Matthias Urlichs <smurf@smurf.noris.de> told me that...
> This patch adds the ability to "git push", as the obvious converse of
> "git pull".
While lack of locking is a problem for git-pasky too, for this git push
it is a downright disaster waiting to happen. It might be also a good
idea to check for remote 'blocked' file, which must exist and contain
only a "pushtree" line. This is so that no (sensible) real working tree
is attached to it, which would be a disaster for it too.
You probably don't want to allow pushing if your local tree is blocked.
And you want to allow pushing only when HEAD is your ancestor. (Helper
tool wanted for this - we need this in git merge badly too.)
BTW, it contains some unrelated and seemingly irrelevant tracking stuff.
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
C++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-04-21 20:37 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-04-21 12:43 [PATCH] Add "git push" Matthias Urlichs
2005-04-21 20:41 ` Petr Baudis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox