Skip to content
Snippets Groups Projects
Select Git revision
  • 833e48259e23aea76f3765d28d1b2200332301f7
  • passt default
  • master
  • pu
  • todo
  • next
  • maint
  • v2.8.0-rc1
  • v2.8.0-rc0
  • v2.7.2
  • v2.7.1
  • v2.7.0
  • v2.6.5
  • v2.7.0-rc3
  • v2.7.0-rc2
  • v2.7.0-rc1
  • v2.7.0-rc0
  • v2.6.4
  • v2.6.3
  • v2.6.2
  • v2.6.1
  • v2.3.10
  • v2.5.4
  • v2.4.10
  • v2.6.0
  • v2.6.0-rc3
  • v2.5.3
27 results

connected.c

Blame
  • connected.c 3.22 KiB
    #include "cache.h"
    #include "run-command.h"
    #include "sigchain.h"
    #include "connected.h"
    #include "transport.h"
    
    int check_everything_connected(sha1_iterate_fn fn, int quiet, void *cb_data)
    {
    	return check_everything_connected_with_transport(fn, quiet, cb_data, NULL);
    }
    /*
     * If we feed all the commits we want to verify to this command
     *
     *  $ git rev-list --objects --stdin --not --all
     *
     * and if it does not error out, that means everything reachable from
     * these commits locally exists and is connected to our existing refs.
     * Note that this does _not_ validate the individual objects.
     *
     * Returns 0 if everything is connected, non-zero otherwise.
     */
    static int check_everything_connected_real(sha1_iterate_fn fn,
    					   int quiet,
    					   void *cb_data,
    					   struct transport *transport,
    					   const char *shallow_file)
    {
    	struct child_process rev_list = CHILD_PROCESS_INIT;
    	const char *argv[9];
    	char commit[41];
    	unsigned char sha1[20];
    	int err = 0, ac = 0;
    	struct packed_git *new_pack = NULL;
    	size_t base_len;
    
    	if (fn(cb_data, sha1))
    		return err;
    
    	if (transport && transport->smart_options &&
    	    transport->smart_options->self_contained_and_connected &&
    	    transport->pack_lockfile &&
    	    strip_suffix(transport->pack_lockfile, ".keep", &base_len)) {
    		struct strbuf idx_file = STRBUF_INIT;
    		strbuf_add(&idx_file, transport->pack_lockfile, base_len);
    		strbuf_addstr(&idx_file, ".idx");
    		new_pack = add_packed_git(idx_file.buf, idx_file.len, 1);
    		strbuf_release(&idx_file);
    	}
    
    	if (shallow_file) {
    		argv[ac++] = "--shallow-file";
    		argv[ac++] = shallow_file;
    	}
    	argv[ac++] = "rev-list";
    	argv[ac++] = "--objects";
    	argv[ac++] = "--stdin";
    	argv[ac++] = "--not";
    	argv[ac++] = "--all";
    	if (quiet)
    		argv[ac++] = "--quiet";
    	argv[ac] = NULL;
    
    	rev_list.argv = argv;
    	rev_list.git_cmd = 1;
    	rev_list.in = -1;
    	rev_list.no_stdout = 1;
    	rev_list.no_stderr = quiet;
    	if (start_command(&rev_list))
    		return error(_("Could not run 'git rev-list'"));