Re: [PATCH] git push --track
- From
Tay Ray Chuan <rctay89@gmail.com>
- Date
- Jan 14, 2010, 05:21 UTC
- Message-ID
- <be6fef0d1001132121w4e25c7f0j760d71c136012401@mail.gmail.com>
- In-Reply-To
- <op.u6haiiiog402ra@nb-04>
Hi,
generally, it would be better if you could add some tests for this.
If I'm not wrong, the place to put it would be t5516-fetch-push.sh.
On Wed, Jan 13, 2010 at 11:55 PM, Rudolf Polzer <divVerent@alientrap.org> wrote:
> On Wed, 13 Jan 2010 16:43:10 +0100, Ilari Liusvaara > <ilari.liusvaara@elisanet.fi> wrote:
please don't drop people from the Cc list - especially when you're replying to somebody!
Show 5 quoted lines
> From 123598516c7d4e1f83591e8dae64e2c76dc87c90 Mon Sep 17 00:00:00 2001 > From: Rudolf Polzer <divVerent@alientrap.org> > Date: Wed, 13 Jan 2010 16:42:04 +0100 > Subject: [PATCH 1/2] Add a feature "git push --track" to automatically make > the pushed branches tracking
Each patch should be sent out in its own mail. (As Matthieu has recommended, you should check out Documentation/SubmittingPatches.)
Show 19 quoted lines
> static const char * const push_usage[] = {
> @@ -115,6 +116,36 @@ static int push_with_options(struct transport
> *transport, int flags)
> fprintf(stderr, "Pushing to %s\n", transport->url);
> err = transport_push(transport, refspec_nr, refspec, flags,
> &nonfastforward);
> + if (err == 0 && flags & TRANSPORT_PUSH_TRACK) {
> + struct ref *remote_refs =
> + transport->get_refs_list(transport, 1);
> + struct ref *local_refs = get_local_heads();
> + int match_flags = 0;
> + if (flags & TRANSPORT_PUSH_ALL)
> + match_flags |= MATCH_REFS_ALL;
> + if (flags & TRANSPORT_PUSH_MIRROR)
> + match_flags |= MATCH_REFS_MIRROR;
> + if(!(flags & TRANSPORT_PUSH_DRY_RUN))
> + if(!match_refs(local_refs, &remote_refs, refspec_nr,
> refspec,
> + match_flags)) {It would be better if you can move this to transport.c::transport_push(). It repeats what's already there, so you don't have to configure match_flags, nor call match_refs, etc.
> + struct ref *next = remote_refs;
> + while(next) {
> [snip]
> + next = next->next;In most places, this is done like this:
struct ref* ref;
for (ref = remote_refs; ref; ref = ref->next) {
...
}-- Cheers, Ray Chuan