Skip to content

Commit

Permalink
sha1-name: pass len argument to interpret_branch_name()
Browse files Browse the repository at this point in the history
This is useful to make sure we don't step outside the boundaries of what
we are interpreting at the moment. For example while interpreting
foobar@{u}~1, the job of interpret_branch_name() ends right before ~1,
but there's no way to figure that out inside the function, unless the
len argument is passed.

So let's do that.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Felipe Contreras authored and Junio C Hamano committed Sep 3, 2013
1 parent e230c56 commit cf99a76
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 7 deletions.
2 changes: 1 addition & 1 deletion cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -893,7 +893,7 @@ extern char *resolve_refdup(const char *ref, unsigned char *sha1, int reading, i

extern int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref);
extern int dwim_log(const char *str, int len, unsigned char *sha1, char **ref);
extern int interpret_branch_name(const char *str, struct strbuf *);
extern int interpret_branch_name(const char *str, int len, struct strbuf *);
extern int get_sha1_mb(const char *str, unsigned char *sha1);

extern int refname_match(const char *abbrev_name, const char *full_name, const char **rules);
Expand Down
2 changes: 1 addition & 1 deletion refs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1951,7 +1951,7 @@ static int remove_empty_directories(const char *file)
static char *substitute_branch_name(const char **string, int *len)
{
struct strbuf buf = STRBUF_INIT;
int ret = interpret_branch_name(*string, &buf);
int ret = interpret_branch_name(*string, *len, &buf);

if (ret == *len) {
size_t size;
Expand Down
2 changes: 1 addition & 1 deletion revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ static void add_pending_object_with_mode(struct rev_info *revs,
revs->no_walk = 0;
if (revs->reflog_info && obj->type == OBJ_COMMIT) {
struct strbuf buf = STRBUF_INIT;
int len = interpret_branch_name(name, &buf);
int len = interpret_branch_name(name, 0, &buf);
int st;

if (0 < len && name[len] && buf.len)
Expand Down
10 changes: 6 additions & 4 deletions sha1_name.c
Original file line number Diff line number Diff line change
Expand Up @@ -1012,7 +1012,7 @@ static int reinterpret(const char *name, int namelen, int len, struct strbuf *bu
int ret;

strbuf_add(buf, name + len, namelen - len);
ret = interpret_branch_name(buf->buf, &tmp);
ret = interpret_branch_name(buf->buf, buf->len, &tmp);
/* that data was not interpreted, remove our cruft */
if (ret < 0) {
strbuf_setlen(buf, used);
Expand Down Expand Up @@ -1046,14 +1046,16 @@ static int reinterpret(const char *name, int namelen, int len, struct strbuf *bu
* If the input was ok but there are not N branch switches in the
* reflog, it returns 0.
*/
int interpret_branch_name(const char *name, struct strbuf *buf)
int interpret_branch_name(const char *name, int namelen, struct strbuf *buf)
{
char *cp;
struct branch *upstream;
int namelen = strlen(name);
int len = interpret_nth_prior_checkout(name, buf);
int tmp_len;

if (!namelen)
namelen = strlen(name);

if (!len) {
return len; /* syntax Ok, not enough switches */
} else if (len > 0) {
Expand Down Expand Up @@ -1100,7 +1102,7 @@ int interpret_branch_name(const char *name, struct strbuf *buf)
int strbuf_branchname(struct strbuf *sb, const char *name)
{
int len = strlen(name);
int used = interpret_branch_name(name, sb);
int used = interpret_branch_name(name, len, sb);

if (used == len)
return 0;
Expand Down

0 comments on commit cf99a76

Please sign in to comment.