| /* |
| * Licensed under a two-clause BSD-style license. |
| * See LICENSE for details. |
| */ |
| |
| #include "git-compat-util.h" |
| #include "strbuf.h" |
| #include "repo_tree.h" |
| #include "fast_export.h" |
| |
| const char *repo_read_path(const char *path, uint32_t *mode_out) |
| { |
| int err; |
| static struct strbuf buf = STRBUF_INIT; |
| |
| strbuf_reset(&buf); |
| err = fast_export_ls(path, mode_out, &buf); |
| if (err) { |
| if (errno != ENOENT) |
| die_errno("BUG: unexpected fast_export_ls error"); |
| /* Treat missing paths as directories. */ |
| *mode_out = REPO_MODE_DIR; |
| return NULL; |
| } |
| return buf.buf; |
| } |
| |
| void repo_copy(uint32_t revision, const char *src, const char *dst) |
| { |
| int err; |
| uint32_t mode; |
| static struct strbuf data = STRBUF_INIT; |
| |
| strbuf_reset(&data); |
| err = fast_export_ls_rev(revision, src, &mode, &data); |
| if (err) { |
| if (errno != ENOENT) |
| die_errno("BUG: unexpected fast_export_ls_rev error"); |
| fast_export_delete(dst); |
| return; |
| } |
| fast_export_modify(dst, mode, data.buf); |
| } |
| |
| void repo_delete(const char *path) |
| { |
| fast_export_delete(path); |
| } |