From: Jay Soffian Date: Tue, 19 Feb 2008 13:59:22 GMT Subject: Re: [PATCH] branch: optionally setup branch.*.merge from upstream local branches Message-ID: <76718490802190559m3f5def8ej667d4d4a1ae8e6c7@mail.gmail.com> In-Reply-To: On Feb 19, 2008 5:55 AM, Johannes Schindelin wrote: > > Ah, yes. But I still maintain that xstrdup()ing orig_ref only to free it > later is ugly. Why not have the "tracking.src ? tracking.src : orig_ref" > as I suggested? The free() obviously can stay, since it will say > "free(NULL)" in the case of tracking.matches == 0. How about this? static int setup_tracking(const char *new_ref, const char *orig_ref, enum branch_track track) { char key[1024]; struct tracking tracking; if (strlen(new_ref) > 1024 - 7 - 7 - 1) return error("Tracking not set up: name too long: %s", new_ref); memset(&tracking, 0, sizeof(tracking)); tracking.spec.dst = (char *)orig_ref; if (for_each_remote(find_tracked_branch, &tracking)) return 1; if (!tracking.matches && track != BRANCH_TRACK_ALWAYS) return 1; if (tracking.matches > 1) return error("Not tracking: ambiguous information for ref %s", orig_ref); sprintf(key, "branch.%s.remote", new_ref); git_config_set(key, tracking.remote ? tracking.remote : "."); sprintf(key, "branch.%s.merge", new_ref); git_config_set(key, tracking.src ? tracking.src : orig_ref); free(tracking.src); printf("Branch %s set up to track %s branch %s.\n", new_ref, tracking.remote ? "remote" : "local", orig_ref); return 0; } j.