summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 054e357)
raw | patch | inline | side by side (parent: 054e357)
author | Jonas Fonseca <fonseca@diku.dk> | |
Sat, 27 Mar 2010 04:36:04 +0000 (00:36 -0400) | ||
committer | Jonas Fonseca <fonseca@diku.dk> | |
Mon, 29 Mar 2010 00:18:17 +0000 (20:18 -0400) |
NEWS | patch | blob | history | |
tig.c | patch | blob | history |
index d5997911d1e4c1deb364ecbc50cc6d0f1a2396df..07198d3a3452a3faec38a23487def126f9219258 100644 (file)
--- a/NEWS
+++ b/NEWS
- Branch view: add entry to browse all branches (uses git-log's --all
flag).
- Abbreviation of author names can now be configured and toggled.
+ - Mark detached heads with [HEAD].
Bug fixes:
index 589bc5329c4a0b99d1b93ce435d2a2c78a67b3be..3f2264a765012d4fb29288f6ebfa3c94647f9450 100644 (file)
--- a/tig.c
+++ b/tig.c
struct ref **refs; /* References for this ID. */
};
+static struct ref *get_ref_head();
static struct ref_list *get_ref_list(const char *id);
static void foreach_ref(bool (*visitor)(void *data, const struct ref *ref), void *data);
static int load_refs(void);
static char opt_file[SIZEOF_STR] = "";
static char opt_ref[SIZEOF_REF] = "";
static char opt_head[SIZEOF_REF] = "";
-static char opt_head_rev[SIZEOF_REV] = "";
static char opt_remote[SIZEOF_REF] = "";
static char opt_encoding[20] = "UTF-8";
static iconv_t opt_iconv_in = ICONV_NONE;
static char opt_editor[SIZEOF_STR] = "";
static FILE *opt_tty = NULL;
-#define is_initial_commit() (!*opt_head_rev)
-#define is_head_commit(rev) (!strcmp((rev), "HEAD") || !strcmp(opt_head_rev, (rev)))
+#define is_initial_commit() (!get_ref_head())
+#define is_head_commit(rev) (!strcmp((rev), "HEAD") || (get_ref_head() && !strcmp(rev, get_ref_head()->id)))
#define mkdate(time) string_date(time, opt_date)
@@ -7259,6 +7259,7 @@ static bool prompt_menu(const char *prompt, const struct menu_item *items, int *
static struct ref **refs = NULL;
static size_t refs_size = 0;
+static struct ref *refs_head = NULL;
static struct ref_list **ref_lists = NULL;
static size_t ref_lists_size = 0;
break;
}
+static struct ref *
+get_ref_head()
+{
+ return refs_head;
+}
+
static struct ref_list *
get_ref_list(const char *id)
{
} else if (!prefixcmp(name, "refs/heads/")) {
namelen -= STRING_SIZE("refs/heads/");
name += STRING_SIZE("refs/heads/");
- head = !strncmp(opt_head, name, namelen);
+ if (!strncmp(opt_head, name, namelen))
+ return OK;
} else if (!strcmp(name, "HEAD")) {
- string_ncopy(opt_head_rev, id, idlen);
- return OK;
+ head = TRUE;
+ if (*opt_head) {
+ namelen = strlen(opt_head);
+ name = opt_head;
+ }
}
/* If we are reloading or it's an annotated tag, replace the
ref->tracked = tracked;
string_copy_rev(ref->id, id);
+ if (head)
+ refs_head = ref;
return OK;
}
memmove(opt_head, offset, strlen(offset) + 1);
}
+ refs_head = NULL;
for (i = 0; i < refs_size; i++)
refs[i]->id[0] = 0;