diff options
author | Sascha Cunz <Sascha@BabbelBox.org> | 2012-09-18 22:35:09 +0200 |
---|---|---|
committer | Sascha Cunz <Sascha@BabbelBox.org> | 2012-10-05 13:03:38 +0200 |
commit | 9ce44f1ae5a8b286585e60c88c6a143d80a226a6 (patch) | |
tree | d75a40f164dd247078915c12aff0fb00b58bf8dc /src/diff_output.c | |
parent | 1a5cd26b8c90ecd512bff9d54846db1db277b492 (diff) | |
download | libgit2-9ce44f1ae5a8b286585e60c88c6a143d80a226a6.tar.gz |
Diff: teach get_blob_content to show a submodule as text
diff_output.c:get_blob_content used to try to read the submodule commit
as a blob in the superproject's odb. Of course it cannot find it and
errors out with GIT_ENOTFOUND, implcitly terminating the whole diff
output.
This patch teaches it to create a text that describes the submodule
instead. The text looks like:
Subproject commit <SHA1>\n
which is what git.git does, too.
Diffstat (limited to 'src/diff_output.c')
-rw-r--r-- | src/diff_output.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/diff_output.c b/src/diff_output.c index 379bd6f70..b8516cc24 100644 --- a/src/diff_output.c +++ b/src/diff_output.c @@ -212,6 +212,22 @@ static int get_blob_content( if (git_oid_iszero(&file->oid)) return 0; + if (file->mode == GIT_FILEMODE_COMMIT) + { + char oidstr[GIT_OID_HEXSZ+1]; + git_buf content = GIT_BUF_INIT; + + git_oid_fmt(oidstr, &file->oid); + oidstr[GIT_OID_HEXSZ] = 0; + git_buf_printf(&content, "Subproject commit %s\n", oidstr ); + + map->data = git_buf_detach(&content); + map->len = strlen(map->data); + + file->flags |= GIT_DIFF_FILE_FREE_DATA; + return 0; + } + if (!file->size) { git_odb *odb; size_t len; |