summaryrefslogtreecommitdiff
path: root/send-pack.c
AgeCommit message (Collapse)Author
2005-08-06Fix ref_newer() in send-pack.Junio C Hamano
When more than two references need to be checked with ref_newer() function, the second and later calls did not work correctly. This was because the later calls found commits retained by the "struct object" layer that still had smudges made by earlier calls. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-05Fix send-pack for non-commitish tags.Junio C Hamano
Again I left the v2.6.11-tree tag behind. My bad. This commit makes sure that we do not barf when pushing a ref that is a non-commitish tag. You can update a remote ref under the following conditions: * You can always use --force. * Creating a brand new ref is OK. * If the remote ref is exactly the same as what you are pushing, it is OK (nothing is pushed). * You can replace a commitish with another commitish which is a descendant of it, if you can verify the ancestry between them; this and the above means you have to have what you are replacing. * Otherwise you cannot update; you need to use --force. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-04Renaming push.Junio C Hamano
This allows git-send-pack to push local refs to a destination repository under different names. Here is the name mapping rules for refs. * If there is no ref mapping on the command line: - if '--all' is specified, it is equivalent to specifying <local> ":" <local> for all the existing local refs on the command line - otherwise, it is equivalent to specifying <ref> ":" <ref> for all the refs that exist on both sides. * <name> is just a shorthand for <name> ":" <name> * <src> ":" <dst> push ref that matches <src> to ref that matches <dst>. - It is an error if <src> does not match exactly one of local refs. - It is an error if <dst> matches more than one remote refs. - If <dst> does not match any remote refs, either - it has to start with "refs/"; <dst> is used as the destination literally in this case. - <src> == <dst> and the ref that matched the <src> must not exist in the set of remote refs; the ref matched <src> locally is used as the name of the destination. For example, - "git-send-pack --all <remote>" works exactly as before; - "git-send-pack <remote> master:upstream" pushes local master to remote ref that matches "upstream". If there is no such ref, it is an error. - "git-send-pack <remote> master:refs/heads/upstream" pushes local master to remote refs/heads/upstream, even when refs/heads/upstream does not exist. - "git-send-pack <remote> master" into an empty remote repository pushes the local ref/heads/master to the remote ref/heads/master. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-03send-pack: handle partial pushes correctly.Junio C Hamano
When pushing into multi-user repository, or when pushing to a repository from a local repository that has rebased branches that has been pruned, the destination repository can have head commits that are missing from the local repository. This should not matter as long as the local head of the branch being pushed is a proper superset of the destination branch, but we ended up trying to run rev-list telling it to exclude objects reachable from those heads missing from the local repository, causing it to barf. Prune those heads from the rev-list parameter list, and make sure we do not try to push a branch whose remote head is something we lack. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-03Make send-pack --all and explicit ref mutually exclusive.Junio C Hamano
send-pack had a confusing misfeature that "send-pack --all master" updated all refs, while "send-pack --all" did not do anything. Make --all and explicit refs mutually exclusive, and make sure "send-pack --all" updates all refs. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-07-27Fix potential send-pack SIGSEGVLinus Torvalds
The check that the source is ahead of the destination incorrectly expects pop_most_recent_commit() to gracefully handle an empty list. Fix by just checking the list itself, rather than the return value of the pop function. [jc: I did the test script that demonstrated the problem] Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-07-19git-send-pack: verify that sender is a proper superset of receiverLinus Torvalds
This should make sure that if you have multiple people pushing to the same tree, they cannot overwrite each others work, but have to merge before being able to update the common reference tree.
2005-07-16Merge three separate "fetch refs" functionsLinus Torvalds
It really just boils down to one "get_remote_heads()" function, and a common "struct ref" structure definition.
2005-07-16git-send-pack: add "--all" option to send all refs to the other sideLinus Torvalds
This affects only refs that the other side doesn't already have. The ones it has are still filtered by the ref selection.
2005-07-14[PATCH] Documentation: send/receive.Junio C Hamano
This adds documentation for 'smarter push' family of commands. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-07-12git-send-pack: Fix duplicate refname matchLinus Torvalds
Cut-and-paste dup noticed by Junio. It's not even harmless, since a match also causes that match to be invalidated, so this made it impossible to update an existing branch by name. I'd only tested the case of "ref doesn't exist at all on the other end", which worked fine.
2005-07-08Teach 'git-send-pack' to send new branches and tags.Linus Torvalds
The protocol always supported it, but send-pack didn't actually know how to tell the other side about a new branch/tag. NOTE! You'll have to name it explicitly on the command line: if you don't name any branches, git-send-pack will default to the branches that already exist.
2005-07-05Add "git_path()" and "head_ref()" helper functions.Linus Torvalds
"git_path()" returns a static pathname pointer into the git directory using a printf-like format specifier. "head_ref()" works like "for_each_ref()", except for just the HEAD.
2005-07-04Move ref path matching to connect.c libraryLinus Torvalds
It's a generic thing for matching refs from the other side.
2005-07-04Factor out the ssh connection stuff from send-pack.cLinus Torvalds
I want to use it for git-fetch-pack too.
2005-07-03Fix gcc warning in send-pack.cLinus Torvalds
send_pack() was declared to return "int" (although nobody cared), but didn't actually return anything.
2005-06-30Do ref matching on the sender side rather than on receiverLinus Torvalds
This makes the receiver always send a full list of valid refs, which will allow us to do better packs, as well as handle creation of new refs. Eventually. Right now we just moved the matching and enabled it. So now you can do git-send-pack host:path branch1 branch2 to only send branches "branch1" and "branch2".
2005-06-30git-send-pack: actually send the object packLinus Torvalds
This concludes this lesson. I've actually successfully sent an update using the git-send-pack command. Probably tons of work still to do, and nasty debugging, but it's now actually potentially useful.
2005-06-30Add comment on what send-pack still needs to doLinus Torvalds
Me tired.
2005-06-30Slow but steady progress on git pack receive/sendLinus Torvalds
2005-06-30git-send-pack: start parsing local/remote reference differencesLinus Torvalds
Right now it just shows which refs it picks up, and whether they are the same or changed on the remote end. Getting there..
2005-06-30Make send/receive-pack be closer to doing something interestingLinus Torvalds
2005-06-30Start of "git-send-pack", the local part of sending off a packLinus Torvalds
Like git-receive-pack, this is only partway done.