aboutsummaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2008-09-29 10:52:34 -0700
committerShawn O. Pearce <spearce@spearce.org>2008-09-29 10:52:34 -0700
commit5a139ba483efea47e103fef47afe87157e3bba77 (patch)
tree9b387acffb4bd7b886d2a1b05e18832ad079bff9 /dir.c
parentfdac6692a0b0eda293f9f1bf4bc49b05b29f3c45 (diff)
parentedb7e82f72106add9f2fbaf9d99d9532a72e3f91 (diff)
downloadgit-5a139ba483efea47e103fef47afe87157e3bba77.tar.gz
git-5a139ba483efea47e103fef47afe87157e3bba77.tar.xz
Merge branch 'maint' into bc/master-diff-hunk-header-fix
* maint: (41 commits) Clarify commit error message for unmerged files Use strchrnul() instead of strchr() plus manual workaround Use remove_path from dir.c instead of own implementation Add remove_path: a function to remove as much as possible of a path git-submodule: Fix "Unable to checkout" for the initial 'update' Clarify how the user can satisfy stash's 'dirty state' check. Remove empty directories in recursive merge Documentation: clarify the details of overriding LESS via core.pager Update release notes for 1.6.0.3 checkout: Do not show local changes when in quiet mode for-each-ref: Fix --format=%(subject) for log message without newlines git-stash.sh: don't default to refs/stash if invalid ref supplied maint: check return of split_cmdline to avoid bad config strings builtin-prune.c: prune temporary packs in <object_dir>/pack directory Do not perform cross-directory renames when creating packs Use dashless git commands in setgitperms.perl git-remote: do not use user input in a printf format string make "git remote" report multiple URLs Start draft release notes for 1.6.0.3 git-repack uses --no-repack-object, not --no-repack-delta. ... Conflicts: RelNotes
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/dir.c b/dir.c
index acf1001c4..1c3c50152 100644
--- a/dir.c
+++ b/dir.c
@@ -831,3 +831,23 @@ void setup_standard_excludes(struct dir_struct *dir)
if (excludes_file && !access(excludes_file, R_OK))
add_excludes_from_file(dir, excludes_file);
}
+
+int remove_path(const char *name)
+{
+ char *slash;
+
+ if (unlink(name) && errno != ENOENT)
+ return -1;
+
+ slash = strrchr(name, '/');
+ if (slash) {
+ char *dirs = xstrdup(name);
+ slash = dirs + (slash - name);
+ do {
+ *slash = '\0';
+ } while (rmdir(dirs) && (slash = strrchr(dirs, '/')));
+ free(dirs);
+ }
+ return 0;
+}
+