commit-tree: allow generic object name for the tree as well.
[gitweb.git] / commit-tree.c
index 8f3b96c26df714554eb274999e185394a4c3f420..e91af4bd36a04d07dd00b124e63f2ab085de69df 100644 (file)
@@ -4,10 +4,8 @@
  * Copyright (C) Linus Torvalds, 2005
  */
 #include "cache.h"
-
-#include <pwd.h>
-#include <time.h>
-#include <ctype.h>
+#include "commit.h"
+#include "tree.h"
 
 #define BLOCKING (1ul << 14)
 
@@ -64,7 +62,7 @@ static void check_valid(unsigned char *sha1, const char *expect)
 #define MAXPARENT (16)
 static unsigned char parent_sha1[MAXPARENT][20];
 
-static char *commit_tree_usage = "git-commit-tree <sha1> [-p <sha1>]* < changelog";
+static const char commit_tree_usage[] = "git-commit-tree <sha1> [-p <sha1>]* < changelog";
 
 static int new_parent(int idx)
 {
@@ -79,16 +77,6 @@ static int new_parent(int idx)
        return 1;
 }
 
-static char *git_author_info(void)
-{
-       return get_ident(gitenv("GIT_AUTHOR_NAME"), gitenv("GIT_AUTHOR_EMAIL"), gitenv("GIT_AUTHOR_DATE"));
-}
-
-static char *git_committer_info(void)
-{
-       return get_ident(gitenv("GIT_COMMITTER_NAME"), gitenv("GIT_COMMITTER_EMAIL"), gitenv("GIT_COMMITTER_DATE"));
-}
-
 int main(int argc, char **argv)
 {
        int i;
@@ -99,22 +87,26 @@ int main(int argc, char **argv)
        char *buffer;
        unsigned int size;
 
-       if (argc < 2 || get_sha1_hex(argv[1], tree_sha1) < 0)
+       setup_ident();
+       setup_git_directory();
+
+       git_config(git_default_config);
+
+       if (argc < 2 || get_sha1(argv[1], tree_sha1) < 0)
                usage(commit_tree_usage);
 
-       check_valid(tree_sha1, "tree");
+       check_valid(tree_sha1, tree_type);
        for (i = 2; i < argc; i += 2) {
                char *a, *b;
                a = argv[i]; b = argv[i+1];
                if (!b || strcmp(a, "-p") || get_sha1(b, parent_sha1[parents]))
                        usage(commit_tree_usage);
-               check_valid(parent_sha1[parents], "commit");
+               check_valid(parent_sha1[parents], commit_type);
                if (new_parent(parents))
                        parents++;
        }
        if (!parents)
                fprintf(stderr, "Committing initial tree %s\n", argv[1]);
-       setup_ident();
 
        init_buffer(&buffer, &size);
        add_buffer(&buffer, &size, "tree %s\n", sha1_to_hex(tree_sha1));
@@ -128,14 +120,17 @@ int main(int argc, char **argv)
                add_buffer(&buffer, &size, "parent %s\n", sha1_to_hex(parent_sha1[i]));
 
        /* Person/date information */
-       add_buffer(&buffer, &size, "author %s\n", git_author_info());
-       add_buffer(&buffer, &size, "committer %s\n\n", git_committer_info());
+       add_buffer(&buffer, &size, "author %s\n", git_author_info(1));
+       add_buffer(&buffer, &size, "committer %s\n\n", git_committer_info(1));
 
        /* And add the comment */
        while (fgets(comment, sizeof(comment), stdin) != NULL)
                add_buffer(&buffer, &size, "%s", comment);
 
-       write_sha1_file(buffer, size, "commit", commit_sha1);
-       printf("%s\n", sha1_to_hex(commit_sha1));
-       return 0;
+       if (!write_sha1_file(buffer, size, commit_type, commit_sha1)) {
+               printf("%s\n", sha1_to_hex(commit_sha1));
+               return 0;
+       }
+       else
+               return 1;
 }