From dabab1d6e6c49f3d4a6393a9984e3f6a4e8fb991 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Tue, 11 Apr 2023 00:41:49 -0700 Subject: object-name.h: move declarations for object-name.c functions from cache.h Signed-off-by: Elijah Newren Acked-by: Calvin Wan Signed-off-by: Junio C Hamano --- strbuf.c | 1 + 1 file changed, 1 insertion(+) (limited to 'strbuf.c') diff --git a/strbuf.c b/strbuf.c index 70a83e7980..1b93d9d3c4 100644 --- a/strbuf.c +++ b/strbuf.c @@ -4,6 +4,7 @@ #include "environment.h" #include "gettext.h" #include "hex.h" +#include "object-name.h" #include "refs.h" #include "string-list.h" #include "utf8.h" -- cgit v1.3 From e93fc5d721738de978ef06acb62daa3df3c40625 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Tue, 11 Apr 2023 00:41:50 -0700 Subject: treewide: remove cache.h inclusion due to object-name.h changes Signed-off-by: Elijah Newren Acked-by: Calvin Wan Signed-off-by: Junio C Hamano --- branch.c | 1 - checkout.c | 3 ++- fmt-merge-msg.c | 2 +- mailmap.c | 2 +- notes.c | 2 +- refs.c | 2 +- remote.c | 2 +- setup.c | 2 +- strbuf.c | 2 +- t/helper/test-oidmap.c | 1 - t/helper/test-reach.c | 1 - t/helper/test-submodule-config.c | 1 - transport-helper.c | 2 +- 13 files changed, 10 insertions(+), 13 deletions(-) (limited to 'strbuf.c') diff --git a/branch.c b/branch.c index f29743b161..7df982693a 100644 --- a/branch.c +++ b/branch.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "cache.h" #include "advice.h" #include "config.h" #include "branch.h" diff --git a/checkout.c b/checkout.c index 9235073fc0..04238b2713 100644 --- a/checkout.c +++ b/checkout.c @@ -1,9 +1,10 @@ -#include "cache.h" +#include "git-compat-util.h" #include "object-name.h" #include "remote.h" #include "refspec.h" #include "checkout.h" #include "config.h" +#include "strbuf.h" struct tracking_name_data { /* const */ char *src_ref; diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c index 21019c932b..5af0d4715b 100644 --- a/fmt-merge-msg.c +++ b/fmt-merge-msg.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "alloc.h" #include "config.h" #include "environment.h" diff --git a/mailmap.c b/mailmap.c index d62d7bf0e7..28d389c1f9 100644 --- a/mailmap.c +++ b/mailmap.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "environment.h" #include "string-list.h" #include "mailmap.h" diff --git a/notes.c b/notes.c index c07bcbe348..02f1aa39ae 100644 --- a/notes.c +++ b/notes.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "config.h" #include "environment.h" #include "hex.h" diff --git a/refs.c b/refs.c index 979ed3fbed..d2a98e1c21 100644 --- a/refs.c +++ b/refs.c @@ -2,7 +2,7 @@ * The backend-independent part of the reference module. */ -#include "cache.h" +#include "git-compat-util.h" #include "advice.h" #include "alloc.h" #include "config.h" diff --git a/remote.c b/remote.c index 3afedce593..2947743d60 100644 --- a/remote.c +++ b/remote.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "abspath.h" #include "alloc.h" #include "config.h" diff --git a/setup.c b/setup.c index 8a297b3cb5..a546da755f 100644 --- a/setup.c +++ b/setup.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "abspath.h" #include "environment.h" #include "gettext.h" diff --git a/strbuf.c b/strbuf.c index 1b93d9d3c4..b2e3735ba8 100644 --- a/strbuf.c +++ b/strbuf.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "abspath.h" #include "alloc.h" #include "environment.h" diff --git a/t/helper/test-oidmap.c b/t/helper/test-oidmap.c index bf4fcfe6ef..de6ab77fda 100644 --- a/t/helper/test-oidmap.c +++ b/t/helper/test-oidmap.c @@ -1,5 +1,4 @@ #include "test-tool.h" -#include "cache.h" #include "hex.h" #include "object-name.h" #include "oidmap.h" diff --git a/t/helper/test-reach.c b/t/helper/test-reach.c index d4fa33ae75..5b6f217441 100644 --- a/t/helper/test-reach.c +++ b/t/helper/test-reach.c @@ -1,5 +1,4 @@ #include "test-tool.h" -#include "cache.h" #include "alloc.h" #include "commit.h" #include "commit-reach.h" diff --git a/t/helper/test-submodule-config.c b/t/helper/test-submodule-config.c index 4758c8654e..c7c7fdbea9 100644 --- a/t/helper/test-submodule-config.c +++ b/t/helper/test-submodule-config.c @@ -1,5 +1,4 @@ #include "test-tool.h" -#include "cache.h" #include "config.h" #include "object-name.h" #include "setup.h" diff --git a/transport-helper.c b/transport-helper.c index ca8bec04bb..6b816940dc 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "transport.h" #include "quote.h" #include "run-command.h" -- cgit v1.3 From 4e120823a345cf348a052683d726c90bc4b256ca Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Tue, 11 Apr 2023 00:41:57 -0700 Subject: editor: move editor-related functions and declarations into common file cache.h and strbuf.[ch] had editor-related functions. Move these into editor.[ch]. Signed-off-by: Elijah Newren Acked-by: Calvin Wan Signed-off-by: Junio C Hamano --- add-patch.c | 1 + builtin/add.c | 1 + builtin/am.c | 1 + builtin/branch.c | 1 + builtin/bugreport.c | 1 + builtin/commit.c | 1 + builtin/config.c | 1 + builtin/merge.c | 1 + builtin/notes.c | 1 + builtin/replace.c | 1 + builtin/tag.c | 1 + builtin/var.c | 1 + cache.h | 3 --- color.c | 1 + editor.c | 30 ++++++++++++++++++++++++++++++ editor.h | 34 ++++++++++++++++++++++++++++++++++ pager.c | 1 + rebase-interactive.c | 1 + sideband.c | 1 + strbuf.c | 28 ---------------------------- strbuf.h | 24 ------------------------ 21 files changed, 80 insertions(+), 55 deletions(-) create mode 100644 editor.h (limited to 'strbuf.c') diff --git a/add-patch.c b/add-patch.c index b01ba8fa81..8d770d203f 100644 --- a/add-patch.c +++ b/add-patch.c @@ -2,6 +2,7 @@ #include "add-interactive.h" #include "advice.h" #include "alloc.h" +#include "editor.h" #include "environment.h" #include "gettext.h" #include "object-name.h" diff --git a/builtin/add.c b/builtin/add.c index d3c51e2814..76cc026a68 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -9,6 +9,7 @@ #include "config.h" #include "builtin.h" #include "lockfile.h" +#include "editor.h" #include "dir.h" #include "gettext.h" #include "pathspec.h" diff --git a/builtin/am.c b/builtin/am.c index 0d7ee28bdd..f7a065e529 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -9,6 +9,7 @@ #include "advice.h" #include "config.h" #include "builtin.h" +#include "editor.h" #include "environment.h" #include "exec-cmd.h" #include "gettext.h" diff --git a/builtin/branch.c b/builtin/branch.c index 7c1c872708..1fb11d55e6 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -8,6 +8,7 @@ #include "cache.h" #include "config.h" #include "color.h" +#include "editor.h" #include "environment.h" #include "refs.h" #include "commit.h" diff --git a/builtin/bugreport.c b/builtin/bugreport.c index 03fb053691..daf6c23657 100644 --- a/builtin/bugreport.c +++ b/builtin/bugreport.c @@ -1,5 +1,6 @@ #include "builtin.h" #include "abspath.h" +#include "editor.h" #include "gettext.h" #include "parse-options.h" #include "strbuf.h" diff --git a/builtin/commit.c b/builtin/commit.c index 682f47c8d5..e67c4be221 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -13,6 +13,7 @@ #include "cache-tree.h" #include "color.h" #include "dir.h" +#include "editor.h" #include "environment.h" #include "builtin.h" #include "diff.h" diff --git a/builtin/config.c b/builtin/config.c index fe79fb60c4..9401f1e5e3 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -3,6 +3,7 @@ #include "alloc.h" #include "config.h" #include "color.h" +#include "editor.h" #include "environment.h" #include "gettext.h" #include "ident.h" diff --git a/builtin/merge.c b/builtin/merge.c index 693f185d4d..8da3e46abb 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -12,6 +12,7 @@ #include "advice.h" #include "alloc.h" #include "config.h" +#include "editor.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/builtin/notes.c b/builtin/notes.c index 896140b905..d5788352b6 100644 --- a/builtin/notes.c +++ b/builtin/notes.c @@ -10,6 +10,7 @@ #include "cache.h" #include "config.h" #include "builtin.h" +#include "editor.h" #include "gettext.h" #include "hex.h" #include "notes.h" diff --git a/builtin/replace.c b/builtin/replace.c index f4b3a8efb2..981f189443 100644 --- a/builtin/replace.c +++ b/builtin/replace.c @@ -11,6 +11,7 @@ #include "cache.h" #include "config.h" #include "builtin.h" +#include "editor.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/builtin/tag.c b/builtin/tag.c index 88a2590230..7d189a4a5d 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -10,6 +10,7 @@ #include "advice.h" #include "config.h" #include "builtin.h" +#include "editor.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/builtin/var.c b/builtin/var.c index d9943be9af..90616cf65a 100644 --- a/builtin/var.c +++ b/builtin/var.c @@ -5,6 +5,7 @@ */ #include "builtin.h" #include "config.h" +#include "editor.h" #include "ident.h" #include "refs.h" diff --git a/cache.h b/cache.h index 394e8d0125..97ddf4094a 100644 --- a/cache.h +++ b/cache.h @@ -621,10 +621,7 @@ int df_name_compare(const char *name1, size_t len1, int mode1, int name_compare(const char *name1, size_t len1, const char *name2, size_t len2); int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2); -const char *git_editor(void); -const char *git_sequence_editor(void); const char *git_pager(int stdout_is_tty); -int is_terminal_dumb(void); struct cache_def { struct strbuf path; diff --git a/color.c b/color.c index 672dcbb73a..a8e8d5202a 100644 --- a/color.c +++ b/color.c @@ -1,6 +1,7 @@ #include "cache.h" #include "config.h" #include "color.h" +#include "editor.h" #include "gettext.h" #include "hex.h" diff --git a/editor.c b/editor.c index 3bea3ef72f..12025dfec3 100644 --- a/editor.c +++ b/editor.c @@ -2,12 +2,14 @@ #include "abspath.h" #include "advice.h" #include "config.h" +#include "editor.h" #include "environment.h" #include "gettext.h" #include "strbuf.h" #include "strvec.h" #include "run-command.h" #include "sigchain.h" +#include "wrapper.h" #ifndef DEFAULT_EDITOR #define DEFAULT_EDITOR "vi" @@ -130,3 +132,31 @@ int launch_sequence_editor(const char *path, struct strbuf *buffer, { return launch_specified_editor(git_sequence_editor(), path, buffer, env); } + +int strbuf_edit_interactively(struct strbuf *buffer, const char *path, + const char *const *env) +{ + char *path2 = NULL; + int fd, res = 0; + + if (!is_absolute_path(path)) + path = path2 = xstrdup(git_path("%s", path)); + + fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0666); + if (fd < 0) + res = error_errno(_("could not open '%s' for writing"), path); + else if (write_in_full(fd, buffer->buf, buffer->len) < 0) { + res = error_errno(_("could not write to '%s'"), path); + close(fd); + } else if (close(fd) < 0) + res = error_errno(_("could not close '%s'"), path); + else { + strbuf_reset(buffer); + if (launch_editor(path, buffer, env) < 0) + res = error_errno(_("could not edit '%s'"), path); + unlink(path); + } + + free(path2); + return res; +} diff --git a/editor.h b/editor.h new file mode 100644 index 0000000000..8016bb5e00 --- /dev/null +++ b/editor.h @@ -0,0 +1,34 @@ +#ifndef EDITOR_H +#define EDITOR_H + +struct strbuf; + +const char *git_editor(void); +const char *git_sequence_editor(void); +int is_terminal_dumb(void); + +/** + * Launch the user preferred editor to edit a file and fill the buffer + * with the file's contents upon the user completing their editing. The + * third argument can be used to set the environment which the editor is + * run in. If the buffer is NULL the editor is launched as usual but the + * file's contents are not read into the buffer upon completion. + */ +int launch_editor(const char *path, struct strbuf *buffer, + const char *const *env); + +int launch_sequence_editor(const char *path, struct strbuf *buffer, + const char *const *env); + +/* + * In contrast to `launch_editor()`, this function writes out the contents + * of the specified file first, then clears the `buffer`, then launches + * the editor and reads back in the file contents into the `buffer`. + * Finally, it deletes the temporary file. + * + * If `path` is relative, it refers to a file in the `.git` directory. + */ +int strbuf_edit_interactively(struct strbuf *buffer, const char *path, + const char *const *env); + +#endif diff --git a/pager.c b/pager.c index b66bbff278..6367e8ef86 100644 --- a/pager.c +++ b/pager.c @@ -1,5 +1,6 @@ #include "cache.h" #include "config.h" +#include "editor.h" #include "run-command.h" #include "sigchain.h" #include "alias.h" diff --git a/rebase-interactive.c b/rebase-interactive.c index 6ff12d7be2..789f407361 100644 --- a/rebase-interactive.c +++ b/rebase-interactive.c @@ -1,5 +1,6 @@ #include "git-compat-util.h" #include "commit.h" +#include "editor.h" #include "environment.h" #include "gettext.h" #include "sequencer.h" diff --git a/sideband.c b/sideband.c index 0af582858b..25e2a18571 100644 --- a/sideband.c +++ b/sideband.c @@ -1,6 +1,7 @@ #include "cache.h" #include "color.h" #include "config.h" +#include "editor.h" #include "gettext.h" #include "sideband.h" #include "help.h" diff --git a/strbuf.c b/strbuf.c index b2e3735ba8..729378ec82 100644 --- a/strbuf.c +++ b/strbuf.c @@ -1180,34 +1180,6 @@ int strbuf_normalize_path(struct strbuf *src) return 0; } -int strbuf_edit_interactively(struct strbuf *buffer, const char *path, - const char *const *env) -{ - char *path2 = NULL; - int fd, res = 0; - - if (!is_absolute_path(path)) - path = path2 = xstrdup(git_path("%s", path)); - - fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0666); - if (fd < 0) - res = error_errno(_("could not open '%s' for writing"), path); - else if (write_in_full(fd, buffer->buf, buffer->len) < 0) { - res = error_errno(_("could not write to '%s'"), path); - close(fd); - } else if (close(fd) < 0) - res = error_errno(_("could not close '%s'"), path); - else { - strbuf_reset(buffer); - if (launch_editor(path, buffer, env) < 0) - res = error_errno(_("could not edit '%s'"), path); - unlink(path); - } - - free(path2); - return res; -} - void strbuf_strip_file_from_path(struct strbuf *sb) { char *path_sep = find_last_dir_sep(sb->buf); diff --git a/strbuf.h b/strbuf.h index b980f9edc6..3dfeadb44c 100644 --- a/strbuf.h +++ b/strbuf.h @@ -640,30 +640,6 @@ void strbuf_repo_add_unique_abbrev(struct strbuf *sb, struct repository *repo, void strbuf_add_unique_abbrev(struct strbuf *sb, const struct object_id *oid, int abbrev_len); -/** - * Launch the user preferred editor to edit a file and fill the buffer - * with the file's contents upon the user completing their editing. The - * third argument can be used to set the environment which the editor is - * run in. If the buffer is NULL the editor is launched as usual but the - * file's contents are not read into the buffer upon completion. - */ -int launch_editor(const char *path, struct strbuf *buffer, - const char *const *env); - -int launch_sequence_editor(const char *path, struct strbuf *buffer, - const char *const *env); - -/* - * In contrast to `launch_editor()`, this function writes out the contents - * of the specified file first, then clears the `buffer`, then launches - * the editor and reads back in the file contents into the `buffer`. - * Finally, it deletes the temporary file. - * - * If `path` is relative, it refers to a file in the `.git` directory. - */ -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 -- cgit v1.3