forked from gitster/git
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Commit notes are blobs which are shown together with the commit message. These blobs are taken from the notes ref, which you can configure by the config variable core.notesRef, which in turn can be overridden by the environment variable GIT_NOTES_REF. The notes ref is a branch which contains "files" whose names are the names of the corresponding commits (i.e. the SHA-1). The rationale for putting this information into a ref is this: we want to be able to fetch and possibly union-merge the notes, maybe even look at the date when a note was introduced, and we want to store them efficiently together with the other objects. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Showing
9 changed files
with
107 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
#include "cache.h" | ||
#include "commit.h" | ||
#include "notes.h" | ||
#include "refs.h" | ||
#include "utf8.h" | ||
#include "strbuf.h" | ||
|
||
static int initialized; | ||
|
||
void get_commit_notes(const struct commit *commit, struct strbuf *sb, | ||
const char *output_encoding) | ||
{ | ||
static const char *utf8 = "utf-8"; | ||
struct strbuf name = STRBUF_INIT; | ||
const char *hex; | ||
unsigned char sha1[20]; | ||
char *msg; | ||
unsigned long msgoffset, msglen; | ||
enum object_type type; | ||
|
||
if (!initialized) { | ||
const char *env = getenv(GIT_NOTES_REF_ENVIRONMENT); | ||
if (env) | ||
notes_ref_name = getenv(GIT_NOTES_REF_ENVIRONMENT); | ||
else if (!notes_ref_name) | ||
notes_ref_name = GIT_NOTES_DEFAULT_REF; | ||
if (notes_ref_name && read_ref(notes_ref_name, sha1)) | ||
notes_ref_name = NULL; | ||
initialized = 1; | ||
} | ||
|
||
if (!notes_ref_name) | ||
return; | ||
|
||
strbuf_addf(&name, "%s:%s", notes_ref_name, | ||
sha1_to_hex(commit->object.sha1)); | ||
if (get_sha1(name.buf, sha1)) | ||
return; | ||
|
||
if (!(msg = read_sha1_file(sha1, &type, &msglen)) || !msglen || | ||
type != OBJ_BLOB) | ||
return; | ||
|
||
if (output_encoding && *output_encoding && | ||
strcmp(utf8, output_encoding)) { | ||
char *reencoded = reencode_string(msg, output_encoding, utf8); | ||
if (reencoded) { | ||
free(msg); | ||
msg = reencoded; | ||
msglen = strlen(msg); | ||
} | ||
} | ||
|
||
/* we will end the annotation by a newline anyway */ | ||
if (msglen && msg[msglen - 1] == '\n') | ||
msglen--; | ||
|
||
strbuf_addstr(sb, "\nNotes:\n"); | ||
|
||
for (msgoffset = 0; msgoffset < msglen;) { | ||
int linelen = strchrnul(msg, '\n') - msg; | ||
|
||
strbuf_addstr(sb, " "); | ||
strbuf_add(sb, msg + msgoffset, linelen); | ||
msgoffset += linelen; | ||
} | ||
free(msg); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#ifndef NOTES_H | ||
#define NOTES_H | ||
|
||
void get_commit_notes(const struct commit *commit, struct strbuf *sb, | ||
const char *output_encoding); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters