strbuf: introduce strbuf_strip_file_from_path()

The strbuf_parent_directory() method was added as a static method in contrib/scalar by d0feac4e8c0 (scalar: 'register' sets recommended config and starts maintenance, 2021-12-03) and then removed in 65f6a9eb0b9 (scalar: constrain enlistment search, 2022-08-18), but now there is a need for a similar method in the bundle URI feature. Re-add the method, this time in strbuf.c, but with a new name: strbuf_strip_file_from_path(). The method requirements are slightly modified to allow a trailing slash, in which case nothing is done, which makes the name change valuable. Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Derrick Stolee committed Dec 22, 2022 at 15:14 UTC 9ea57964953dec11dcbbd5d4bf44a5e3781f5880
2 files changed +17
strbuf.c
+6
@@ -1200,3 +1200,9 @@ int strbuf_edit_interactively(struct strbuf *buffer, const char *path,
1200 free(path2);
1201 return res;
1202 }
1203 +
1204 +void strbuf_strip_file_from_path(struct strbuf *sb)
1205 +{
1206 + char *path_sep = find_last_dir_sep(sb->buf);
1207 + strbuf_setlen(sb, path_sep ? path_sep - sb->buf + 1 : 0);
1208 +}
strbuf.h
+11
@@ -664,6 +664,17 @@ int launch_sequence_editor(const char *path, struct strbuf *buffer,
664 int strbuf_edit_interactively(struct strbuf *buffer, const char *path,
665 const char *const *env);
666
667 +/*
668 + * Remove the filename from the provided path string. If the path
669 + * contains a trailing separator, then the path is considered a directory
670 + * and nothing is modified.
671 + *
672 + * Examples:
673 + * - "/path/to/file" -> "/path/to/"
674 + * - "/path/to/dir/" -> "/path/to/dir/"
675 + */
676 +void strbuf_strip_file_from_path(struct strbuf *sb);
677 +
678 void strbuf_add_lines(struct strbuf *sb,
679 const char *prefix,
680 const char *buf,