diff options
author | Ben Straub <bstraub@github.com> | 2012-07-21 20:12:28 -0700 |
---|---|---|
committer | Ben Straub <bstraub@github.com> | 2012-07-21 20:12:28 -0700 |
commit | dc03369c07c6222c763cca8a80452608c8cce435 (patch) | |
tree | 11057769c73496e29d3128bd3e048b728a04a26e | |
parent | 7cae2bcdf973c1b1eea8e139a6fd8de3b47f46ab (diff) | |
download | libgit2-dc03369c07c6222c763cca8a80452608c8cce435.tar.gz |
checkout: create submodule dirs
-rw-r--r-- | src/checkout.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/checkout.c b/src/checkout.c index c4e75b67a..c2e1c4994 100644 --- a/src/checkout.c +++ b/src/checkout.c @@ -87,8 +87,11 @@ static int checkout_walker(const char *path, const git_tree_entry *entry, void * int retcode = 0; tree_walk_data *data = (tree_walk_data*)payload; int attr = git_tree_entry_attributes(entry); - - /* TODO: handle submodules */ + git_buf fnbuf = GIT_BUF_INIT; + git_buf_join_n(&fnbuf, '/', 3, + git_repository_workdir(data->repo), + path, + git_tree_entry_name(entry)); switch(git_tree_entry_type(entry)) { @@ -96,21 +99,18 @@ static int checkout_walker(const char *path, const git_tree_entry *entry, void * /* Nothing to do; the blob handling creates necessary directories. */ break; + case GIT_OBJ_COMMIT: + /* Submodule */ + retcode = p_mkdir(git_buf_cstr(&fnbuf), 0644); + break; + case GIT_OBJ_BLOB: - { - git_buf fnbuf = GIT_BUF_INIT; - git_buf_join_n(&fnbuf, '/', 3, - git_repository_workdir(data->repo), - path, - git_tree_entry_name(entry)); - if (S_ISLNK(attr)) { - retcode = blob_contents_to_link(data, &fnbuf, - git_tree_entry_id(entry)); - } else { - retcode = blob_contents_to_file(data->repo, &fnbuf, - git_tree_entry_id(entry), attr); - } - git_buf_free(&fnbuf); + if (S_ISLNK(attr)) { + retcode = blob_contents_to_link(data, &fnbuf, + git_tree_entry_id(entry)); + } else { + retcode = blob_contents_to_file(data->repo, &fnbuf, + git_tree_entry_id(entry), attr); } break; @@ -119,6 +119,7 @@ static int checkout_walker(const char *path, const git_tree_entry *entry, void * break; } + git_buf_free(&fnbuf); data->stats->processed++; return retcode; } |