summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 55b6745)
raw | patch | inline | side by side (parent: 55b6745)
author | Linus Torvalds <torvalds@linux-foundation.org> | |
Fri, 22 Jan 2010 04:31:25 +0000 (20:31 -0800) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Fri, 22 Jan 2010 06:06:12 +0000 (22:06 -0800) |
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile | patch | blob | history | |
builtin-patch-id.c | [new file with mode: 0644] | patch | blob |
builtin.h | patch | blob | history | |
git.c | patch | blob | history | |
patch-id.c | [deleted file] | patch | blob | history |
diff --git a/Makefile b/Makefile
index 4558c4627bd2f46c11a33772c37f24602b28870e..e1c7ae58500916ac5adbd187029e7edcf8e6663f 100644 (file)
--- a/Makefile
+++ b/Makefile
PROGRAMS += git-merge-index$X
PROGRAMS += git-mktag$X
PROGRAMS += git-pack-redundant$X
-PROGRAMS += git-patch-id$X
PROGRAMS += git-shell$X
PROGRAMS += git-show-index$X
PROGRAMS += git-unpack-file$X
BUILTIN_OBJS += builtin-name-rev.o
BUILTIN_OBJS += builtin-pack-objects.o
BUILTIN_OBJS += builtin-pack-refs.o
+BUILTIN_OBJS += builtin-patch-id.o
BUILTIN_OBJS += builtin-prune-packed.o
BUILTIN_OBJS += builtin-prune.o
BUILTIN_OBJS += builtin-push.o
diff --git a/builtin-patch-id.c b/builtin-patch-id.c
--- /dev/null
+++ b/builtin-patch-id.c
@@ -0,0 +1,85 @@
+#include "cache.h"
+#include "exec_cmd.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 cmd_patch_id(int argc, const char **argv, const char *prefix)
+{
+ if (argc != 1)
+ usage(patch_id_usage);
+
+ generate_id_list();
+ return 0;
+}
diff --git a/builtin.h b/builtin.h
index 2d95c3b2fe8a20f0cdb9070184689b3f63cca7eb..cb8489f97e4fba554f5abe97e3a76c615fba602e 100644 (file)
--- a/builtin.h
+++ b/builtin.h
extern int cmd_mv(int argc, const char **argv, const char *prefix);
extern int cmd_name_rev(int argc, const char **argv, const char *prefix);
extern int cmd_pack_objects(int argc, const char **argv, const char *prefix);
+extern int cmd_patch_id(int argc, const char **argv, const char *prefix);
extern int cmd_pickaxe(int argc, const char **argv, const char *prefix);
extern int cmd_prune(int argc, const char **argv, const char *prefix);
extern int cmd_prune_packed(int argc, const char **argv, const char *prefix);
index cf7dd5d26cf27b38da94ed32dc521357db34369e..b60999ca9ebdb3582ed8cc790e0722a450bb2e40 100644 (file)
--- a/git.c
+++ b/git.c
{ "mv", cmd_mv, RUN_SETUP | NEED_WORK_TREE },
{ "name-rev", cmd_name_rev, RUN_SETUP },
{ "pack-objects", cmd_pack_objects, RUN_SETUP },
+ { "patch-id", cmd_patch_id },
{ "peek-remote", cmd_ls_remote },
{ "pickaxe", cmd_blame, RUN_SETUP },
{ "prune", cmd_prune, RUN_SETUP },
diff --git a/patch-id.c b/patch-id.c
--- a/patch-id.c
+++ /dev/null
@@ -1,87 +0,0 @@
-#include "cache.h"
-#include "exec_cmd.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);
-
- git_extract_argv0_path(argv[0]);
-
- generate_id_list();
- return 0;
-}