Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: git/git
base: 276bc6357ebe50dae070aff9693a21c4a2bafc28
Choose a base ref
...
head repository: git/git
compare: 2f732bf15e6dc9c2caf210784f180c6c059c570a
Choose a head ref
  • 2 commits
  • 14 files changed
  • 1 contributor

Commits on Jul 22, 2021

  1. tr2: make process info collection platform-generic

    To pave the way for non-Windows platforms to define
    trace2_collect_process_info(), reorganize the stub-or-definition schema
    to something which doesn't directly reference Windows.
    
    Platforms which want to collect parent process information in the
    future should:
    
     1. Add an implementation to compat/ (e.g. compat/somearch/procinfo.c)
     2. Add that object to COMPAT_OBJS to config.mak.uname
        (e.g. COMPAT_OBJS += compat/somearch/procinfo.o)
     3. Define HAVE_PLATFORM_PROCINFO in config.mak.uname
    
    In the Windows case, this definition lives in
    compat/win32/trace2_win32_process_info.c, which is already conditionally
    added to COMPAT_OBJS; so let's add HAVE_PLATFORM_PROCINFO to hint to the
    build that compat/stub/procinfo.c should not be used.
    
    Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
    Helped-by: Jonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    nasamuffin authored and gitster committed Jul 22, 2021
    Copy the full SHA
    b7e6a41 View commit details
    Browse the repository at this point in the history
  2. tr2: log parent process name

    It can be useful to tell who invoked Git - was it invoked manually by a
    user via CLI or script? By an IDE?  In some cases - like 'repo' tool -
    we can influence the source code and set the GIT_TRACE2_PARENT_SID
    environment variable from the caller process. In 'repo''s case, that
    parent SID is manipulated to include the string "repo", which means we
    can positively identify when Git was invoked by 'repo' tool. However,
    identifying parents that way requires both that we know which tools
    invoke Git and that we have the ability to modify the source code of
    those tools. It cannot scale to keep up with the various IDEs and
    wrappers which use Git, most of which we don't know about. Learning
    which tools and wrappers invoke Git, and how, would give us insight to
    decide where to improve Git's usability and performance.
    
    Unfortunately, there's no cross-platform reliable way to gather the name
    of the parent process. If procfs is present, we can use that; otherwise
    we will need to discover the name another way. However, the process ID
    should be sufficient to look up the process name on most platforms, so
    that code may be shareable.
    
    Git for Windows gathers similar information and logs it as a "data_json"
    event. However, since "data_json" has a variable format, it is difficult
    to parse effectively in some languages; instead, let's pursue a
    dedicated "cmd_ancestry" event to record information about the ancestry
    of the current process and a consistent, parseable way.
    
    Git for Windows also gathers information about more than one generation
    of parent. In Linux further ancestry info can be gathered with procfs,
    but it's unwieldy to do so. In the interest of later moving Git for
    Windows ancestry logging to the 'cmd_ancestry' event, and in the
    interest of later adding more ancestry to the Linux implementation - or
    of adding this functionality to other platforms which have an easier
    time walking the process tree - let's make 'cmd_ancestry' accept an
    array of parentage.
    
    Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    nasamuffin authored and gitster committed Jul 22, 2021
    Copy the full SHA
    2f732bf View commit details
    Browse the repository at this point in the history