From: Johan Herland <johan@herland.net>
To: git@vger.kernel.org
Cc: johan@herland.net, gitster@pobox.com, jrnieder@gmail.com
Subject: [PATCHv2 08/10] builtin/branch.c: Refactor ref_item.name and .dest into strbufs
Date: Sat, 11 May 2013 18:21:18 +0200 [thread overview]
Message-ID: <1368289280-30337-9-git-send-email-johan@herland.net> (raw)
In-Reply-To: <1368289280-30337-1-git-send-email-johan@herland.net>
In preparation of a future patch which reorganizes how the display of the
ref_list is done.
Signed-off-by: Johan Herland <johan@herland.net>
---
builtin/branch.c | 37 +++++++++++++++++++++----------------
1 file changed, 21 insertions(+), 16 deletions(-)
diff --git a/builtin/branch.c b/builtin/branch.c
index 0836890..c8b49e3 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -276,8 +276,8 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
}
struct ref_item {
- char *name;
- char *dest;
+ struct strbuf name;
+ struct strbuf dest;
unsigned int kind, width;
struct commit *commit;
};
@@ -380,11 +380,15 @@ static int append_ref(const char *refname, const unsigned char *sha1, int flags,
/* Record the new item */
newitem = &(ref_list->list[ref_list->index++]);
- newitem->name = xstrdup(refname);
+ strbuf_init(&newitem->name, 0);
+ strbuf_addstr(&newitem->name, refname);
newitem->kind = kind;
newitem->commit = commit;
newitem->width = utf8_strwidth(refname);
- newitem->dest = resolve_symref(orig_refname, prefix);
+ strbuf_init(&newitem->dest, 0);
+ orig_refname = resolve_symref(orig_refname, prefix);
+ if (orig_refname)
+ strbuf_addstr(&newitem->dest, orig_refname);
/* adjust for "remotes/" */
if (newitem->kind == REF_REMOTE_BRANCH &&
ref_list->kinds != REF_REMOTE_BRANCH)
@@ -400,8 +404,8 @@ static void free_ref_list(struct ref_list *ref_list)
int i;
for (i = 0; i < ref_list->index; i++) {
- free(ref_list->list[i].name);
- free(ref_list->list[i].dest);
+ strbuf_release(&ref_list->list[i].name);
+ strbuf_release(&ref_list->list[i].dest);
}
free(ref_list->list);
}
@@ -413,7 +417,7 @@ static int ref_cmp(const void *r1, const void *r2)
if (c1->kind != c2->kind)
return c1->kind - c2->kind;
- return strcmp(c1->name, c2->name);
+ return strbuf_cmp(&c1->name, &c2->name);
}
static void fill_tracking_info(struct strbuf *stat, const char *branch_name,
@@ -496,7 +500,7 @@ static void add_verbose_info(struct strbuf *out, struct ref_item *item,
}
if (item->kind == REF_LOCAL_BRANCH)
- fill_tracking_info(&stat, item->name, verbose > 1);
+ fill_tracking_info(&stat, item->name.buf, verbose > 1);
strbuf_addf(out, " %s %s%s",
find_unique_abbrev(item->commit->object.sha1, abbrev),
@@ -534,7 +538,7 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
color = BRANCH_COLOR_CURRENT;
}
- strbuf_addf(&name, "%s%s", prefix, item->name);
+ strbuf_addf(&name, "%s%s", prefix, item->name.buf);
if (verbose) {
int utf8_compensation = strlen(name.buf) - utf8_strwidth(name.buf);
strbuf_addf(&out, "%c %s%-*s%s", c, branch_get_color(color),
@@ -544,8 +548,8 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
strbuf_addf(&out, "%c %s%s%s", c, branch_get_color(color),
name.buf, branch_get_color(BRANCH_COLOR_RESET));
- if (item->dest)
- strbuf_addf(&out, " -> %s", item->dest);
+ if (item->dest.len)
+ strbuf_addf(&out, " -> %s", item->dest.buf);
else if (verbose)
/* " f7c0c00 [ahead 58, behind 197] vcs-svn: drop obj_pool.h" */
add_verbose_info(&out, item, verbose, abbrev);
@@ -601,15 +605,16 @@ static void show_detached(struct ref_list *ref_list)
if (head_commit && is_descendant_of(head_commit, ref_list->with_commit)) {
struct ref_item item;
- item.name = get_head_description();
- item.width = utf8_strwidth(item.name);
+ strbuf_init(&item.name, 0);
+ strbuf_addstr(&item.name, get_head_description());
+ item.width = utf8_strwidth(item.name.buf);
item.kind = REF_LOCAL_BRANCH;
- item.dest = NULL;
+ strbuf_init(&item.dest, 0);
item.commit = head_commit;
if (item.width > ref_list->maxwidth)
ref_list->maxwidth = item.width;
print_ref_item(&item, ref_list->maxwidth, ref_list->verbose, ref_list->abbrev, 1, "");
- free(item.name);
+ strbuf_release(&item.name);
}
}
@@ -655,7 +660,7 @@ static int print_ref_list(int kinds, int detached, int verbose, int abbrev, stru
for (i = 0; i < ref_list.index; i++) {
int current = !detached &&
(ref_list.list[i].kind == REF_LOCAL_BRANCH) &&
- !strcmp(ref_list.list[i].name, head);
+ !strcmp(ref_list.list[i].name.buf, head);
char *prefix = (kinds != REF_REMOTE_BRANCH &&
ref_list.list[i].kind == REF_REMOTE_BRANCH)
? "remotes/" : "";
--
1.8.1.3.704.g33f7d4f
next prev parent reply other threads:[~2013-05-11 16:21 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-11 16:21 [PATCHv2 00/10] Prepare for alternative remote-tracking branch location Johan Herland
2013-05-11 16:21 ` [PATCHv2 01/10] t7900: Start testing usability of namespaced remote refs Johan Herland
2013-05-11 16:21 ` [PATCHv2 02/10] t7900: Demonstrate failure to expand "$peer/$branch" according to refspecs Johan Herland
2013-05-11 16:21 ` [PATCHv2 03/10] refs.c: Refactor code for mapping between shorthand names and full refnames Johan Herland
2013-05-13 4:56 ` Junio C Hamano
2013-05-13 6:31 ` Johan Herland
2013-05-13 6:45 ` Junio C Hamano
2013-05-13 20:34 ` Junio C Hamano
2013-05-14 14:24 ` Johan Herland
2013-05-14 17:50 ` Junio C Hamano
2013-05-15 6:45 ` Michael Haggerty
2013-05-15 7:39 ` Johan Herland
2013-05-15 13:53 ` Johan Herland
2013-05-15 15:14 ` Junio C Hamano
2013-05-15 19:49 ` Eric Wong
2013-05-11 16:21 ` [PATCHv2 04/10] remote: Reject remote names containing '/' Johan Herland
2013-05-13 4:48 ` Eric Sunshine
2013-05-13 6:32 ` Johan Herland
2013-05-13 4:54 ` Junio C Hamano
2013-05-13 6:53 ` Johan Herland
2013-05-16 9:48 ` Ramkumar Ramachandra
2013-05-16 11:17 ` Johan Herland
2013-05-16 12:14 ` Ramkumar Ramachandra
2013-05-11 16:21 ` [PATCHv2 05/10] refs.c: Add support for expanding/shortening refs in refs/peers/* Johan Herland
2013-05-11 16:21 ` [PATCHv2 06/10] t7900: Test git branch -r/-a output w/remote-tracking branches " Johan Herland
2013-05-11 16:21 ` [PATCHv2 07/10] t3203: Add testcase for fix in 1603ade81352a526ccb206f41ff81ecbc855df2d Johan Herland
2013-05-11 16:21 ` Johan Herland [this message]
2013-05-11 16:21 ` [PATCHv2 09/10] builtin/branch.c: Refactor "remotes/" prepending to remote-tracking branches Johan Herland
2013-05-11 16:21 ` [PATCHv2 10/10] branch: Fix display of remote branches in refs/peers/* Johan Herland
2013-05-13 5:19 ` Eric Sunshine
2013-05-13 6:55 ` Johan Herland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1368289280-30337-9-git-send-email-johan@herland.net \
--to=johan@herland.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).