commit - 7ef28ff8dd61cbf38f88784ea8c11e373757985f
commit + 82f6abb8b1a22fe62d2a8a8d0cdbb73c9d85fcda
blob - 6aaab256399b6996c57b843dcf33ab27058b640b
blob + 0a9f0472c3328f4c1e873ed61b40c7ea7ef1144a
--- got/got.c
+++ got/got.c
struct blame_line {
int annotated;
char *id_str;
+ char *committer;
};
struct blame_cb_args {
int lineno_cur;
off_t *line_offsets;
FILE *f;
+ struct got_repository *repo;
};
static const struct got_error *
const struct got_error *err = NULL;
struct blame_cb_args *a = arg;
struct blame_line *bline;
- char *line = NULL, *nl;
+ char *line = NULL;
size_t linesize = 0;
+ struct got_commit_object *commit = NULL;
off_t offset;
if (nlines != a->nlines ||
err = got_object_id_str(&bline->id_str, id);
if (err)
return err;
+
+ err = got_object_open_as_commit(&commit, a->repo, id);
+ if (err)
+ goto done;
+
+ bline->committer = strdup(got_object_commit_get_committer(commit));
+ if (bline->committer == NULL) {
+ err = got_error_from_errno("strdup");
+ goto done;
+ }
bline->annotated = 1;
/* Print lines annotated so far. */
bline = &a->lines[a->lineno_cur - 1];
if (!bline->annotated)
- return NULL;
+ goto done;
offset = a->line_offsets[a->lineno_cur - 1];
- if (fseeko(a->f, offset, SEEK_SET) == -1)
- return got_error_from_errno("fseeko");
+ if (fseeko(a->f, offset, SEEK_SET) == -1) {
+ err = got_error_from_errno("fseeko");
+ goto done;
+ }
while (bline->annotated) {
+ char *smallerthan, *at, *nl, *committer;
+ size_t len;
+
if (getline(&line, &linesize, a->f) == (ssize_t)-1) {
if (ferror(a->f))
err = got_error_from_errno("getline");
break;
}
+
+ committer = bline->committer;
+ smallerthan = strchr(committer, '<');
+ if (smallerthan && smallerthan[1] != '\0')
+ committer = smallerthan + 1;
+ at = strchr(committer, '@');
+ if (at)
+ *at = '\0';
+ len = strlen(committer);
+ if (len >= 9)
+ committer[8] = '\0';
nl = strchr(line, '\n');
if (nl)
*nl = '\0';
- printf("%.*d) %.8s %s\n", a->nlines_prec, a->lineno_cur,
- bline->id_str, line);
+ printf("%.*d) %.8s %-8s %s\n", a->nlines_prec, a->lineno_cur,
+ bline->id_str, committer, line);
a->lineno_cur++;
bline = &a->lines[a->lineno_cur - 1];
}
-
+done:
+ if (commit)
+ got_object_commit_close(commit);
free(line);
return err;
}
error = got_error_from_errno("calloc");
goto done;
}
-
bca.lineno_cur = 1;
-
bca.nlines_prec = 0;
i = bca.nlines;
while (i > 0) {
i /= 10;
bca.nlines_prec++;
}
+ bca.repo = repo;
error = got_blame_incremental(in_repo_path, commit_id, repo,
blame_cb, &bca);
for (i = 0; i < bca.nlines; i++) {
struct blame_line *bline = &bca.lines[i];
free(bline->id_str);
+ free(bline->committer);
}
free(bca.lines);
free(bca.line_offsets);
blob - b3f34a68bb9a7524660dc7ba0f73911918e96c8b
blob + ffd945039f1cf941bca4283e1957f71c3439a34a
--- regress/cmdline/blame.sh
+++ regress/cmdline/blame.sh
local short_commit2=`trim_obj_id 32 $commit2`
local short_commit3=`trim_obj_id 32 $commit3`
- echo "1) $short_commit1 1" > $testroot/stdout.expected
- echo "2) $short_commit2 2" >> $testroot/stdout.expected
- echo "3) $short_commit3 3" >> $testroot/stdout.expected
+ echo "1) $short_commit1 $GOT_AUTHOR_8 1" > $testroot/stdout.expected
+ echo "2) $short_commit2 $GOT_AUTHOR_8 2" >> $testroot/stdout.expected
+ echo "3) $short_commit3 $GOT_AUTHOR_8 3" >> $testroot/stdout.expected
cmp -s $testroot/stdout.expected $testroot/stdout
ret="$?"
local short_commit1=`trim_obj_id 32 $commit1`
local short_commit2=`trim_obj_id 32 $commit2`
- echo "1) $short_commit1 1" > $testroot/stdout.expected
- echo "2) $short_commit2 2" >> $testroot/stdout.expected
+ echo "1) $short_commit1 $GOT_AUTHOR_8 1" > $testroot/stdout.expected
+ echo "2) $short_commit2 $GOT_AUTHOR_8 2" >> $testroot/stdout.expected
cmp -s $testroot/stdout.expected $testroot/stdout
ret="$?"
local short_commit1=`trim_obj_id 32 $commit1`
- echo "1) $short_commit1 1" > $testroot/stdout.expected
+ echo "1) $short_commit1 $GOT_AUTHOR_8 1" > $testroot/stdout.expected
cmp -s $testroot/stdout.expected $testroot/stdout
ret="$?"
local short_commit1=`trim_obj_id 32 $commit1`
- echo "1) $short_commit1 1" > $testroot/stdout.expected
+ echo "1) $short_commit1 $GOT_AUTHOR_8 1" > $testroot/stdout.expected
cmp -s $testroot/stdout.expected $testroot/stdout
ret="$?"
blob - 75546009c46e4564fdad73f3d119abc3af74af62
blob + 296735a35356574b58457b3b21280f4faf2bf2ab
--- regress/cmdline/common.sh
+++ regress/cmdline/common.sh
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
export GOT_AUTHOR="Flan Hacker <flan_hacker@openbsd.org>"
+export GOT_AUTHOR_8="flan_hac"
export GOT_LOG_DEFAULT_LIMIT=0
export MALLOC_OPTIONS=S