commit - 86d25a1b02a67714850c0c7d78cfac065e455fe0
commit + ba882ee388d95f88eb3e54d3ccd2b07e736e5190
blob - 6e3f9cff1657df36b6d3d959290b7ab16a113b37
blob + bcf1646aa787ed2315075f33ab98d588cd1dbf2a
--- got/got.1
+++ got/got.1
work tree, use the repository path associated with this work tree.
.It Fl l
List all existing branches in the repository.
+.Pp
+If invoked in a work tree, the work tree's current branch is shown
+with one the following annotations:
+.Bl -column YXZ description
+.It * Ta work tree's base commit matches the branch tip
+.It ~ Ta work tree's base commit is out-of-date
+.El
.It Fl d Ar name
Delete the branch with the specified name from the repository.
.El
blob - 26e1d49401834d67cbff109f6d3e09cd46be8449
blob + 60dad83c94dc3446dd85735658c86d79a896a26c
--- got/got.c
+++ got/got.c
}
static const struct got_error *
-list_branches(struct got_repository *repo)
+list_branches(struct got_repository *repo, struct got_worktree *worktree)
{
static const struct got_error *err = NULL;
struct got_reflist_head refs;
struct got_reflist_entry *re;
SIMPLEQ_INIT(&refs);
+
err = got_ref_list(&refs, repo);
if (err)
return err;
SIMPLEQ_FOREACH(re, &refs, entry) {
- const char *refname;
+ const char *refname, *marker = " ";
char *refstr;
refname = got_ref_get_name(re->ref);
if (strncmp(refname, "refs/heads/", 11) != 0)
continue;
+ if (worktree && strcmp(refname,
+ got_worktree_get_head_ref_name(worktree)) == 0) {
+ struct got_object_id *id = NULL;
+ err = got_ref_resolve(&id, repo, re->ref);
+ if (err)
+ return err;
+ if (got_object_id_cmp(id,
+ got_worktree_get_base_commit_id(worktree)) == 0)
+ marker = "* ";
+ else
+ marker = "~ ";
+ free(id);
+ }
refname += 11;
refstr = got_ref_to_str(re->ref);
if (refstr == NULL)
return got_error_from_errno("got_ref_to_str");
- printf("%s: %s\n", refname, refstr);
+ printf("%s%s: %s\n", marker, refname, refstr);
free(refstr);
}
goto done;
if (do_list)
- error = list_branches(repo);
+ error = list_branches(repo, worktree);
else if (delref)
error = delete_branch(repo, delref);
else {