]> git.ipfire.org Git - thirdparty/git.git/blobdiff - builtin/clone.c
Sync with 2.31.7
[thirdparty/git.git] / builtin / clone.c
index f6b0c48beda5fe32fab4d4ab65802f1e5dc9a09f..97de324e5437c35fff80c4ea741cd0ca0347e5d1 100644 (file)
@@ -424,13 +424,11 @@ static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest,
        int src_len, dest_len;
        struct dir_iterator *iter;
        int iter_status;
-       unsigned int flags;
        struct strbuf realpath = STRBUF_INIT;
 
        mkdir_if_missing(dest->buf, 0777);
 
-       flags = DIR_ITERATOR_PEDANTIC | DIR_ITERATOR_FOLLOW_SYMLINKS;
-       iter = dir_iterator_begin(src->buf, flags);
+       iter = dir_iterator_begin(src->buf, DIR_ITERATOR_PEDANTIC);
 
        if (!iter)
                die_errno(_("failed to start iterator over '%s'"), src->buf);
@@ -446,6 +444,10 @@ static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest,
                strbuf_setlen(dest, dest_len);
                strbuf_addstr(dest, iter->relative_path);
 
+               if (S_ISLNK(iter->st.st_mode))
+                       die(_("symlink '%s' exists, refusing to clone with --local"),
+                           iter->relative_path);
+
                if (S_ISDIR(iter->st.st_mode)) {
                        mkdir_if_missing(dest->buf, 0777);
                        continue;
@@ -820,7 +822,7 @@ static int checkout(int submodule_progress)
        if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
                die(_("unable to write new index file"));
 
-       err |= run_hook_le(NULL, "post-checkout", oid_to_hex(&null_oid),
+       err |= run_hook_le(NULL, "post-checkout", oid_to_hex(null_oid()),
                           oid_to_hex(&oid), "1", NULL);
 
        if (!err && (option_recurse_submodules.nr > 0)) {
@@ -1218,10 +1220,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        refspec_appendf(&remote->fetch, "+%s*:%s*", src_ref_prefix,
                        branch_top.buf);
 
-       transport = transport_get(remote, remote->url[0]);
-       transport_set_verbosity(transport, option_verbosity, option_progress);
-       transport->family = family;
-
        path = get_repo_path(remote->url[0], &is_bundle);
        is_local = option_local != 0 && path && !is_bundle;
        if (is_local) {
@@ -1243,6 +1241,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        }
        if (option_local > 0 && !is_local)
                warning(_("--local is ignored"));
+
+       transport = transport_get(remote, path ? path : remote->url[0]);
+       transport_set_verbosity(transport, option_verbosity, option_progress);
+       transport->family = family;
        transport->cloning = 1;
 
        transport_set_option(transport, TRANS_OPT_KEEP, "yes");