path = mkpath("%s%s", repo, suffix[i]);
if (!stat(path, &st) && S_ISDIR(st.st_mode)) {
*is_bundle = 0;
- return xstrdup(make_absolute_path(path));
+ return xstrdup(make_nonrelative_path(path));
}
}
path = mkpath("%s%s", repo, bundle_suffix[i]);
if (!stat(path, &st) && S_ISREG(st.st_mode)) {
*is_bundle = 1;
- return xstrdup(make_absolute_path(path));
+ return xstrdup(make_nonrelative_path(path));
}
}
if (unlink(dest) && errno != ENOENT)
die("failed to unlink %s\n", dest);
- if (option_no_hardlinks) {
- if (copy_file(dest, src, 0666))
- die("failed to copy file to %s\n", dest);
- } else {
- if (link(src, dest))
+ if (!option_no_hardlinks) {
+ if (!link(src, dest))
+ continue;
+ if (option_local)
die("failed to create link %s\n", dest);
+ option_no_hardlinks = 1;
}
+ if (copy_file(dest, src, 0666))
+ die("failed to copy file to %s\n", dest);
}
+ closedir(dir);
}
static const struct ref *clone_local(const char *src_repo,
if (option_reference)
setup_reference(git_dir);
- git_config(git_default_config);
+ git_config(git_default_config, NULL);
if (option_bare) {
strcpy(branch_top, "refs/heads/");
struct remote *remote = remote_get(argv[0]);
struct transport *transport = transport_get(remote, argv[0]);
+ if (!transport->get_refs_list || !transport->fetch)
+ die("Don't know how to clone %s", transport->url);
+
transport_set_option(transport, TRANS_OPT_KEEP, "yes");
if (option_depth)
memset(&opts, 0, sizeof opts);
opts.update = 1;
+ opts.merge = 1;
+ opts.fn = oneway_merge;
opts.verbose_update = !option_quiet;
+ opts.src_index = &the_index;
opts.dst_index = &the_index;
tree = parse_tree_indirect(remote_head->old_sha1);