From: "Jaydeep Das via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Eric Sunshine <sunshine@sunshineco.com>,
Jaydeep Das <jaydeepjd.8914@gmail.com>,
Jaydeep Das <jaydeepjd.8914@gmail.com>
Subject: [PATCH v4] gpg-interface: add function for converting trust level to string
Date: Mon, 11 Jul 2022 05:00:50 +0000 [thread overview]
Message-ID: <pull.1281.v4.git.1657515650587.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1281.v3.git.1657341817595.gitgitgadget@gmail.com>
From: Jaydeep Das <jaydeepjd.8914@gmail.com>
Add new helper function `gpg_trust_level_to_str()` which will
convert a given member of `enum signature_trust_level` to its
corresponding string (in lowercase). For example, `TRUST_ULTIMATE`
will yield the string "ultimate".
This will abstract out some code in `pretty.c` relating to gpg
signature trust levels.
Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Mentored-by: Hariom Verma <hariom18599@gmail.com>
Signed-off-by: Jaydeep Das <jaydeepjd.8914@gmail.com>
---
gpg-interface: add function for converting trust level to string
Add new helper function gpg_trust_level_to_str() which will convert a
given member of enum signature_trust_level to its corresponding string
in lowercase. For example, TRUST_ULTIMATE will yield the string
"ultimate".
This will abstract out some code in pretty.c relating to gpg signature
trust levels.
Changes since v1:
* gpg_trust_level_to_str() now returns the string in lowercase.
Changes since v2:
* Updated docs.
Changes since v3:
* gpg_trust_level_to_str() now returns a static string. So the caller
does not have to worry about free()ing it.
* Updated pretty.c and docs accordingly.
Mentored-by: Christian Couder chriscool@tuxfamily.org Mentored-by:
Hariom Verma hariom18599@gmail.com Signed-off-by: Jaydeep Das
jaydeepjd.8914@gmail.com
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1281%2FJDeepD%2Fgpg-wrap-v4
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1281/JDeepD/gpg-wrap-v4
Pull-Request: https://github.com/gitgitgadget/git/pull/1281
Range-diff vs v3:
1: 933d6caa916 ! 1: 7692b83821d gpg-interface: add function for converting trust level to string
@@ gpg-interface.c: static struct {
{ 0, "TRUST_", GPG_STATUS_TRUST_LEVEL },
};
+-static struct {
+/* Keep the order same as enum signature_trust_level */
- static struct {
++static struct sigcheck_gpg_trust_level {
const char *key;
++ const char *display_key;
enum signature_trust_level value;
+ } sigcheck_gpg_trust_level[] = {
+- { "UNDEFINED", TRUST_UNDEFINED },
+- { "NEVER", TRUST_NEVER },
+- { "MARGINAL", TRUST_MARGINAL },
+- { "FULLY", TRUST_FULLY },
+- { "ULTIMATE", TRUST_ULTIMATE },
++ { "UNDEFINED", "undefined", TRUST_UNDEFINED },
++ { "NEVER", "never", TRUST_NEVER },
++ { "MARGINAL", "marginal", TRUST_MARGINAL },
++ { "FULLY", "fully", TRUST_FULLY },
++ { "ULTIMATE", "ultimate", TRUST_ULTIMATE },
+ };
+
+ static void replace_cstring(char **field, const char *line, const char *next)
@@ gpg-interface.c: const char *get_signing_key(void)
return git_committer_info(IDENT_STRICT | IDENT_NO_DATE);
}
-+char *gpg_trust_level_to_str(enum signature_trust_level level){
-+ if (level < TRUST_UNDEFINED || level > TRUST_ULTIMATE)
-+ return NULL;
-+ return xstrdup_tolower(sigcheck_gpg_trust_level[level].key);
++const char *gpg_trust_level_to_str(enum signature_trust_level level)
++{
++ struct sigcheck_gpg_trust_level *trust;
++
++ if (level < 0 || level >= ARRAY_SIZE(sigcheck_gpg_trust_level))
++ BUG("invalid trust level requested %d", level);
++
++ trust = &sigcheck_gpg_trust_level[level];
++ if (trust->value != level)
++ BUG("sigcheck_gpg_trust_level[] unsorted");
++
++ return sigcheck_gpg_trust_level[level].display_key;
+}
+
int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key)
@@ gpg-interface.h: size_t parse_signed_buffer(const char *buf, size_t size);
+/*
+ * Returns corresponding string in lowercase for a given member of
+ * enum signature_trust_level. For example, `TRUST_ULTIMATE` will
-+ * return "ultimate". Since it uses xstrdup_tolower(), which uses
-+ * xmallocz(), the caller has to free up the memory for returned string
-+ * after usage.
++ * return "ultimate".
+ */
-+char *gpg_trust_level_to_str(enum signature_trust_level level);
++const char *gpg_trust_level_to_str(enum signature_trust_level level);
+
int git_gpg_config(const char *, const char *, void *);
void set_signing_key(const char *);
const char *get_signing_key(void);
## pretty.c ##
-@@ pretty.c: static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
- const char *msg = c->message;
- struct commit_list *p;
- const char *arg, *eol;
-+ char *sig_str;
- size_t res;
- char **slot;
-
@@ pretty.c: static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
strbuf_addstr(sb, c->signature_check.primary_key_fingerprint);
break;
@@ pretty.c: static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
- strbuf_addstr(sb, "ultimate");
- break;
- }
-+ sig_str = gpg_trust_level_to_str(c->signature_check.trust_level);
-+ if (sig_str)
-+ strbuf_addstr(sb, sig_str);
-+ free(sig_str);
++ strbuf_addstr(sb, gpg_trust_level_to_str(c->signature_check.trust_level));
break;
default:
return 0;
gpg-interface.c | 28 ++++++++++++++++++++++------
gpg-interface.h | 8 ++++++++
pretty.c | 18 +-----------------
3 files changed, 31 insertions(+), 23 deletions(-)
diff --git a/gpg-interface.c b/gpg-interface.c
index 947b58ad4da..6dff2414603 100644
--- a/gpg-interface.c
+++ b/gpg-interface.c
@@ -165,15 +165,17 @@ static struct {
{ 0, "TRUST_", GPG_STATUS_TRUST_LEVEL },
};
-static struct {
+/* Keep the order same as enum signature_trust_level */
+static struct sigcheck_gpg_trust_level {
const char *key;
+ const char *display_key;
enum signature_trust_level value;
} sigcheck_gpg_trust_level[] = {
- { "UNDEFINED", TRUST_UNDEFINED },
- { "NEVER", TRUST_NEVER },
- { "MARGINAL", TRUST_MARGINAL },
- { "FULLY", TRUST_FULLY },
- { "ULTIMATE", TRUST_ULTIMATE },
+ { "UNDEFINED", "undefined", TRUST_UNDEFINED },
+ { "NEVER", "never", TRUST_NEVER },
+ { "MARGINAL", "marginal", TRUST_MARGINAL },
+ { "FULLY", "fully", TRUST_FULLY },
+ { "ULTIMATE", "ultimate", TRUST_ULTIMATE },
};
static void replace_cstring(char **field, const char *line, const char *next)
@@ -905,6 +907,20 @@ const char *get_signing_key(void)
return git_committer_info(IDENT_STRICT | IDENT_NO_DATE);
}
+const char *gpg_trust_level_to_str(enum signature_trust_level level)
+{
+ struct sigcheck_gpg_trust_level *trust;
+
+ if (level < 0 || level >= ARRAY_SIZE(sigcheck_gpg_trust_level))
+ BUG("invalid trust level requested %d", level);
+
+ trust = &sigcheck_gpg_trust_level[level];
+ if (trust->value != level)
+ BUG("sigcheck_gpg_trust_level[] unsorted");
+
+ return sigcheck_gpg_trust_level[level].display_key;
+}
+
int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key)
{
return use_format->sign_buffer(buffer, signature, signing_key);
diff --git a/gpg-interface.h b/gpg-interface.h
index b30cbdcd3da..8a9ef41779e 100644
--- a/gpg-interface.h
+++ b/gpg-interface.h
@@ -71,6 +71,14 @@ size_t parse_signed_buffer(const char *buf, size_t size);
int sign_buffer(struct strbuf *buffer, struct strbuf *signature,
const char *signing_key);
+
+/*
+ * Returns corresponding string in lowercase for a given member of
+ * enum signature_trust_level. For example, `TRUST_ULTIMATE` will
+ * return "ultimate".
+ */
+const char *gpg_trust_level_to_str(enum signature_trust_level level);
+
int git_gpg_config(const char *, const char *, void *);
void set_signing_key(const char *);
const char *get_signing_key(void);
diff --git a/pretty.c b/pretty.c
index ee6114e3f0a..6d819103fbf 100644
--- a/pretty.c
+++ b/pretty.c
@@ -1575,23 +1575,7 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
strbuf_addstr(sb, c->signature_check.primary_key_fingerprint);
break;
case 'T':
- switch (c->signature_check.trust_level) {
- case TRUST_UNDEFINED:
- strbuf_addstr(sb, "undefined");
- break;
- case TRUST_NEVER:
- strbuf_addstr(sb, "never");
- break;
- case TRUST_MARGINAL:
- strbuf_addstr(sb, "marginal");
- break;
- case TRUST_FULLY:
- strbuf_addstr(sb, "fully");
- break;
- case TRUST_ULTIMATE:
- strbuf_addstr(sb, "ultimate");
- break;
- }
+ strbuf_addstr(sb, gpg_trust_level_to_str(c->signature_check.trust_level));
break;
default:
return 0;
base-commit: 30cc8d0f147546d4dd77bf497f4dec51e7265bd8
--
gitgitgadget
next prev parent reply other threads:[~2022-07-11 5:01 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-07 13:57 [PATCH] gpg-interface: add function for converting trust level to string Jaydeep Das via GitGitGadget
2022-07-07 18:18 ` Junio C Hamano
2022-07-08 11:24 ` [PATCH v2] " Jaydeep Das via GitGitGadget
2022-07-09 0:58 ` Eric Sunshine
2022-07-09 3:51 ` jaydeepjd.8914
2022-07-09 20:52 ` Junio C Hamano
2022-07-10 5:44 ` Eric Sunshine
2022-07-10 5:48 ` Junio C Hamano
2022-07-10 6:21 ` Eric Sunshine
2022-07-11 3:51 ` Jaydeep Das
2022-07-09 4:43 ` [PATCH v3] " Jaydeep Das via GitGitGadget
2022-07-11 5:00 ` Jaydeep Das via GitGitGadget [this message]
2022-07-11 5:12 ` [PATCH v4] " Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.1281.v4.git.1657515650587.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=jaydeepjd.8914@gmail.com \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).