Skip to content

Commit

Permalink
replace: factor object resolution out of replace_object
Browse files Browse the repository at this point in the history
As we add new options that operate on objects before
replacing them, we'll want to be able to feed raw sha1s
straight into replace_object. Split replace_object into the
object-resolution part and the actual replacement.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Apr 29, 2014
1 parent 70c7bd6 commit 479bd75
Showing 1 changed file with 18 additions and 8 deletions.
26 changes: 18 additions & 8 deletions builtin/replace.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,19 +123,17 @@ static int delete_replace_ref(const char *name, const char *ref,
return 0;
}

static int replace_object(const char *object_ref, const char *replace_ref,
int force)
static int replace_object_sha1(const char *object_ref,
unsigned char object[20],
const char *replace_ref,
unsigned char repl[20],
int force)
{
unsigned char object[20], prev[20], repl[20];
unsigned char prev[20];
enum object_type obj_type, repl_type;
char ref[PATH_MAX];
struct ref_lock *lock;

if (get_sha1(object_ref, object))
die("Failed to resolve '%s' as a valid ref.", object_ref);
if (get_sha1(replace_ref, repl))
die("Failed to resolve '%s' as a valid ref.", replace_ref);

if (snprintf(ref, sizeof(ref),
"refs/replace/%s",
sha1_to_hex(object)) > sizeof(ref) - 1)
Expand Down Expand Up @@ -166,6 +164,18 @@ static int replace_object(const char *object_ref, const char *replace_ref,
return 0;
}

static int replace_object(const char *object_ref, const char *replace_ref, int force)
{
unsigned char object[20], repl[20];

if (get_sha1(object_ref, object))
die("Failed to resolve '%s' as a valid ref.", object_ref);
if (get_sha1(replace_ref, repl))
die("Failed to resolve '%s' as a valid ref.", replace_ref);

return replace_object_sha1(object_ref, object, replace_ref, repl, force);
}

int cmd_replace(int argc, const char **argv, const char *prefix)
{
int force = 0;
Expand Down

0 comments on commit 479bd75

Please sign in to comment.