Merge branch 'en/update-ref-no-deref-stdin' into maint
"git update-ref" learned to make both "--no-deref" and "--stdin" work at the same time. * en/update-ref-no-deref-stdin: update-ref: allow --no-deref with --stdin update-ref: fix type of update_flags variable to match its usage
This commit is contained in:
commit
50e6df214d
@ -8,7 +8,7 @@ git-update-ref - Update the object name stored in a ref safely
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git update-ref' [-m <reason>] (-d <ref> [<oldvalue>] | [--no-deref] [--create-reflog] <ref> <newvalue> [<oldvalue>] | --stdin [-z])
|
||||
'git update-ref' [-m <reason>] [--no-deref] (-d <ref> [<oldvalue>] | [--create-reflog] <ref> <newvalue> [<oldvalue>] | --stdin [-z])
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
|
@ -14,7 +14,8 @@ static const char * const git_update_ref_usage[] = {
|
||||
};
|
||||
|
||||
static char line_termination = '\n';
|
||||
static int update_flags;
|
||||
static unsigned int update_flags;
|
||||
static unsigned int default_flags;
|
||||
static unsigned create_reflog_flag;
|
||||
static const char *msg;
|
||||
|
||||
@ -205,7 +206,7 @@ static const char *parse_cmd_update(struct ref_transaction *transaction,
|
||||
msg, &err))
|
||||
die("%s", err.buf);
|
||||
|
||||
update_flags = 0;
|
||||
update_flags = default_flags;
|
||||
free(refname);
|
||||
strbuf_release(&err);
|
||||
|
||||
@ -237,7 +238,7 @@ static const char *parse_cmd_create(struct ref_transaction *transaction,
|
||||
msg, &err))
|
||||
die("%s", err.buf);
|
||||
|
||||
update_flags = 0;
|
||||
update_flags = default_flags;
|
||||
free(refname);
|
||||
strbuf_release(&err);
|
||||
|
||||
@ -273,7 +274,7 @@ static const char *parse_cmd_delete(struct ref_transaction *transaction,
|
||||
update_flags, msg, &err))
|
||||
die("%s", err.buf);
|
||||
|
||||
update_flags = 0;
|
||||
update_flags = default_flags;
|
||||
free(refname);
|
||||
strbuf_release(&err);
|
||||
|
||||
@ -302,7 +303,7 @@ static const char *parse_cmd_verify(struct ref_transaction *transaction,
|
||||
update_flags, &err))
|
||||
die("%s", err.buf);
|
||||
|
||||
update_flags = 0;
|
||||
update_flags = default_flags;
|
||||
free(refname);
|
||||
strbuf_release(&err);
|
||||
|
||||
@ -357,7 +358,6 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
|
||||
const char *refname, *oldval;
|
||||
struct object_id oid, oldoid;
|
||||
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")),
|
||||
@ -378,6 +378,11 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
|
||||
|
||||
create_reflog_flag = create_reflog ? REF_FORCE_CREATE_REFLOG : 0;
|
||||
|
||||
if (no_deref) {
|
||||
default_flags = REF_NO_DEREF;
|
||||
update_flags = default_flags;
|
||||
}
|
||||
|
||||
if (read_stdin) {
|
||||
struct strbuf err = STRBUF_INIT;
|
||||
struct ref_transaction *transaction;
|
||||
@ -385,7 +390,7 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
|
||||
transaction = ref_transaction_begin(&err);
|
||||
if (!transaction)
|
||||
die("%s", err.buf);
|
||||
if (delete || no_deref || argc > 0)
|
||||
if (delete || argc > 0)
|
||||
usage_with_options(git_update_ref_usage, options);
|
||||
if (end_null)
|
||||
line_termination = '\0';
|
||||
@ -427,8 +432,6 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
|
||||
die("%s: not a valid old SHA1", oldval);
|
||||
}
|
||||
|
||||
if (no_deref)
|
||||
flags = REF_NO_DEREF;
|
||||
if (delete)
|
||||
/*
|
||||
* For purposes of backwards compatibility, we treat
|
||||
@ -436,9 +439,9 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
|
||||
*/
|
||||
return delete_ref(msg, refname,
|
||||
(oldval && !is_null_oid(&oldoid)) ? &oldoid : NULL,
|
||||
flags);
|
||||
default_flags);
|
||||
else
|
||||
return update_ref(msg, refname, &oid, oldval ? &oldoid : NULL,
|
||||
flags | create_reflog_flag,
|
||||
default_flags | create_reflog_flag,
|
||||
UPDATE_REFS_DIE_ON_ERR);
|
||||
}
|
||||
|
@ -807,6 +807,37 @@ test_expect_success 'stdin delete symref works option no-deref' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'stdin update symref works flag --no-deref' '
|
||||
git symbolic-ref TESTSYMREFONE $b &&
|
||||
git symbolic-ref TESTSYMREFTWO $b &&
|
||||
cat >stdin <<-EOF &&
|
||||
update TESTSYMREFONE $a $b
|
||||
update TESTSYMREFTWO $a $b
|
||||
EOF
|
||||
git update-ref --no-deref --stdin <stdin &&
|
||||
git rev-parse TESTSYMREFONE TESTSYMREFTWO >expect &&
|
||||
git rev-parse $a $a >actual &&
|
||||
test_cmp expect actual &&
|
||||
git rev-parse $m~1 >expect &&
|
||||
git rev-parse $b >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'stdin delete symref works flag --no-deref' '
|
||||
git symbolic-ref TESTSYMREFONE $b &&
|
||||
git symbolic-ref TESTSYMREFTWO $b &&
|
||||
cat >stdin <<-EOF &&
|
||||
delete TESTSYMREFONE $b
|
||||
delete TESTSYMREFTWO $b
|
||||
EOF
|
||||
git update-ref --no-deref --stdin <stdin &&
|
||||
test_must_fail git rev-parse --verify -q TESTSYMREFONE &&
|
||||
test_must_fail git rev-parse --verify -q TESTSYMREFTWO &&
|
||||
git rev-parse $m~1 >expect &&
|
||||
git rev-parse $b >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'stdin delete ref works with right old value' '
|
||||
echo "delete $b $m~1" >stdin &&
|
||||
git update-ref --stdin <stdin &&
|
||||
|
Loading…
Reference in New Issue
Block a user