From: Josh Triplett <josh@joshtriplett.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: John Koleszar <jkoleszar@google.com>,
git@vger.kernel.org, Shawn Pearce <spearce@spearce.org>
Subject: Re: [PATCH] http-backend: respect GIT_NAMESPACE with dumb clients
Date: Thu, 28 Mar 2013 08:49:25 -0700 [thread overview]
Message-ID: <20130328154925.GA16034@leaf> (raw)
In-Reply-To: <7v7gksjc3v.fsf@alter.siamese.dyndns.org>
On Wed, Mar 27, 2013 at 11:02:28PM -0700, Junio C Hamano wrote:
> John Koleszar <jkoleszar@google.com> writes:
>
> > Filter the list of refs returned via the dumb HTTP protocol according
> > to the active namespace, consistent with other clients of the
> > upload-pack service.
> >
> > Signed-off-by: John Koleszar <jkoleszar@google.com>
> > ---
>
> Looks sane from a cursory read---thanks.
>
> Josh, any comments?
Looks reasonable; glad to see tests explicitly covering it, as well.
Ideally I'd like to see an additional test against that same namespaced
repository, fetching from a different URL that doesn't set
GIT_NAMESPACE, and verifying that info/refs contains the full set of
namespace-qualified refs from all namespaces. That would make sure that
particular behavior doesn't regress in the future, since one of the use
cases for namespaced repositories involves fetching the whole combined
repo, for purposes such as backups or replication.
> > http-backend.c | 8 +++++---
> > t/lib-httpd/apache.conf | 5 +++++
> > t/t5561-http-backend.sh | 4 ++++
> > t/t556x_common | 16 ++++++++++++++++
> > 4 files changed, 30 insertions(+), 3 deletions(-)
> >
> > diff --git a/http-backend.c b/http-backend.c
> > index f50e77f..b9896b0 100644
> > --- a/http-backend.c
> > +++ b/http-backend.c
> > @@ -361,17 +361,19 @@ static void run_service(const char **argv)
> > static int show_text_ref(const char *name, const unsigned char *sha1,
> > int flag, void *cb_data)
> > {
> > + const char *name_nons = strip_namespace(name);
> > struct strbuf *buf = cb_data;
> > struct object *o = parse_object(sha1);
> > if (!o)
> > return 0;
> >
> > - strbuf_addf(buf, "%s\t%s\n", sha1_to_hex(sha1), name);
> > + strbuf_addf(buf, "%s\t%s\n", sha1_to_hex(sha1), name_nons);
> > if (o->type == OBJ_TAG) {
> > o = deref_tag(o, name, 0);
> > if (!o)
> > return 0;
> > - strbuf_addf(buf, "%s\t%s^{}\n", sha1_to_hex(o->sha1), name);
> > + strbuf_addf(buf, "%s\t%s^{}\n", sha1_to_hex(o->sha1),
> > + name_nons);
> > }
> > return 0;
> > }
> > @@ -402,7 +404,7 @@ static void get_info_refs(char *arg)
> >
> > } else {
> > select_getanyfile();
> > - for_each_ref(show_text_ref, &buf);
> > + for_each_namespaced_ref(show_text_ref, &buf);
> > send_strbuf("text/plain", &buf);
> > }
> > strbuf_release(&buf);
> > diff --git a/t/lib-httpd/apache.conf b/t/lib-httpd/apache.conf
> > index 938b4cf..ad85537 100644
> > --- a/t/lib-httpd/apache.conf
> > +++ b/t/lib-httpd/apache.conf
> > @@ -61,6 +61,11 @@ Alias /auth/dumb/ www/auth/dumb/
> > SetEnv GIT_COMMITTER_NAME "Custom User"
> > SetEnv GIT_COMMITTER_EMAIL custom@example.com
> > </LocationMatch>
> > +<LocationMatch /smart_namespace/>
> > + SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH}
> > + SetEnv GIT_HTTP_EXPORT_ALL
> > + SetEnv GIT_NAMESPACE ns
> > +</LocationMatch>
> > ScriptAliasMatch /smart_*[^/]*/(.*) ${GIT_EXEC_PATH}/git-http-backend/$1
> > ScriptAlias /broken_smart/ broken-smart-http.sh/
> > <Directory ${GIT_EXEC_PATH}>
> > diff --git a/t/t5561-http-backend.sh b/t/t5561-http-backend.sh
> > index b5d7fbc..5a19d61 100755
> > --- a/t/t5561-http-backend.sh
> > +++ b/t/t5561-http-backend.sh
> > @@ -134,6 +134,10 @@ POST /smart/repo.git/git-receive-pack HTTP/1.1 200 -
> > ###
> > GET /smart/repo.git/info/refs?service=git-receive-pack HTTP/1.1 403 -
> > POST /smart/repo.git/git-receive-pack HTTP/1.1 403 -
> > +
> > +### namespace test
> > +###
> > +GET /smart_namespace/repo.git/info/refs HTTP/1.1 200
> > EOF
> > test_expect_success 'server request log matches test results' '
> > sed -e "
> > diff --git a/t/t556x_common b/t/t556x_common
> > index 82926cf..cb9eb9d 100755
> > --- a/t/t556x_common
> > +++ b/t/t556x_common
> > @@ -120,3 +120,19 @@ test_expect_success 'http.receivepack false' '
> > GET info/refs?service=git-receive-pack "403 Forbidden" &&
> > POST git-receive-pack 0000 "403 Forbidden"
> > '
> > +test_expect_success 'backend respects namespaces' '
> > + log_div "namespace test"
> > + config http.uploadpack true &&
> > + config http.getanyfile true &&
> > +
> > + GIT_NAMESPACE=ns && export GIT_NAMESPACE &&
> > + git push public master:master &&
> > + (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
> > + git for-each-ref | grep /$GIT_NAMESPACE/ >/dev/null
> > + ) &&
> > +
> > + git ls-remote public >exp &&
> > + curl "$HTTPD_URL/smart_namespace/repo.git/info/refs" >act &&
> > + test_cmp exp act &&
> > + (grep /ns/ exp && false || true)
> > +'
next prev parent reply other threads:[~2013-03-28 16:30 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-28 4:58 [PATCH] http-backend: respect GIT_NAMESPACE with dumb clients John Koleszar
2013-03-28 6:02 ` Junio C Hamano
2013-03-28 15:49 ` Josh Triplett [this message]
2013-03-28 14:43 ` Junio C Hamano
[not found] ` <CAAvHm8NAqVHLz1wjNN-3ocpYzWfO-PDo0PAJ6pZO7KrMkhJ6Jw@mail.gmail.com>
2013-03-28 15:54 ` John Koleszar
2013-03-28 16:46 ` Junio C Hamano
2013-04-03 15:52 ` John Koleszar
2013-04-03 16:10 ` Jeff King
2013-04-03 16:16 ` Jeff King
2013-04-03 18:05 ` Junio C Hamano
2013-04-04 15:34 ` John Koleszar
2013-04-04 16:01 ` John Koleszar
2013-04-04 17:25 ` Junio C Hamano
2013-04-05 1:22 ` John Koleszar
2013-04-05 2:35 ` Josh Triplett
2013-04-05 2:56 ` Jeff King
2013-04-05 5:34 ` Junio C Hamano
2013-04-05 5:43 ` Jeff King
2013-04-06 0:54 ` John Koleszar
2013-04-10 0:55 ` [PATCH v4] " John Koleszar
2013-04-10 1:09 ` Junio C Hamano
2013-04-10 4:18 ` Jeff King
2013-04-08 21:25 ` [PATCH] " Thomas Rast
2013-04-08 21:45 ` Jeff King
2013-04-09 22:13 ` John Koleszar
2013-04-03 18:04 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130328154925.GA16034@leaf \
--to=josh@joshtriplett.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jkoleszar@google.com \
--cc=spearce@spearce.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 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 NNTP newsgroup(s).