On Mon, Apr 15, 2019 at 01:39:47PM -0700, Jeff Hostetler via GitGitGadget wrote: > From: Jeff Hostetler <jeffhost@xxxxxxxxxxxxx> > > Teach git to read the system and global config files for > default Trace2 settings. This allows system-wide Trace2 settings to > be installed and inherited to make it easier to manage a collection of > systems. > > The original GIT_TR2* environment variables are loaded afterwards and > can be used to override the system settings. > > Only the system and global config files are used. Repo and worktree > local config files are ignored. Likewise, the "-c" command line > arguments are also ignored. These limits are for performance reasons. > > (1) For users not using Trace2, there should be minimal overhead to > detect that Trace2 is not enabled. In particular, Trace2 should not > allocate lots of otherwise unused data strucutres. > > (2) For accurate performance measurements, Trace2 should be initialized > as early in the git process as possible, and before most of the normal > git process initialization (which involves discovering the .git directory > and reading a hierarchy of config files). Reading the configuration that early causes unexpected and undesired behavior change: $ sudo chmod a-rwx /usr/local/etc/gitconfig $ ./BUILDS/v2.21.0/bin/git usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] <... snip rest of usage ...> $ strace ./BUILDS/v2.21.0/bin/git 2>&1 |grep config -c 0 $ ./git fatal: unable to access '/usr/local/etc/gitconfig': Permission denied $ ./git --version fatal: unable to access '/usr/local/etc/gitconfig': Permission denied I think at least 'git', 'git --help', and 'git --version' should Just Work, no matter what. This breaks the 32 bit Linux build job on Travis CI, because: - In the 32 bit Docker image we change UID from root to regular user while preserving the environment, including $HOME. - Since $HOME is the default build prefix, Git will look for the system-wide configuration under '/root/etc/gitconfig', which fails as a regular user. - Our test harness checks early (i.e. earlier than setting GIT_CONFIG_NOSYSTEM=1) whether Git has been built successfully by attempting to run '$GIT_BUILD_DIR}/git', which fails because of the inaccessible system-wide config file, and in turn the harness assumes that Git hasn't been built and aborts. https://travis-ci.org/git/git/jobs/524403682#L1258