Merge branch 'dt/refs-backend-preamble'
In preparation for allowing different "backends" to store the refs in a way different from the traditional "one ref per file in $GIT_DIR or in a $GIT_DIR/packed-refs file" filesystem storage, reduce direct filesystem access to ref-like things like CHERRY_PICK_HEAD from scripts and programs. * dt/refs-backend-preamble: git-stash: use update-ref --create-reflog instead of creating files update-ref and tag: add --create-reflog arg refs: add REF_FORCE_CREATE_REFLOG flag git-reflog: add exists command refs: new public ref function: safe_create_reflog refs: break out check for reflog autocreation refs.c: add err arguments to reflog functions
This commit is contained in:
@ -14,6 +14,7 @@ static const char * const git_update_ref_usage[] = {
|
||||
|
||||
static char line_termination = '\n';
|
||||
static int update_flags;
|
||||
static unsigned create_reflog_flag;
|
||||
static const char *msg;
|
||||
|
||||
/*
|
||||
@ -200,7 +201,8 @@ static const char *parse_cmd_update(struct ref_transaction *transaction,
|
||||
|
||||
if (ref_transaction_update(transaction, refname,
|
||||
new_sha1, have_old ? old_sha1 : NULL,
|
||||
update_flags, msg, &err))
|
||||
update_flags | create_reflog_flag,
|
||||
msg, &err))
|
||||
die("%s", err.buf);
|
||||
|
||||
update_flags = 0;
|
||||
@ -231,7 +233,8 @@ static const char *parse_cmd_create(struct ref_transaction *transaction,
|
||||
die("create %s: extra input: %s", refname, next);
|
||||
|
||||
if (ref_transaction_create(transaction, refname, new_sha1,
|
||||
update_flags, msg, &err))
|
||||
update_flags | create_reflog_flag,
|
||||
msg, &err))
|
||||
die("%s", err.buf);
|
||||
|
||||
update_flags = 0;
|
||||
@ -354,6 +357,7 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
|
||||
unsigned char sha1[20], oldsha1[20];
|
||||
int delete = 0, no_deref = 0, read_stdin = 0, end_null = 0;
|
||||
unsigned int flags = 0;
|
||||
int create_reflog = 0;
|
||||
struct option options[] = {
|
||||
OPT_STRING( 'm', NULL, &msg, N_("reason"), N_("reason of the update")),
|
||||
OPT_BOOL('d', NULL, &delete, N_("delete the reference")),
|
||||
@ -361,6 +365,7 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
|
||||
N_("update <refname> not the one it points to")),
|
||||
OPT_BOOL('z', NULL, &end_null, N_("stdin has NUL-terminated arguments")),
|
||||
OPT_BOOL( 0 , "stdin", &read_stdin, N_("read updates from stdin")),
|
||||
OPT_BOOL( 0 , "create-reflog", &create_reflog, N_("create_reflog")),
|
||||
OPT_END(),
|
||||
};
|
||||
|
||||
@ -370,6 +375,8 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
|
||||
if (msg && !*msg)
|
||||
die("Refusing to perform update with empty message.");
|
||||
|
||||
create_reflog_flag = create_reflog ? REF_FORCE_CREATE_REFLOG : 0;
|
||||
|
||||
if (read_stdin) {
|
||||
struct strbuf err = STRBUF_INIT;
|
||||
struct ref_transaction *transaction;
|
||||
@ -431,5 +438,6 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
|
||||
flags);
|
||||
else
|
||||
return update_ref(msg, refname, sha1, oldval ? oldsha1 : NULL,
|
||||
flags, UPDATE_REFS_DIE_ON_ERR);
|
||||
flags | create_reflog_flag,
|
||||
UPDATE_REFS_DIE_ON_ERR);
|
||||
}
|
||||
|
Reference in New Issue
Block a user