diff options
Diffstat (limited to 'remote.c')
-rw-r--r-- | remote.c | 130 |
1 files changed, 66 insertions, 64 deletions
@@ -256,7 +256,7 @@ static void read_remotes_file(struct remote *remote) if (!f) return; remote->origin = REMOTE_REMOTES; - while (strbuf_getline(&buf, f, '\n') != EOF) { + while (strbuf_getline(&buf, f) != EOF) { const char *v; strbuf_rtrim(&buf); @@ -281,7 +281,8 @@ static void read_branches_file(struct remote *remote) if (!f) return; - strbuf_getline(&buf, f, '\n'); + strbuf_getline_lf(&buf, f); + fclose(f); strbuf_trim(&buf); if (!buf.len) { strbuf_release(&buf); @@ -427,6 +428,9 @@ static int handle_config(const char *key, const char *value, void *cb) } else if (!strcmp(subkey, ".proxy")) { return git_config_string((const char **)&remote->http_proxy, key, value); + } else if (!strcmp(subkey, ".proxyauthmethod")) { + return git_config_string((const char **)&remote->http_proxy_authmethod, + key, value); } else if (!strcmp(subkey, ".vcs")) { return git_config_string(&remote->foreign_vcs, key, value); } @@ -455,7 +459,7 @@ static void alias_all_urls(void) static void read_config(void) { static int loaded; - unsigned char sha1[20]; + struct object_id oid; const char *head_ref; int flag; @@ -464,7 +468,7 @@ static void read_config(void) loaded = 1; current_branch = NULL; - head_ref = resolve_ref_unsafe("HEAD", 0, sha1, &flag); + head_ref = resolve_ref_unsafe("HEAD", 0, oid.hash, &flag); if (head_ref && (flag & REF_ISSYMREF) && skip_prefix(head_ref, "refs/heads/", &head_ref)) { current_branch = make_branch(head_ref, 0); @@ -543,12 +547,12 @@ static struct refspec *parse_refspec_internal(int nr_refspec, const char **refsp flags = REFNAME_ALLOW_ONELEVEL | (is_glob ? REFNAME_REFSPEC_PATTERN : 0); if (fetch) { - unsigned char unused[40]; + struct object_id unused; /* LHS */ if (!*rs[i].src) ; /* empty is ok; it means "HEAD" */ - else if (llen == 40 && !get_sha1_hex(rs[i].src, unused)) + else if (llen == GIT_SHA1_HEXSZ && !get_oid_hex(rs[i].src, &unused)) rs[i].exact_sha1 = 1; /* ok */ else if (!check_refname_format(rs[i].src, flags)) ; /* valid looking ref is ok */ @@ -1074,14 +1078,14 @@ static void tail_link_ref(struct ref *ref, struct ref ***tail) static struct ref *alloc_delete_ref(void) { struct ref *ref = alloc_ref("(delete)"); - hashclr(ref->new_sha1); + oidclr(&ref->new_oid); return ref; } static int try_explicit_object_name(const char *name, struct ref **match) { - unsigned char sha1[20]; + struct object_id oid; if (!*name) { if (match) @@ -1089,12 +1093,12 @@ static int try_explicit_object_name(const char *name, return 0; } - if (get_sha1(name, sha1)) + if (get_sha1(name, oid.hash)) return -1; if (match) { *match = alloc_ref(name); - hashcpy((*match)->new_sha1, sha1); + oidcpy(&(*match)->new_oid, &oid); } return 0; } @@ -1109,10 +1113,10 @@ static struct ref *make_linked_ref(const char *name, struct ref ***tail) static char *guess_ref(const char *name, struct ref *peer) { struct strbuf buf = STRBUF_INIT; - unsigned char sha1[20]; + struct object_id oid; const char *r = resolve_ref_unsafe(peer->name, RESOLVE_REF_READING, - sha1, NULL); + oid.hash, NULL); if (!r) return NULL; @@ -1170,12 +1174,12 @@ static int match_explicit(struct ref *src, struct ref *dst, return -1; if (!dst_value) { - unsigned char sha1[20]; + struct object_id oid; int flag; dst_value = resolve_ref_unsafe(matched_src->name, RESOLVE_REF_READING, - sha1, &flag); + oid.hash, &flag); if (!dst_value || ((flag & REF_ISSYMREF) && !starts_with(dst_value, "refs/heads/"))) @@ -1189,7 +1193,7 @@ static int match_explicit(struct ref *src, struct ref *dst, case 0: if (starts_with(dst_value, "refs/")) matched_dst = make_linked_ref(dst_value, dst_tail); - else if (is_null_sha1(matched_src->new_sha1)) + else if (is_null_oid(&matched_src->new_oid)) error("unable to delete '%s': remote ref does not exist", dst_value); else if ((dst_guess = guess_ref(dst_value, matched_src))) @@ -1291,13 +1295,13 @@ struct tips { int nr, alloc; }; -static void add_to_tips(struct tips *tips, const unsigned char *sha1) +static void add_to_tips(struct tips *tips, const struct object_id *oid) { struct commit *commit; - if (is_null_sha1(sha1)) + if (is_null_oid(oid)) return; - commit = lookup_commit_reference_gently(sha1, 1); + commit = lookup_commit_reference_gently(oid->hash, 1); if (!commit || (commit->object.flags & TMP_MARK)) return; commit->object.flags |= TMP_MARK; @@ -1320,10 +1324,10 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds memset(&sent_tips, 0, sizeof(sent_tips)); for (ref = *dst; ref; ref = ref->next) { if (ref->peer_ref && - !is_null_sha1(ref->peer_ref->new_sha1)) - add_to_tips(&sent_tips, ref->peer_ref->new_sha1); + !is_null_oid(&ref->peer_ref->new_oid)) + add_to_tips(&sent_tips, &ref->peer_ref->new_oid); else - add_to_tips(&sent_tips, ref->old_sha1); + add_to_tips(&sent_tips, &ref->old_oid); if (starts_with(ref->name, "refs/tags/")) string_list_append(&dst_tag, ref->name); } @@ -1337,7 +1341,7 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds continue; /* not a tag */ if (string_list_has_string(&dst_tag, ref->name)) continue; /* they already have it */ - if (sha1_object_info(ref->new_sha1, NULL) != OBJ_TAG) + if (sha1_object_info(ref->new_oid.hash, NULL) != OBJ_TAG) continue; /* be conservative */ item = string_list_append(&src_tag, ref->name); item->util = ref; @@ -1357,9 +1361,9 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds struct ref *dst_ref; struct commit *commit; - if (is_null_sha1(ref->new_sha1)) + if (is_null_oid(&ref->new_oid)) continue; - commit = lookup_commit_reference_gently(ref->new_sha1, 1); + commit = lookup_commit_reference_gently(ref->new_oid.hash, 1); if (!commit) /* not pushing a commit, which is not an error */ continue; @@ -1373,7 +1377,7 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds /* Add it in */ dst_ref = make_linked_ref(ref->name, dst_tail); - hashcpy(dst_ref->new_sha1, ref->new_sha1); + oidcpy(&dst_ref->new_oid, &ref->new_oid); dst_ref->peer_ref = copy_ref(ref); } } @@ -1480,7 +1484,7 @@ int match_push_refs(struct ref *src, struct ref **dst, /* Create a new one and link it */ dst_peer = make_linked_ref(dst_name, &dst_tail); - hashcpy(dst_peer->new_sha1, ref->new_sha1); + oidcpy(&dst_peer->new_oid, &ref->new_oid); string_list_insert(&dst_ref_index, dst_peer->name)->util = dst_peer; } @@ -1532,13 +1536,13 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror, int reject_reason = 0; if (ref->peer_ref) - hashcpy(ref->new_sha1, ref->peer_ref->new_sha1); + oidcpy(&ref->new_oid, &ref->peer_ref->new_oid); else if (!send_mirror) continue; - ref->deletion = is_null_sha1(ref->new_sha1); + ref->deletion = is_null_oid(&ref->new_oid); if (!ref->deletion && - !hashcmp(ref->old_sha1, ref->new_sha1)) { + !oidcmp(&ref->old_oid, &ref->new_oid)) { ref->status = REF_STATUS_UPTODATE; continue; } @@ -1557,7 +1561,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror, */ if (ref->expect_old_sha1) { if (ref->expect_old_no_trackback || - hashcmp(ref->old_sha1, ref->old_sha1_expect)) + oidcmp(&ref->old_oid, &ref->old_oid_expect)) reject_reason = REF_STATUS_REJECT_STALE; } @@ -1581,15 +1585,15 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror, * passing the --force argument */ - else if (!ref->deletion && !is_null_sha1(ref->old_sha1)) { + else if (!ref->deletion && !is_null_oid(&ref->old_oid)) { if (starts_with(ref->name, "refs/tags/")) reject_reason = REF_STATUS_REJECT_ALREADY_EXISTS; - else if (!has_sha1_file(ref->old_sha1)) + else if (!has_object_file(&ref->old_oid)) reject_reason = REF_STATUS_REJECT_FETCH_FIRST; - else if (!lookup_commit_reference_gently(ref->old_sha1, 1) || - !lookup_commit_reference_gently(ref->new_sha1, 1)) + else if (!lookup_commit_reference_gently(ref->old_oid.hash, 1) || + !lookup_commit_reference_gently(ref->new_oid.hash, 1)) reject_reason = REF_STATUS_REJECT_NEEDS_FORCE; - else if (!ref_newer(ref->new_sha1, ref->old_sha1)) + else if (!ref_newer(&ref->new_oid, &ref->old_oid)) reject_reason = REF_STATUS_REJECT_NONFASTFORWARD; } @@ -1608,7 +1612,7 @@ static void set_merge(struct branch *ret) { struct remote *remote; char *ref; - unsigned char sha1[20]; + struct object_id oid; int i; if (!ret) @@ -1634,7 +1638,7 @@ static void set_merge(struct branch *ret) strcmp(ret->remote_name, ".")) continue; if (dwim_ref(ret->merge_name[i], strlen(ret->merge_name[i]), - sha1, &ref) == 1) + oid.hash, &ref) == 1) ret->merge[i]->dst = ref; else ret->merge[i]->dst = xstrdup(ret->merge_name[i]); @@ -1794,10 +1798,10 @@ const char *branch_get_push(struct branch *branch, struct strbuf *err) static int ignore_symref_update(const char *refname) { - unsigned char sha1[20]; + struct object_id oid; int flag; - if (!resolve_ref_unsafe(refname, 0, sha1, &flag)) + if (!resolve_ref_unsafe(refname, 0, oid.hash, &flag)) return 0; /* non-existing refs are OK */ return (flag & REF_ISSYMREF); } @@ -1888,7 +1892,7 @@ int get_fetch_map(const struct ref *remote_refs, if (refspec->exact_sha1) { ref_map = alloc_ref(name); - get_sha1_hex(name, ref_map->old_sha1); + get_oid_hex(name, &ref_map->old_oid); } else { ref_map = get_remote_ref(remote_refs, name); } @@ -1929,7 +1933,7 @@ int resolve_remote_symref(struct ref *ref, struct ref *list) return 0; for (; list; list = list->next) if (!strcmp(ref->symref, list->name)) { - hashcpy(ref->old_sha1, list->old_sha1); + oidcpy(&ref->old_oid, &list->old_oid); return 0; } return 1; @@ -1938,14 +1942,12 @@ int resolve_remote_symref(struct ref *ref, struct ref *list) static void unmark_and_free(struct commit_list *list, unsigned int mark) { while (list) { - struct commit_list *temp = list; - temp->item->object.flags &= ~mark; - list = temp->next; - free(temp); + struct commit *commit = pop_commit(&list); + commit->object.flags &= ~mark; } } -int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1) +int ref_newer(const struct object_id *new_oid, const struct object_id *old_oid) { struct object *o; struct commit *old, *new; @@ -1956,12 +1958,12 @@ int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1) * Both new and old must be commit-ish and new is descendant of * old. Otherwise we require --force. */ - o = deref_tag(parse_object(old_sha1), NULL, 0); + o = deref_tag(parse_object(old_oid->hash), NULL, 0); if (!o || o->type != OBJ_COMMIT) return 0; old = (struct commit *) o; - o = deref_tag(parse_object(new_sha1), NULL, 0); + o = deref_tag(parse_object(new_oid->hash), NULL, 0); if (!o || o->type != OBJ_COMMIT) return 0; new = (struct commit *) o; @@ -1996,7 +1998,7 @@ int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1) int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs, const char **upstream_name) { - unsigned char sha1[20]; + struct object_id oid; struct commit *ours, *theirs; struct rev_info revs; const char *base; @@ -2010,15 +2012,15 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs, return -1; /* Cannot stat if what we used to build on no longer exists */ - if (read_ref(base, sha1)) + if (read_ref(base, oid.hash)) return -1; - theirs = lookup_commit_reference(sha1); + theirs = lookup_commit_reference(oid.hash); if (!theirs) return -1; - if (read_ref(branch->refname, sha1)) + if (read_ref(branch->refname, oid.hash)) return -1; - ours = lookup_commit_reference(sha1); + ours = lookup_commit_reference(oid.hash); if (!ours) return -1; @@ -2032,8 +2034,8 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs, argv_array_push(&argv, ""); /* ignored */ argv_array_push(&argv, "--left-right"); argv_array_pushf(&argv, "%s...%s", - sha1_to_hex(ours->object.sha1), - sha1_to_hex(theirs->object.sha1)); + oid_to_hex(&ours->object.oid), + oid_to_hex(&theirs->object.oid)); argv_array_push(&argv, "--"); init_revisions(&revs, NULL); @@ -2141,7 +2143,7 @@ static int one_local_ref(const char *refname, const struct object_id *oid, len = strlen(refname) + 1; ref = xcalloc(1, sizeof(*ref) + len); - hashcpy(ref->new_sha1, oid->hash); + oidcpy(&ref->new_oid, oid); memcpy(ref->name, refname, len); **local_tail = ref; *local_tail = &ref->next; @@ -2178,7 +2180,7 @@ struct ref *guess_remote_head(const struct ref *head, /* If refs/heads/master could be right, it is. */ if (!all) { r = find_ref_by_name(refs, "refs/heads/master"); - if (r && !hashcmp(r->old_sha1, head->old_sha1)) + if (r && !oidcmp(&r->old_oid, &head->old_oid)) return copy_ref(r); } @@ -2186,7 +2188,7 @@ struct ref *guess_remote_head(const struct ref *head, for (r = refs; r; r = r->next) { if (r != head && starts_with(r->name, "refs/heads/") && - !hashcmp(r->old_sha1, head->old_sha1)) { + !oidcmp(&r->old_oid, &head->old_oid)) { *tail = copy_ref(r); tail = &((*tail)->next); if (!all) @@ -2234,7 +2236,7 @@ static int get_stale_heads_cb(const char *refname, const struct object_id *oid, if (stale) { struct ref *ref = make_linked_ref(refname, &info->stale_refs_tail); - hashcpy(ref->new_sha1, oid->hash); + oidcpy(&ref->new_oid, oid); } clean_exit: @@ -2329,14 +2331,14 @@ int is_empty_cas(const struct push_cas_option *cas) * If we cannot do so, return negative to signal an error. */ static int remote_tracking(struct remote *remote, const char *refname, - unsigned char sha1[20]) + struct object_id *oid) { char *dst; dst = apply_refspecs(remote->fetch, remote->fetch_refspec_nr, refname); if (!dst) return -1; /* no tracking ref for refname at remote */ - if (read_ref(dst, sha1)) + if (read_ref(dst, oid->hash)) return -1; /* we know what the tracking ref is but we cannot read it */ return 0; } @@ -2354,8 +2356,8 @@ static void apply_cas(struct push_cas_option *cas, continue; ref->expect_old_sha1 = 1; if (!entry->use_tracking) - hashcpy(ref->old_sha1_expect, cas->entry[i].expect); - else if (remote_tracking(remote, ref->name, ref->old_sha1_expect)) + hashcpy(ref->old_oid_expect.hash, cas->entry[i].expect); + else if (remote_tracking(remote, ref->name, &ref->old_oid_expect)) ref->expect_old_no_trackback = 1; return; } @@ -2365,7 +2367,7 @@ static void apply_cas(struct push_cas_option *cas, return; ref->expect_old_sha1 = 1; - if (remote_tracking(remote, ref->name, ref->old_sha1_expect)) + if (remote_tracking(remote, ref->name, &ref->old_oid_expect)) ref->expect_old_no_trackback = 1; } |