Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
builtin-clone: use strbuf in clone_local() and copy_or_link_directory()
author
Miklos Vajna
<vmiklos@frugalware.org>
Fri, 21 Nov 2008 00:45:00 +0000
(
01:45
+0100)
committer
Junio C Hamano
<gitster@pobox.com>
Tue, 25 Nov 2008 23:34:25 +0000
(15:34 -0800)
Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-clone.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
32716a2
)
diff --git
a/builtin-clone.c
b/builtin-clone.c
index 275b690b3c053595e013f9594f5bfbc2c03e3503..c590d4a179684cd33b0e22dcd823a16f8b3f26e7 100644
(file)
--- a/
builtin-clone.c
+++ b/
builtin-clone.c
@@
-183,36
+183,38
@@
static void setup_reference(const char *repo)
free(ref_git_copy);
}
free(ref_git_copy);
}
-static void copy_or_link_directory(
char *src, char
*dest)
+static void copy_or_link_directory(
struct strbuf *src, struct strbuf
*dest)
{
struct dirent *de;
struct stat buf;
int src_len, dest_len;
DIR *dir;
{
struct dirent *de;
struct stat buf;
int src_len, dest_len;
DIR *dir;
- dir = opendir(src);
+ dir = opendir(src
->buf
);
if (!dir)
if (!dir)
- die("failed to open %s\n", src);
+ die("failed to open %s\n", src
->buf
);
- if (mkdir(dest, 0777)) {
+ if (mkdir(dest
->buf
, 0777)) {
if (errno != EEXIST)
if (errno != EEXIST)
- die("failed to create directory %s\n", dest);
- else if (stat(dest, &buf))
- die("failed to stat %s\n", dest);
+ die("failed to create directory %s\n", dest
->buf
);
+ else if (stat(dest
->buf
, &buf))
+ die("failed to stat %s\n", dest
->buf
);
else if (!S_ISDIR(buf.st_mode))
else if (!S_ISDIR(buf.st_mode))
- die("%s exists and is not a directory\n", dest);
+ die("%s exists and is not a directory\n", dest
->buf
);
}
}
- s
rc_len = strlen(src
);
- src
[src_len] = '/'
;
-
dest_len = strlen(dest
);
- dest
[dest_len] = '/'
;
+ s
trbuf_addch(src, '/'
);
+ src
_len = src->len
;
+
strbuf_addch(dest, '/'
);
+ dest
_len = dest->len
;
while ((de = readdir(dir)) != NULL) {
while ((de = readdir(dir)) != NULL) {
- strcpy(src + src_len + 1, de->d_name);
- strcpy(dest + dest_len + 1, de->d_name);
- if (stat(src, &buf)) {
- warning ("failed to stat %s\n", src);
+ strbuf_setlen(src, src_len);
+ strbuf_addstr(src, de->d_name);
+ strbuf_setlen(dest, dest_len);
+ strbuf_addstr(dest, de->d_name);
+ if (stat(src->buf, &buf)) {
+ warning ("failed to stat %s\n", src->buf);
continue;
}
if (S_ISDIR(buf.st_mode)) {
continue;
}
if (S_ISDIR(buf.st_mode)) {
@@
-221,17
+223,17
@@
static void copy_or_link_directory(char *src, char *dest)
continue;
}
continue;
}
- if (unlink(dest) && errno != ENOENT)
- die("failed to unlink %s\n", dest);
+ if (unlink(dest
->buf
) && errno != ENOENT)
+ die("failed to unlink %s\n", dest
->buf
);
if (!option_no_hardlinks) {
if (!option_no_hardlinks) {
- if (!link(src
, dest
))
+ if (!link(src
->buf, dest->buf
))
continue;
if (option_local)
continue;
if (option_local)
- die("failed to create link %s\n", dest);
+ die("failed to create link %s\n", dest
->buf
);
option_no_hardlinks = 1;
}
option_no_hardlinks = 1;
}
- if (copy_file(dest
, src
, 0666))
- die("failed to copy file to %s\n", dest);
+ if (copy_file(dest
->buf, src->buf
, 0666))
+ die("failed to copy file to %s\n", dest
->buf
);
}
closedir(dir);
}
}
closedir(dir);
}
@@
-240,17
+242,19
@@
static const struct ref *clone_local(const char *src_repo,
const char *dest_repo)
{
const struct ref *ret;
const char *dest_repo)
{
const struct ref *ret;
-
char src[PATH_MAX]
;
-
char dest[PATH_MAX]
;
+
struct strbuf src = STRBUF_INIT
;
+
struct strbuf dest = STRBUF_INIT
;
struct remote *remote;
struct transport *transport;
if (option_shared)
add_to_alternates_file(src_repo);
else {
struct remote *remote;
struct transport *transport;
if (option_shared)
add_to_alternates_file(src_repo);
else {
- snprintf(src, PATH_MAX, "%s/objects", src_repo);
- snprintf(dest, PATH_MAX, "%s/objects", dest_repo);
- copy_or_link_directory(src, dest);
+ strbuf_addf(&src, "%s/objects", src_repo);
+ strbuf_addf(&dest, "%s/objects", dest_repo);
+ copy_or_link_directory(&src, &dest);
+ strbuf_release(&src);
+ strbuf_release(&dest);
}
remote = remote_get(src_repo);
}
remote = remote_get(src_repo);