зеркало из https://github.com/microsoft/git.git
git-reflog: add exists command
This is necessary because alternate ref backends might store reflogs somewhere other than .git/logs. Code that now directly manipulates .git/logs should instead go through git-reflog. Signed-off-by: David Turner <dturner@twopensource.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
abd0cd3a30
Коммит
afcb2e7a3b
|
@ -23,6 +23,7 @@ depending on the subcommand:
|
||||||
[--dry-run] [--verbose] [--all | <refs>...]
|
[--dry-run] [--verbose] [--all | <refs>...]
|
||||||
'git reflog delete' [--rewrite] [--updateref]
|
'git reflog delete' [--rewrite] [--updateref]
|
||||||
[--dry-run] [--verbose] ref@\{specifier\}...
|
[--dry-run] [--verbose] ref@\{specifier\}...
|
||||||
|
'git reflog exists' <ref>
|
||||||
|
|
||||||
Reference logs, or "reflogs", record when the tips of branches and
|
Reference logs, or "reflogs", record when the tips of branches and
|
||||||
other references were updated in the local repository. Reflogs are
|
other references were updated in the local repository. Reflogs are
|
||||||
|
@ -52,6 +53,9 @@ argument must be an _exact_ entry (e.g. "`git reflog delete
|
||||||
master@{2}`"). This subcommand is also typically not used directly by
|
master@{2}`"). This subcommand is also typically not used directly by
|
||||||
end users.
|
end users.
|
||||||
|
|
||||||
|
The "exists" subcommand checks whether a ref has a reflog. It exits
|
||||||
|
with zero status if the reflog exists, and non-zero status if it does
|
||||||
|
not.
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
|
|
|
@ -13,6 +13,8 @@ static const char reflog_expire_usage[] =
|
||||||
"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] <refs>...";
|
"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] <refs>...";
|
||||||
static const char reflog_delete_usage[] =
|
static const char reflog_delete_usage[] =
|
||||||
"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] <refs>...";
|
"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] <refs>...";
|
||||||
|
static const char reflog_exists_usage[] =
|
||||||
|
"git reflog exists <ref>";
|
||||||
|
|
||||||
static unsigned long default_reflog_expire;
|
static unsigned long default_reflog_expire;
|
||||||
static unsigned long default_reflog_expire_unreachable;
|
static unsigned long default_reflog_expire_unreachable;
|
||||||
|
@ -699,12 +701,38 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int cmd_reflog_exists(int argc, const char **argv, const char *prefix)
|
||||||
|
{
|
||||||
|
int i, start = 0;
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
const char *arg = argv[i];
|
||||||
|
if (!strcmp(arg, "--")) {
|
||||||
|
i++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (arg[0] == '-')
|
||||||
|
usage(reflog_exists_usage);
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
start = i;
|
||||||
|
|
||||||
|
if (argc - start != 1)
|
||||||
|
usage(reflog_exists_usage);
|
||||||
|
|
||||||
|
if (check_refname_format(argv[start], REFNAME_ALLOW_ONELEVEL))
|
||||||
|
die("invalid ref format: %s", argv[start]);
|
||||||
|
return !reflog_exists(argv[start]);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* main "reflog"
|
* main "reflog"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char reflog_usage[] =
|
static const char reflog_usage[] =
|
||||||
"git reflog [ show | expire | delete ]";
|
"git reflog [ show | expire | delete | exists ]";
|
||||||
|
|
||||||
int cmd_reflog(int argc, const char **argv, const char *prefix)
|
int cmd_reflog(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
|
@ -724,5 +752,8 @@ int cmd_reflog(int argc, const char **argv, const char *prefix)
|
||||||
if (!strcmp(argv[1], "delete"))
|
if (!strcmp(argv[1], "delete"))
|
||||||
return cmd_reflog_delete(argc - 1, argv + 1, prefix);
|
return cmd_reflog_delete(argc - 1, argv + 1, prefix);
|
||||||
|
|
||||||
|
if (!strcmp(argv[1], "exists"))
|
||||||
|
return cmd_reflog_exists(argc - 1, argv + 1, prefix);
|
||||||
|
|
||||||
return cmd_log_reflog(argc, argv, prefix);
|
return cmd_log_reflog(argc, argv, prefix);
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,4 +166,9 @@ test_expect_success 'git log -g -p shows diffs vs. parents' '
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'reflog exists works' '
|
||||||
|
git reflog exists refs/heads/master &&
|
||||||
|
! git reflog exists refs/heads/nonexistent
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Загрузка…
Ссылка в новой задаче