Browse Source

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>
maint
Michael Haggerty 10 years ago committed by Junio C Hamano
parent
commit
98ffd5ff67
  1. 21
      builtin/remote.c
  2. 19
      refs.c
  3. 7
      refs.h

21
builtin/remote.c

@ -746,25 +746,6 @@ static int mv(int argc, const char **argv) @@ -746,25 +746,6 @@ static int mv(int argc, const char **argv)
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)
{
struct option options[] = {
@ -821,7 +802,7 @@ static int rm(int argc, const char **argv) @@ -821,7 +802,7 @@ static int rm(int argc, const char **argv)
strbuf_release(&buf);

if (!result)
result = remove_branches(&branches);
result = delete_refs(&branches);
string_list_clear(&branches, 0);

if (skipped.nr) {

19
refs.c

@ -2830,6 +2830,25 @@ int delete_ref(const char *refname, const unsigned char *old_sha1, @@ -2830,6 +2830,25 @@ int delete_ref(const char *refname, const unsigned char *old_sha1,
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 ->
* /some/other/path/.git/logs/refs, and that may live on another device.

7
refs.h

@ -212,6 +212,13 @@ extern int reflog_exists(const char *refname); @@ -212,6 +212,13 @@ extern int reflog_exists(const char *refname);
extern int delete_ref(const char *refname, const unsigned char *old_sha1,
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 */
extern int delete_reflog(const char *refname);


Loading…
Cancel
Save