merge(3p/git): Merge git subtree at v2.29.2
This also bumps the stable nixpkgs to 20.09 as of 2020-11-21, because there is some breakage in the git build related to the netrc credentials helper which someone has taken care of in nixpkgs. The stable channel is not used for anything other than git, so this should be fine. Change-Id: I3575a19dab09e1e9556cf8231d717de9890484fb
This commit is contained in:
parent
082c006c04
commit
f4609b896f
1485 changed files with 241535 additions and 109418 deletions
103
third_party/git/refs/files-backend.c
vendored
103
third_party/git/refs/files-backend.c
vendored
|
|
@ -38,13 +38,6 @@
|
|||
*/
|
||||
#define REF_NEEDS_COMMIT (1 << 6)
|
||||
|
||||
/*
|
||||
* Used as a flag in ref_update::flags when we want to log a ref
|
||||
* update but not actually perform it. This is used when a symbolic
|
||||
* ref update is split up.
|
||||
*/
|
||||
#define REF_LOG_ONLY (1 << 7)
|
||||
|
||||
/*
|
||||
* Used as a flag in ref_update::flags when the ref_update was via an
|
||||
* update to HEAD.
|
||||
|
|
@ -67,7 +60,6 @@ struct files_ref_store {
|
|||
struct ref_store base;
|
||||
unsigned int store_flags;
|
||||
|
||||
char *gitdir;
|
||||
char *gitcommondir;
|
||||
|
||||
struct ref_cache *loose;
|
||||
|
|
@ -94,18 +86,17 @@ static struct ref_store *files_ref_store_create(const char *gitdir,
|
|||
struct ref_store *ref_store = (struct ref_store *)refs;
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
|
||||
ref_store->gitdir = xstrdup(gitdir);
|
||||
base_ref_store_init(ref_store, &refs_be_files);
|
||||
refs->store_flags = flags;
|
||||
|
||||
refs->gitdir = xstrdup(gitdir);
|
||||
get_common_dir_noenv(&sb, gitdir);
|
||||
refs->gitcommondir = strbuf_detach(&sb, NULL);
|
||||
strbuf_addf(&sb, "%s/packed-refs", refs->gitcommondir);
|
||||
refs->packed_ref_store = packed_ref_store_create(sb.buf, flags);
|
||||
strbuf_release(&sb);
|
||||
|
||||
chdir_notify_reparent("files-backend $GIT_DIR",
|
||||
&refs->gitdir);
|
||||
chdir_notify_reparent("files-backend $GIT_DIR", &refs->base.gitdir);
|
||||
chdir_notify_reparent("files-backend $GIT_COMMONDIR",
|
||||
&refs->gitcommondir);
|
||||
|
||||
|
|
@ -176,7 +167,7 @@ static void files_reflog_path(struct files_ref_store *refs,
|
|||
switch (ref_type(refname)) {
|
||||
case REF_TYPE_PER_WORKTREE:
|
||||
case REF_TYPE_PSEUDOREF:
|
||||
strbuf_addf(sb, "%s/logs/%s", refs->gitdir, refname);
|
||||
strbuf_addf(sb, "%s/logs/%s", refs->base.gitdir, refname);
|
||||
break;
|
||||
case REF_TYPE_OTHER_PSEUDOREF:
|
||||
case REF_TYPE_MAIN_PSEUDOREF:
|
||||
|
|
@ -198,7 +189,7 @@ static void files_ref_path(struct files_ref_store *refs,
|
|||
switch (ref_type(refname)) {
|
||||
case REF_TYPE_PER_WORKTREE:
|
||||
case REF_TYPE_PSEUDOREF:
|
||||
strbuf_addf(sb, "%s/%s", refs->gitdir, refname);
|
||||
strbuf_addf(sb, "%s/%s", refs->base.gitdir, refname);
|
||||
break;
|
||||
case REF_TYPE_MAIN_PSEUDOREF:
|
||||
if (!skip_prefix(refname, "main-worktree/", &refname))
|
||||
|
|
@ -360,7 +351,6 @@ static int files_read_raw_ref(struct ref_store *ref_store,
|
|||
struct strbuf sb_path = STRBUF_INIT;
|
||||
const char *path;
|
||||
const char *buf;
|
||||
const char *p;
|
||||
struct stat st;
|
||||
int fd;
|
||||
int ret = -1;
|
||||
|
|
@ -465,30 +455,8 @@ stat_ref:
|
|||
close(fd);
|
||||
strbuf_rtrim(&sb_contents);
|
||||
buf = sb_contents.buf;
|
||||
if (starts_with(buf, "ref:")) {
|
||||
buf += 4;
|
||||
while (isspace(*buf))
|
||||
buf++;
|
||||
|
||||
strbuf_reset(referent);
|
||||
strbuf_addstr(referent, buf);
|
||||
*type |= REF_ISSYMREF;
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Please note that FETCH_HEAD has additional
|
||||
* data after the sha.
|
||||
*/
|
||||
if (parse_oid_hex(buf, oid, &p) ||
|
||||
(*p != '\0' && !isspace(*p))) {
|
||||
*type |= REF_ISBROKEN;
|
||||
errno = EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
ret = parse_loose_ref_contents(buf, oid, referent, type);
|
||||
|
||||
out:
|
||||
save_errno = errno;
|
||||
|
|
@ -498,6 +466,32 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int parse_loose_ref_contents(const char *buf, struct object_id *oid,
|
||||
struct strbuf *referent, unsigned int *type)
|
||||
{
|
||||
const char *p;
|
||||
if (skip_prefix(buf, "ref:", &buf)) {
|
||||
while (isspace(*buf))
|
||||
buf++;
|
||||
|
||||
strbuf_reset(referent);
|
||||
strbuf_addstr(referent, buf);
|
||||
*type |= REF_ISSYMREF;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* FETCH_HEAD has additional data after the sha.
|
||||
*/
|
||||
if (parse_oid_hex(buf, oid, &p) ||
|
||||
(*p != '\0' && !isspace(*p))) {
|
||||
*type |= REF_ISBROKEN;
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void unlock_ref(struct ref_lock *lock)
|
||||
{
|
||||
rollback_lock_file(&lock->lk);
|
||||
|
|
@ -1327,7 +1321,7 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
|
|||
{
|
||||
struct files_ref_store *refs =
|
||||
files_downcast(ref_store, REF_STORE_WRITE, "rename_ref");
|
||||
struct object_id oid, orig_oid;
|
||||
struct object_id orig_oid;
|
||||
int flag = 0, logmoved = 0;
|
||||
struct ref_lock *lock;
|
||||
struct stat loginfo;
|
||||
|
|
@ -1395,7 +1389,7 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
|
|||
*/
|
||||
if (!copy && !refs_read_ref_full(&refs->base, newrefname,
|
||||
RESOLVE_REF_READING | RESOLVE_REF_NO_RECURSE,
|
||||
&oid, NULL) &&
|
||||
NULL, NULL) &&
|
||||
refs_delete_ref(&refs->base, NULL, newrefname,
|
||||
NULL, REF_NO_DEREF)) {
|
||||
if (errno == EISDIR) {
|
||||
|
|
@ -1629,8 +1623,10 @@ static int log_ref_write_fd(int fd, const struct object_id *old_oid,
|
|||
int ret = 0;
|
||||
|
||||
strbuf_addf(&sb, "%s %s %s", oid_to_hex(old_oid), oid_to_hex(new_oid), committer);
|
||||
if (msg && *msg)
|
||||
copy_reflog_msg(&sb, msg);
|
||||
if (msg && *msg) {
|
||||
strbuf_addch(&sb, '\t');
|
||||
strbuf_addstr(&sb, msg);
|
||||
}
|
||||
strbuf_addch(&sb, '\n');
|
||||
if (write_in_full(fd, sb.buf, sb.len) < 0)
|
||||
ret = -1;
|
||||
|
|
@ -2198,12 +2194,11 @@ static struct ref_iterator *files_reflog_iterator_begin(struct ref_store *ref_st
|
|||
files_downcast(ref_store, REF_STORE_READ,
|
||||
"reflog_iterator_begin");
|
||||
|
||||
if (!strcmp(refs->gitdir, refs->gitcommondir)) {
|
||||
if (!strcmp(refs->base.gitdir, refs->gitcommondir)) {
|
||||
return reflog_iterator_begin(ref_store, refs->gitcommondir);
|
||||
} else {
|
||||
return merge_ref_iterator_begin(
|
||||
0,
|
||||
reflog_iterator_begin(ref_store, refs->gitdir),
|
||||
0, reflog_iterator_begin(ref_store, refs->base.gitdir),
|
||||
reflog_iterator_begin(ref_store, refs->gitcommondir),
|
||||
reflog_iterator_select, refs);
|
||||
}
|
||||
|
|
@ -2566,17 +2561,19 @@ static void files_transaction_cleanup(struct files_ref_store *refs,
|
|||
}
|
||||
}
|
||||
|
||||
if (backend_data->packed_transaction &&
|
||||
ref_transaction_abort(backend_data->packed_transaction, &err)) {
|
||||
error("error aborting transaction: %s", err.buf);
|
||||
strbuf_release(&err);
|
||||
if (backend_data) {
|
||||
if (backend_data->packed_transaction &&
|
||||
ref_transaction_abort(backend_data->packed_transaction, &err)) {
|
||||
error("error aborting transaction: %s", err.buf);
|
||||
strbuf_release(&err);
|
||||
}
|
||||
|
||||
if (backend_data->packed_refs_locked)
|
||||
packed_refs_unlock(refs->packed_ref_store);
|
||||
|
||||
free(backend_data);
|
||||
}
|
||||
|
||||
if (backend_data->packed_refs_locked)
|
||||
packed_refs_unlock(refs->packed_ref_store);
|
||||
|
||||
free(backend_data);
|
||||
|
||||
transaction->state = REF_TRANSACTION_CLOSED;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue