Code

Merge branch 'tc/http-cleanup'
authorJunio C Hamano <gitster@pobox.com>
Mon, 15 Mar 2010 07:58:50 +0000 (00:58 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Mar 2010 07:58:50 +0000 (00:58 -0700)
* tc/http-cleanup:
  remote-curl: init walker only when needed
  remote-curl: use http_fetch_ref() instead of walker wrapper
  http: init and cleanup separately from http-walker
  http-walker: cleanup more thoroughly
  http-push: remove "|| 1" to enable verbose check
  t554[01]-http-push: refactor, add non-ff tests
  t5541-http-push: check that ref is unchanged for non-ff test

1  2 
remote-curl.c

diff --combined remote-curl.c
index d38812085151b6738e7ca95be10968b973bf13b4,1f8bc2db73a5a7fb41734b9866c184c7aa90c897..b76bfcb3d3cdbbee2e3279a6696c7d6b526176d7
@@@ -10,7 -10,6 +10,6 @@@
  
  static struct remote *remote;
  static const char *url;
- static struct walker *walker;
  
  struct options {
        int verbosity;
  };
  static struct options options;
  
- static void init_walker(void)
- {
-       if (!walker)
-               walker = get_http_walker(url, remote);
- }
  static int set_option(const char *name, const char *value)
  {
        if (!strcmp(name, "verbosity")) {
@@@ -119,7 -112,6 +112,6 @@@ static struct discovery* discover_refs(
        }
        refs_url = strbuf_detach(&buffer, NULL);
  
-       init_walker();
        http_ret = http_get_strbuf(refs_url, &buffer, HTTP_NO_CACHE);
  
        /* try again with "plain" url (no ? or & appended) */
        return last;
  }
  
 -static int write_discovery(int fd, void *data)
 +static int write_discovery(int in, int out, void *data)
  {
        struct discovery *heads = data;
        int err = 0;
 -      if (write_in_full(fd, heads->buf, heads->len) != heads->len)
 +      if (write_in_full(out, heads->buf, heads->len) != heads->len)
                err = 1;
 -      close(fd);
 +      close(out);
        return err;
  }
  
@@@ -202,7 -194,6 +194,7 @@@ static struct ref *parse_git_refs(struc
        memset(&async, 0, sizeof(async));
        async.proc = write_discovery;
        async.data = heads;
 +      async.out = -1;
  
        if (start_async(&async))
                die("cannot start thread to parse advertised refs");
@@@ -250,9 -241,8 +242,8 @@@ static struct ref *parse_info_refs(stru
                i++;
        }
  
-       init_walker();
        ref = alloc_ref("HEAD");
-       if (!walker->fetch_ref(walker, ref) &&
+       if (!http_fetch_ref(url, ref) &&
            !resolve_remote_symref(ref, refs)) {
                ref->next = refs;
                refs = ref;
@@@ -502,7 -492,6 +493,6 @@@ static int rpc_service(struct rpc_stat
        struct child_process client;
        int err = 0;
  
-       init_walker();
        memset(&client, 0, sizeof(client));
        client.in = -1;
        client.out = -1;
  
  static int fetch_dumb(int nr_heads, struct ref **to_fetch)
  {
+       struct walker *walker;
        char **targets = xmalloc(nr_heads * sizeof(char*));
        int ret, i;
  
        for (i = 0; i < nr_heads; i++)
                targets[i] = xstrdup(sha1_to_hex(to_fetch[i]->old_sha1));
  
-       init_walker();
+       walker = get_http_walker(url);
        walker->get_all = 1;
        walker->get_tree = 1;
        walker->get_history = 1;
        walker->get_verbosely = options.verbosity >= 3;
        walker->get_recover = 0;
        ret = walker_fetch(walker, nr_heads, targets, NULL, NULL);
+       walker_free(walker);
  
        for (i = 0; i < nr_heads; i++)
                free(targets[i]);
@@@ -811,6 -802,8 +803,8 @@@ int main(int argc, const char **argv
                url = remote->url[0];
        }
  
+       http_init(remote);
        do {
                if (strbuf_getline(&buf, stdin, '\n') == EOF)
                        break;
                }
                strbuf_reset(&buf);
        } while (1);
+       http_cleanup();
        return 0;
  }