strbuf: introduce strbuf_strip_file_from_path()

The strbuf_parent_directory() method was added as a static method in
contrib/scalar by d0feac4e8c (scalar: 'register' sets recommended
config and starts maintenance, 2021-12-03) and then removed in
65f6a9eb0b (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>
This commit is contained in:
Derrick Stolee 2022-12-22 15:14:14 +00:00 коммит произвёл Junio C Hamano
Родитель 738dc7d4a5
Коммит 9ea5796495
2 изменённых файлов: 17 добавлений и 0 удалений

Просмотреть файл

@ -1200,3 +1200,9 @@ int strbuf_edit_interactively(struct strbuf *buffer, const char *path,
free(path2);
return res;
}
void strbuf_strip_file_from_path(struct strbuf *sb)
{
char *path_sep = find_last_dir_sep(sb->buf);
strbuf_setlen(sb, path_sep ? path_sep - sb->buf + 1 : 0);
}

Просмотреть файл

@ -664,6 +664,17 @@ int launch_sequence_editor(const char *path, struct strbuf *buffer,
int strbuf_edit_interactively(struct strbuf *buffer, const char *path,
const char *const *env);
/*
* Remove the filename from the provided path string. If the path
* contains a trailing separator, then the path is considered a directory
* and nothing is modified.
*
* Examples:
* - "/path/to/file" -> "/path/to/"
* - "/path/to/dir/" -> "/path/to/dir/"
*/
void strbuf_strip_file_from_path(struct strbuf *sb);
void strbuf_add_lines(struct strbuf *sb,
const char *prefix,
const char *buf,