Skip to content
  • Jeff King's avatar
    setup: make startup_info available everywhere · 46c3cd44
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    Commit a60645f9
    
     (setup: remember whether repository was
    found, 2010-08-05) introduced the startup_info structure,
    which records some parts of the setup_git_directory()
    process (notably, whether we actually found a repository or
    not).
    
    One of the uses of this data is for functions to behave
    appropriately based on whether we are in a repo. But the
    startup_info struct is just a pointer to storage provided by
    the main program, and the only program that sets it up is
    the git.c wrapper. Thus builtins have access to
    startup_info, but externally linked programs do not.
    
    Worse, library code which is accessible from both has to be
    careful about accessing startup_info. This can be used to
    trigger a die("BUG") via get_sha1():
    
    	$ git fast-import <<-\EOF
    	tag foo
    	from HEAD:./whatever
    	EOF
    
    	fatal: BUG: startup_info struct is not initialized.
    
    Obviously that's fairly nonsensical input to feed to
    fast-import, but we should never hit a die("BUG"). And there
    may be other ways to trigger it if other non-builtins
    resolve sha1s.
    
    So let's point the storage for startup_info to a static
    variable in setup.c, making it available to all users of the
    library code. We _could_ turn startup_info into a regular
    extern struct, but doing so would mean tweaking all of the
    existing use sites. So let's leave the pointer indirection
    in place.  We can, however, drop any checks for NULL, as
    they will always be false (and likewise, we can drop the
    test covering this case, which was a rather artificial
    situation using one of the test-* programs).
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    46c3cd44