delete_refs(): new function for the refs API
Move the function remove_branches() from builtin/remote.c to refs.c, rename it to delete_refs(), and make it public. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
fc67a0825c
commit
98ffd5ff67
@ -746,25 +746,6 @@ static int mv(int argc, const char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int remove_branches(struct string_list *branches)
|
|
||||||
{
|
|
||||||
struct strbuf err = STRBUF_INIT;
|
|
||||||
int i, result = 0;
|
|
||||||
|
|
||||||
if (repack_without_refs(branches, &err))
|
|
||||||
result |= error("%s", err.buf);
|
|
||||||
strbuf_release(&err);
|
|
||||||
|
|
||||||
for (i = 0; i < branches->nr; i++) {
|
|
||||||
const char *refname = branches->items[i].string;
|
|
||||||
|
|
||||||
if (delete_ref(refname, NULL, 0))
|
|
||||||
result |= error(_("Could not remove branch %s"), refname);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rm(int argc, const char **argv)
|
static int rm(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
struct option options[] = {
|
struct option options[] = {
|
||||||
@ -821,7 +802,7 @@ static int rm(int argc, const char **argv)
|
|||||||
strbuf_release(&buf);
|
strbuf_release(&buf);
|
||||||
|
|
||||||
if (!result)
|
if (!result)
|
||||||
result = remove_branches(&branches);
|
result = delete_refs(&branches);
|
||||||
string_list_clear(&branches, 0);
|
string_list_clear(&branches, 0);
|
||||||
|
|
||||||
if (skipped.nr) {
|
if (skipped.nr) {
|
||||||
|
19
refs.c
19
refs.c
@ -2830,6 +2830,25 @@ int delete_ref(const char *refname, const unsigned char *old_sha1,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int delete_refs(struct string_list *refnames)
|
||||||
|
{
|
||||||
|
struct strbuf err = STRBUF_INIT;
|
||||||
|
int i, result = 0;
|
||||||
|
|
||||||
|
if (repack_without_refs(refnames, &err))
|
||||||
|
result |= error("%s", err.buf);
|
||||||
|
strbuf_release(&err);
|
||||||
|
|
||||||
|
for (i = 0; i < refnames->nr; i++) {
|
||||||
|
const char *refname = refnames->items[i].string;
|
||||||
|
|
||||||
|
if (delete_ref(refname, NULL, 0))
|
||||||
|
result |= error(_("Could not remove branch %s"), refname);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* People using contrib's git-new-workdir have .git/logs/refs ->
|
* People using contrib's git-new-workdir have .git/logs/refs ->
|
||||||
* /some/other/path/.git/logs/refs, and that may live on another device.
|
* /some/other/path/.git/logs/refs, and that may live on another device.
|
||||||
|
7
refs.h
7
refs.h
@ -212,6 +212,13 @@ extern int reflog_exists(const char *refname);
|
|||||||
extern int delete_ref(const char *refname, const unsigned char *old_sha1,
|
extern int delete_ref(const char *refname, const unsigned char *old_sha1,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Delete the specified references. If there are any problems, emit
|
||||||
|
* errors but attempt to keep going (i.e., the deletes are not done in
|
||||||
|
* an all-or-nothing transaction).
|
||||||
|
*/
|
||||||
|
extern int delete_refs(struct string_list *refnames);
|
||||||
|
|
||||||
/** Delete a reflog */
|
/** Delete a reflog */
|
||||||
extern int delete_reflog(const char *refname);
|
extern int delete_reflog(const char *refname);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user