diff options
author | Russell Belfer <rb@github.com> | 2013-05-14 15:05:52 -0700 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2013-05-14 15:05:52 -0700 |
commit | 33539b109c5e0bcd995c71412549fc0819f2ee90 (patch) | |
tree | 740ec2c0e8feb1f817c624aeca12b1943659da1d /src | |
parent | 103a2c7727044fa30fcffb343209834e8a9768cf (diff) | |
parent | fbcab44b208ae726450289794ecf8e69af3f7e58 (diff) | |
download | libgit2-33539b109c5e0bcd995c71412549fc0819f2ee90.tar.gz |
Merge pull request #1582 from dmgctrl/checkout_symlink_fix
Create directory for symlink before creating symlink
Diffstat (limited to 'src')
-rw-r--r-- | src/checkout.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/checkout.c b/src/checkout.c index e9ec2bdab..6835db073 100644 --- a/src/checkout.c +++ b/src/checkout.c @@ -764,11 +764,14 @@ cleanup: } static int blob_content_to_link( - struct stat *st, git_blob *blob, const char *path, int can_symlink) + struct stat *st, git_blob *blob, const char *path, mode_t dir_mode, int can_symlink) { git_buf linktarget = GIT_BUF_INIT; int error; + if ((error = git_futils_mkpath2file(path, dir_mode)) < 0) + return error; + if ((error = git_blob__getbuf(&linktarget, blob)) < 0) return error; @@ -914,7 +917,7 @@ static int checkout_blob( if (S_ISLNK(file->mode)) error = blob_content_to_link( - &st, blob, git_buf_cstr(&data->path), data->can_symlink); + &st, blob, git_buf_cstr(&data->path), data->opts.dir_mode, data->can_symlink); else error = blob_content_to_file( &st, blob, git_buf_cstr(&data->path), file->mode, &data->opts); |