mirror of
https://github.com/git/git.git
synced 2024-11-20 01:24:20 +01:00
9126f0091f
On ARM I have the following compilation errors: CC fast-import.o In file included from cache.h:8, from builtin.h:6, from fast-import.c:142: arm/sha1.h:14: error: conflicting types for 'SHA_CTX' /usr/include/openssl/sha.h:105: error: previous declaration of 'SHA_CTX' was here arm/sha1.h:16: error: conflicting types for 'SHA1_Init' /usr/include/openssl/sha.h:115: error: previous declaration of 'SHA1_Init' was here arm/sha1.h:17: error: conflicting types for 'SHA1_Update' /usr/include/openssl/sha.h:116: error: previous declaration of 'SHA1_Update' was here arm/sha1.h:18: error: conflicting types for 'SHA1_Final' /usr/include/openssl/sha.h:117: error: previous declaration of 'SHA1_Final' was here make: *** [fast-import.o] Error 1 This is because openssl header files are always included in git-compat-util.h since commit 684ec6c63c whenever NO_OPENSSL is not set, which somehow brings in <openssl/sha1.h> clashing with the custom ARM version. Compilation of git is probably broken on PPC too for the same reason. Turns out that the only file requiring openssl/ssl.h and openssl/err.h is imap-send.c. But only moving those problematic includes there doesn't solve the issue as it also includes cache.h which brings in the conflicting local SHA1 header file. As suggested by Jeff King, the best solution is to rename our references to SHA1 functions and structure to something git specific, and define those according to the implementation used. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
85 lines
1.6 KiB
C
85 lines
1.6 KiB
C
#include "cache.h"
|
|
|
|
static void flush_current_id(int patchlen, unsigned char *id, git_SHA_CTX *c)
|
|
{
|
|
unsigned char result[20];
|
|
char name[50];
|
|
|
|
if (!patchlen)
|
|
return;
|
|
|
|
git_SHA1_Final(result, c);
|
|
memcpy(name, sha1_to_hex(id), 41);
|
|
printf("%s %s\n", sha1_to_hex(result), name);
|
|
git_SHA1_Init(c);
|
|
}
|
|
|
|
static int remove_space(char *line)
|
|
{
|
|
char *src = line;
|
|
char *dst = line;
|
|
unsigned char c;
|
|
|
|
while ((c = *src++) != '\0') {
|
|
if (!isspace(c))
|
|
*dst++ = c;
|
|
}
|
|
return dst - line;
|
|
}
|
|
|
|
static void generate_id_list(void)
|
|
{
|
|
static unsigned char sha1[20];
|
|
static char line[1000];
|
|
git_SHA_CTX ctx;
|
|
int patchlen = 0;
|
|
|
|
git_SHA1_Init(&ctx);
|
|
while (fgets(line, sizeof(line), stdin) != NULL) {
|
|
unsigned char n[20];
|
|
char *p = line;
|
|
int len;
|
|
|
|
if (!memcmp(line, "diff-tree ", 10))
|
|
p += 10;
|
|
else if (!memcmp(line, "commit ", 7))
|
|
p += 7;
|
|
|
|
if (!get_sha1_hex(p, n)) {
|
|
flush_current_id(patchlen, sha1, &ctx);
|
|
hashcpy(sha1, n);
|
|
patchlen = 0;
|
|
continue;
|
|
}
|
|
|
|
/* Ignore commit comments */
|
|
if (!patchlen && memcmp(line, "diff ", 5))
|
|
continue;
|
|
|
|
/* Ignore git-diff index header */
|
|
if (!memcmp(line, "index ", 6))
|
|
continue;
|
|
|
|
/* Ignore line numbers when computing the SHA1 of the patch */
|
|
if (!memcmp(line, "@@ -", 4))
|
|
continue;
|
|
|
|
/* Compute the sha without whitespace */
|
|
len = remove_space(line);
|
|
patchlen += len;
|
|
git_SHA1_Update(&ctx, line, len);
|
|
}
|
|
flush_current_id(patchlen, sha1, &ctx);
|
|
}
|
|
|
|
static const char patch_id_usage[] = "git-patch-id < patch";
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
if (argc != 1)
|
|
usage(patch_id_usage);
|
|
|
|
generate_id_list();
|
|
return 0;
|
|
}
|