send-pack: forbid pushing from a shallow repository
[gitweb.git] / builtin / send-pack.c
index 4482f16efb66c7fc06c7446a2e992840cc83f798..961df04deaf9497074db9f5ad1790962cd67e402 100644 (file)
@@ -10,6 +10,7 @@
 #include "quote.h"
 #include "transport.h"
 #include "version.h"
+#include "sha1-array.h"
 
 static const char send_pack_usage[] =
 "git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [<host>:]<directory> [<ref>...]\n"
@@ -99,7 +100,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
        const char *dest = NULL;
        int fd[2];
        struct child_process *conn;
-       struct extra_have_objects extra_have;
+       struct sha1_array extra_have = SHA1_ARRAY_INIT;
        struct ref *remote_refs, *local_refs;
        int ret;
        int helper_status = 0;
@@ -207,6 +208,9 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
            (send_all && args.send_mirror))
                usage(send_pack_usage);
 
+       if (is_repository_shallow())
+               die("attempt to push from a shallow repository");
+
        if (remote_name) {
                remote = remote_get(remote_name);
                if (!remote_has_url(remote, dest)) {
@@ -228,8 +232,6 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
                        args.verbose ? CONNECT_VERBOSE : 0);
        }
 
-       memset(&extra_have, 0, sizeof(extra_have));
-
        get_remote_heads(fd[0], NULL, 0, &remote_refs, REF_NORMAL, &extra_have);
 
        transport_verify_remote_names(nr_refspecs, refspecs);