builtin/log.c: fix minor memory leak
[gitweb.git] / upload-pack.c
index ec56cdbce9fe0bf87aeafb3567e09cbf546e7218..a3c52f691da5e5ce95d70a9ed43cffd00f620ccd 100644 (file)
@@ -81,10 +81,10 @@ static void create_pack_file(void)
        const char *argv[12];
        int i, arg = 0;
        FILE *pipe_fd;
-       char *shallow_file = NULL;
+       const char *shallow_file = NULL;
 
        if (shallow_nr) {
-               shallow_file = setup_temporary_shallow();
+               shallow_file = setup_temporary_shallow(NULL);
                argv[arg++] = "--shallow-file";
                argv[arg++] = shallow_file;
        }
@@ -242,11 +242,6 @@ static void create_pack_file(void)
                error("git upload-pack: git-pack-objects died with error.");
                goto fail;
        }
-       if (shallow_file) {
-               if (*shallow_file)
-                       unlink(shallow_file);
-               free(shallow_file);
-       }
 
        /* flush the data */
        if (0 <= buffered) {
@@ -619,7 +614,7 @@ static void receive_needs(void)
        if (depth > 0) {
                struct commit_list *result = NULL, *backup = NULL;
                int i;
-               if (depth == INFINITE_DEPTH)
+               if (depth == INFINITE_DEPTH && !is_repository_shallow())
                        for (i = 0; i < shallows.nr; i++) {
                                struct object *object = shallows.objects[i].item;
                                object->flags |= NOT_SHALLOW;
@@ -757,6 +752,7 @@ static void upload_pack(void)
                reset_timeout();
                head_ref_namespaced(send_ref, &symref);
                for_each_namespaced_ref(send_ref, &symref);
+               advertise_shallow_grafts(1);
                packet_flush(1);
        } else {
                head_ref_namespaced(mark_our_ref, NULL);
@@ -834,8 +830,7 @@ int main(int argc, char **argv)
 
        if (!enter_repo(dir, strict))
                die("'%s' does not appear to be a git repository", dir);
-       if (is_repository_shallow())
-               die("attempt to fetch/clone from a shallow repository");
+
        git_config(upload_pack_config, NULL);
        upload_pack();
        return 0;