From: Yi EungJun <semtlenori@gmail.com>
To: git@vger.kernel.org
Cc: Yi EungJun <eungjun.yi@navercorp.com>
Subject: [PATCH] http: Add Accept-Language header if possible
Date: Wed, 9 Jul 2014 00:54:06 +0900 [thread overview]
Message-ID: <1404834846-11812-1-git-send-email-eungjun.yi@navercorp.com> (raw)
From: Yi EungJun <eungjun.yi@navercorp.com>
Add an Accept-Language header which indicates the user's preferred
languages defined by 'LANGUAGE' environment variable if the variable is
not empty.
Example:
LANGUAGE= -> ""
LANGUAGE=ko -> "Accept-Language: ko; q=1.000, *; q=0.001"
LANGUAGE=ko:en -> "Accept-Language: ko; q=1.000, en; q=0.999, *; q=0.001"
This gives git servers a chance to display remote error messages in
the user's preferred language.
---
http.c | 43 +++++++++++++++++++++++++++++++++++++++++++
t/t5550-http-fetch-dumb.sh | 10 ++++++++++
2 files changed, 53 insertions(+)
diff --git a/http.c b/http.c
index 3a28b21..c345616 100644
--- a/http.c
+++ b/http.c
@@ -983,6 +983,47 @@ static void extract_content_type(struct strbuf *raw, struct strbuf *type,
strbuf_addstr(charset, "ISO-8859-1");
}
+/*
+ * Add an Accept-Language header which indicates user's preferred languages
+ * defined by 'LANGUAGE' environment variable if the variable is not empty.
+ *
+ * Example:
+ * LANGUAGE= -> ""
+ * LANGUAGE=ko -> "Accept-Language: ko; q=1.000, *; q=0.001"
+ * LANGUAGE=ko:en -> "Accept-Language: ko; q=1.000, en; q=0.999, *; q=0.001"
+ */
+static void add_accept_language(struct strbuf *buf)
+{
+ const char *p1, *p2;
+ float q = 1.000;
+
+ p1 = getenv("LANGUAGE");
+
+ if (p1 != NULL && p1[0] != '\0') {
+ strbuf_reset(buf);
+ strbuf_addstr(buf, "Accept-Language: ");
+ for (p2 = p1; q > 0.001; p2++) {
+ if ((*p2 == ':' || *p2 == '\0') && p1 != p2) {
+ if (q < 1.0) {
+ strbuf_addstr(buf, ", ");
+ }
+ strbuf_add(buf, p1, p2 - p1);
+ strbuf_addf(buf, "; q=%.3f", q);
+ q -= 0.001;
+ p1 = p2 + 1;
+
+ if (*p2 == '\0') {
+ break;
+ }
+ }
+ }
+ if (q < 1.0) {
+ strbuf_addstr(buf, ", ");
+ }
+ strbuf_addstr(buf, "*; q=0.001\r\n");
+ }
+}
+
/* http_request() targets */
#define HTTP_REQUEST_STRBUF 0
#define HTTP_REQUEST_FILE 1
@@ -1020,6 +1061,8 @@ static int http_request(const char *url,
fwrite_buffer);
}
+ add_accept_language(&buf);
+
strbuf_addstr(&buf, "Pragma:");
if (options && options->no_cache)
strbuf_addstr(&buf, " no-cache");
diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh
index ac71418..ea15158 100755
--- a/t/t5550-http-fetch-dumb.sh
+++ b/t/t5550-http-fetch-dumb.sh
@@ -196,5 +196,15 @@ test_expect_success 'reencoding is robust to whitespace oddities' '
grep "this is the error message" stderr
'
+test_expect_success 'git client sends Accept-Language' '
+ GIT_CURL_VERBOSE=1 LANGUAGE=ko:en git clone "$HTTPD_URL/accept/language" 2>actual
+ grep "^Accept-Language: ko; q=1.000, en; q=0.999, \*; q=0.001" actual
+'
+
+test_expect_success 'git client does not send Accept-Language' '
+ GIT_CURL_VERBOSE=1 LANGUAGE= git clone "$HTTPD_URL/accept/language" 2>actual
+ test_must_fail grep "^Accept-Language:" actual
+'
+
stop_httpd
test_done
--
2.0.1.473.gafdefd9.dirty
next reply other threads:[~2014-07-08 15:54 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-08 15:54 Yi EungJun [this message]
2014-07-08 21:52 ` [PATCH] http: Add Accept-Language header if possible Eric Sunshine
[not found] ` <CAFT+Tg-6fR9OJ93TT7ww3x=zYHY=Dh5u-7owgQMBK5o_JKLEaA@mail.gmail.com>
[not found] ` <CAPig+cQ05pzU9uVBqS8tBHvB8_3qAtgsPYz1sGhpa0W1CVymqA@mail.gmail.com>
2014-07-11 16:35 ` Yi, EungJun
2014-07-09 5:10 ` Jeff King
2014-07-09 5:46 ` Yi, EungJun
2014-07-09 6:18 ` Jeff King
2014-07-09 10:46 ` Peter Krefting
2014-07-10 20:10 ` Jeff King
2014-07-11 9:43 ` Yi, EungJun
2014-07-12 10:11 ` Peter Krefting
2014-07-09 10:40 ` Peter Krefting
2014-07-11 9:05 ` Yi, EungJun
2015-01-22 7:54 [PATCH v7 1/1] " Junio C Hamano
2015-01-27 15:51 ` [PATCH v8 0/1] " Yi EungJun
2015-01-27 15:51 ` [PATCH] " Yi EungJun
2015-01-27 23:34 ` Junio C Hamano
2015-01-28 6:15 ` Junio C Hamano
2015-01-28 11:59 ` Yi, EungJun
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1404834846-11812-1-git-send-email-eungjun.yi@navercorp.com \
--to=semtlenori@gmail.com \
--cc=eungjun.yi@navercorp.com \
--cc=git@vger.kernel.org \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.