Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Jun 21, 2009

  1. Linus Torvalds

    Fix various sparse warnings in the git source code

    There are a few remaining ones, but this fixes the trivial ones. It boils
    down to two main issues that sparse complains about:
     - warning: Using plain integer as NULL pointer
       Sparse doesn't like you using '0' instead of 'NULL'. For various good
       reasons, not the least of which is just the visual confusion. A NULL
       pointer is not an integer, and that whole "0 works as NULL" is a
       historical accident and not very pretty.
       A few of these remain: zlib is a total mess, and Z_NULL is just a 0.
       I didn't touch those.
     - warning: symbol 'xyz' was not declared. Should it be static?
       Sparse wants to see declarations for any functions you export. A lack
       of a declaration tends to mean that you should either add one, or you
       should mark the function 'static' to show that it's in file scope.
       A few of these remain: I only did the ones that should obviously just
       be made static.
    That 'wt_status_submodule_summary' one is debatable. It has a few related
    flags (like 'wt_status_use_color') which _are_ declared, and are used by
    builtin-commit.c. So maybe we'd like to export it at some point, but it's
    not declared now, and not used outside of that file, so 'static' it is in
    this patch.
    Signed-off-by: Linus Torvalds <>
    Signed-off-by: Junio C Hamano <>
    torvalds authored committed

Jun 13, 2009

  1. Junio C Hamano

    Merge branch 'sp/msysgit'

    * sp/msysgit:
      compat/ has subdirectories: do not omit them in 'make clean'
      Fix typo in nedmalloc warning fix
      MinGW: Teach Makefile to detect msysgit and apply specific settings
      Fix warnings in nedmalloc when compiling with GCC 4.4.0
      Add custom memory allocator to MinGW and MacOS builds
      MinGW readdir reimplementation to support d_type
      connect.c: Support PuTTY plink and TortoisePlink as SSH on Windows
      git: browsing paths with spaces when using the start command
      MinGW: fix warning about implicit declaration of _getch()
      test-chmtime: work around Windows limitation
      Work around a regression in Windows 7, causing erase_in_line() to crash sometimes
      Quiet make: do not leave Windows behind
      MinGW: GCC >= 4 does not need SNPRINTF_SIZE_CORR anymore

Jun 06, 2009

  1. Shawn O. Pearce

    daemon: Strictly parse the "extra arg" part of the command

    Since (49ba83f "Add virtualization support to git-daemon")
    git daemon enters an infinite loop and never terminates if a client
    hides any extra arguments in the initial request line which is not
    exactly "\0host=blah\0".
    Since that change, a client must never insert additional extra
    arguments, or attempt to use any argument other than "host=", as
    any daemon will get stuck parsing the request line and will never
    complete the request.
    Since the client can't tell if the daemon is patched or not, it
    is not possible to know if additional extra args might actually be
    able to be safely requested.
    If we ever need to extend the git daemon protocol to support a new
    feature, we may have to do something like this to the exchange:
      # If both support git:// v2
      C: 000cgit://v2
      S: 0010ok host user
      C: 0018host
      C: 0027git-upload-pack /pub/linux-2.6.git
      S: ...git-upload-pack header...
      # If client supports git:// v2, server does not:
      C: 000cgit://v2
      S: <EOF>
      C: 003bgit-upload-pack /pub/linux-2.6.git\\0
      S: ...git-upload-pack header...
    This requires the client to create two TCP connections to talk to
    an older git daemon, however all daemons since the introduction of
    daemon.c will safely reject the unknown "git://v2" command request,
    so the client can quite easily determine the server supports an
    older protocol.
    Signed-off-by: Shawn O. Pearce <>
    Signed-off-by: Junio C Hamano <>
    spearce authored committed

Jun 01, 2009

  1. connect.c: Support PuTTY plink and TortoisePlink as SSH on Windows

    OpenSSH uses -p to specify custom ports, while PuTTY plink and
    TortoisePlink use -P. Git now detects if plink is in GIT_SSH and
    modify its flags as necessary.
    We call plink with -batch, so that it will error out with an error
    message instead of waiting for user input.  As reported in msysGit
    issue 96, plink wants to interact with the user asking if a host
    key should be accepted, but this just blocks the terminal, since
    plink tries to get the answer from stdin.  However, stdin is
    already connected to Git that wants to send input to the remote
    But we do not pass -batch to TortoisePlink, because TortoisePlink
    uses a GUI to communicate with the user, and it does not understand
    Signed-off-by: Edward Z. Yang <>
    Signed-off-by: Steffen Prohaska <>
    Signed-off-by: Johannes Schindelin <>
    Signed-off-by: Junio C Hamano <>
    Edward Z. Yang authored committed

Apr 25, 2009

  1. Benjamin Kramer

    connect: replace inet_ntop with getnameinfo

    inet_ntop is not protocol independent.
    getnameinfo(3) is part of POSIX and is available when getaddrinfo(3) is.
    This code is only compiled when NO_IPV6 isn't defined.
    The old method was buggy anyway, not every ipv6 address was converted
    properly because the buffer (addr) was too small.
    Signed-off-by: Benjamin Kramer <>
    Signed-off-by: Junio C Hamano <>
    d0k authored committed

Mar 14, 2009

  1. Benjamin Kramer

    Remove unused assignments

    These variables were always overwritten or the assigned
    value was unused:
      builtin-diff-tree.c::cmd_diff_tree(): nr_sha1
      builtin-for-each-ref.c::opt_parse_sort(): sort_tail
      builtin-mailinfo.c::decode_header_bq(): in
      builtin-shortlog.c::insert_one_record(): len
      connect.c::git_connect(): path
      imap-send.c::v_issue_imap_cmd(): n
      pretty.c::pp_user_info(): filler
      remote::parse_refspec_internal(): llen
    Signed-off-by: Benjamin Kramer <>
    Signed-off-by: Junio C Hamano <>
    d0k authored committed

Mar 11, 2009

  1. Erik Faye-Lund

    connect.c: remove a few globals by using git_config callback data

    Since ef90d6d (Provide git_config with a callback-data parameter,
    2008-05-14), git_config() takes a callback data pointer that can be
    used to pass extra parameters to the parsing function.  The codepath
    to parse configuration variables related to git proxy predates this
    facility and used a pair of file scope static variables instead.
    This patch removes the need for these global variables by passing the
    name of the host we are trying to access as the callback data.
    Signed-off-by: Erik Faye-Lund <>
    Signed-off-by: Junio C Hamano <>
    kusma authored committed

Jan 05, 2009

  1. Alexander Potashev

    remove trailing LF in die() messages

    LF at the end of format strings given to die() is redundant because
    die already adds one on its own.
    Signed-off-by: Alexander Potashev <>
    Signed-off-by: Junio C Hamano <>
    aspotashev authored committed

Dec 21, 2008

  1. connect.c: stricter port validation, silence compiler warning

    In addition to checking if the provided port is numeric, also check
    that the string isn't empty and that the port number is within the
    valid range.  Incidentally, this silences a compiler warning about
    ignoring strtol's return value.
    Signed-off-by: Rene Scharfe <>
    Signed-off-by: Junio C Hamano <>
    René Scharfe authored committed

Nov 02, 2008

  1. connect.c: add a way for git-daemon to pass an error back to client

    The current behavior of git-daemon is to simply close the connection on
    any error condition. This leaves the client without any information as
    to the cause of the failed fetch/push/etc.
    This patch allows get_remote_heads to accept a line prefixed with "ERR"
    that it can display to the user in an informative fashion. Once clients
    can understand this ERR line, git-daemon can be made to properly report
    "repository not found", "permission denied", or other errors.
    S: ERR No matching repository.
    C: fatal: remote error: No matching repository.
    Signed-off-by: Tom Preston-Werner <>
    Signed-off-by: Junio C Hamano <>
    Tom Preston-Werner authored committed

Oct 18, 2008

  1. make alloc_ref_from_str() the new alloc_ref()

    With all calls to alloc_ref() gone, we can remove it and then we're free
    to give alloc_ref_from_str() the shorter name.  It's a much nicer
    interface, as the callers always need to have a name string when they
    allocate a ref anyway and don't need to calculate and pass its length+1
    any more.
    Signed-off-by: Rene Scharfe <>
    Signed-off-by: Junio C Hamano <>
    René Scharfe authored committed
  2. use alloc_ref_from_str() everywhere

    Replace pairs of alloc_ref() and strcpy() with alloc_ref_from_str(),
    simplifying the code.
    In connect.c, also a pair of alloc_ref() and memcpy() is replaced --
    the additional cost of a strlen() call should not have too much of an
    impact.  Consistency and simplicity are more important.
    In remote.c, the code was allocating 11 bytes more than needed for
    the name part, but I couldn't see them being used for anything.
    Signed-off-by: Rene Scharfe <>
    Signed-off-by: Junio C Hamano <>
    René Scharfe authored committed

Sep 09, 2008

  1. Junio C Hamano

    push: prepare sender to receive extended ref information from the rec…

    "git push" enhancement allows the receiving end to report not only its own
    refs but refs in repositories it borrows from via the alternate object
    store mechanism.  By telling the sender that objects reachable from these
    extra refs are already complete in the receiving end, the number of
    objects that need to be transfered can be cut down.
    These entries are sent over the wire with string ".have", instead of the
    actual names of the refs.  This string was chosen so that they are ignored
    by older programs at the sending end.  If we sent some random but valid
    looking refnames for these entries, "matching refs" rule (triggered when
    running "git push" without explicit refspecs, where the sender learns what
    refs the receiver has, and updates only the ones with the names of the
    refs the sender also has) and "delete missing" rule (triggered when "git
    push --mirror" is used, where the sender tells the receiver to delete the
    refs it itself does not have) would try to update/delete them, which is
    not what we want.
    This prepares the send-pack (and "push" that runs native protocol) to
    accept extended existing ref information and make use of it.  The ".have"
    entries are excluded from ref matching rules, and are exempt from deletion
    rule while pushing with --mirror option, but are still used for pack
    generation purposes by providing more "bottom" range commits.
    Signed-off-by: Junio C Hamano <>

Aug 31, 2008

  1. Junio C Hamano

    'git foo' program identifies itself without dash in die() messages

    This is a mechanical conversion of all '*.c' files with:
    	s/((?:die|error|warning)\("git)-(\S+:)/$1 $2/;
    The result was manually inspected and no false positive was found.
    Signed-off-by: Junio C Hamano <>

Jun 26, 2008

  1. Windows: Disambiguate DOS style paths from SSH URLs.

    If on Windows a path is specified as C:/path, then this is also a valid
    SSH URL. To disambiguate between the two interpretations we take an URL
    that looks like a path with a drive letter as a local URL.
    Signed-off-by: Johannes Sixt <>
    Johannes Sixt authored

May 14, 2008

  1. dscho

    Provide git_config with a callback-data parameter

    git_config() only had a function parameter, but no callback data
    parameter.  This assumes that all callback functions only modify
    global variables.
    With this patch, every callback gets a void * parameter, and it is hoped
    that this will help the libification effort.
    Signed-off-by: Johannes Schindelin <>
    Signed-off-by: Junio C Hamano <>
    dscho authored committed

Feb 22, 2008

  1. Avoid unnecessary "if-before-free" tests.

    This change removes all obvious useless if-before-free tests.
    E.g., it replaces code like this:
            if (some_expression)
                    free (some_expression);
    with the now-equivalent:
            free (some_expression);
    It is equivalent not just because POSIX has required free(NULL)
    to work for a long time, but simply because it has worked for
    so long that no reasonable porting target fails the test.
    Here's some evidence from nearly 1.5 years ago:
    FYI, the change below was prepared by running the following:
      git ls-files -z | xargs -0 \
      perl -0x3b -pi -e \
    Note however, that it doesn't handle brace-enclosed blocks like
    "if (x) { free (x); }".  But that's ok, since there were none like
    that in git sources.
    Beware: if you do use the above snippet, note that it can
    produce syntactically invalid C code.  That happens when the
    affected "if"-statement has a matching "else".
    E.g., it would transform this
      if (x)
        free (x);
        foo ();
    into this:
      free (x);
        foo ();
    There were none of those here, either.
    If you're interested in automating detection of the useless
    tests, you might like the useless-if-before-free script in gnulib:
    [it *does* detect brace-enclosed free statements, and has a --name=S
     option to make it detect free-like functions with different names]
      Remove one more (in imap-send.c), spotted by Jean-Luc Herren <>.
    Signed-off-by: Jim Meyering <>
    Signed-off-by: Junio C Hamano <>
    Jim Meyering authored committed

Feb 12, 2008

  1. Junio C Hamano

    Merge branch 'db/no-separate-ls-remote-connection' (early part)

    * 'db/no-separate-ls-remote-connection' (early part):
      Fix "git clone" for git:// protocol
      Reduce the number of connects when fetching

Feb 11, 2008

  1. Junio C Hamano

    connect.c: guard config parser from value=NULL

    core.gitproxy configuration expects a string value.
    Signed-off-by: Junio C Hamano <>

Feb 10, 2008

  1. dscho

    Fix "git clone" for git:// protocol

    In ba22785(Reduce the number of connects when fetching), we checked
    the return value of git_connect() to see if the connection was
    However, for the git:// protocol, there is no need to have another
    process, so the return value was NULL.
    Now, it makes sense to assume the rule that git_connect() will return
    NULL if it fails (at the moment, it die()s if it fails), so return
    a dummy child process.
    Signed-off-by: Johannes Schindelin <>
    Acked-by: Daniel Barkalow <>
    Signed-off-by: Junio C Hamano <>
    dscho authored committed

Nov 03, 2007

  1. Miscellaneous const changes and utilities

    The list of remote refs in struct transport should be const, because
    builtin-fetch will get confused if it changes.
    The url in git_connect should be const (and work on a copy) instead of
    requiring the caller to copy it.
    match_refs doesn't modify the refspecs it gets.
    get_fetch_map and get_remote_ref don't change the list they get.
    Allow transport get_refs_list methods to modify the struct transport.
    Add a function to copy a list of refs, when a function needs a mutable
    copy of a const list.
    Add a function to check the type of a ref, as per the code in connect.c
    Signed-off-by: Daniel Barkalow <>
    Signed-off-by: Junio C Hamano <>
    Daniel Barkalow authored committed

Oct 21, 2007

  1. Use start_command() in git_connect() instead of explicit fork/exec.

    The child process handling is delegated to start_command() and
    Signed-off-by: Johannes Sixt <>
    Signed-off-by: Shawn O. Pearce <>
    Johannes Sixt authored spearce committed
  2. Change git_connect() to return a struct child_process instead of a pi…

    This prepares the API of git_connect() and finish_connect() to operate on
    a struct child_process. Currently, we just use that object as a placeholder
    for the pid that we used to return. A follow-up patch will change the
    implementation of git_connect() and finish_connect() to make full use
    of the object.
    Old code had early-return-on-error checks at the calling sites of
    git_connect(), but since git_connect() dies on errors anyway, these checks
    were removed.
    [sp: Corrected style nit of "conn == NULL" to "!conn"]
    Signed-off-by: Johannes Sixt <>
    Signed-off-by: Shawn O. Pearce <>
    Johannes Sixt authored spearce committed

Oct 16, 2007

  1. Shawn O. Pearce

    Merge branch 'master' into db/fetch-pack

    There's a number of tricky conflicts between master and
    this topic right now due to the rewrite of builtin-push.
    Junio must have handled these via rerere; I'd rather not
    deal with them again so I'm pre-merging master into the
    topic.  Besides this topic somehow started to depend on
    the strbuf series that was in next, but is now in master.
    It no longer compiles on its own without the strbuf API.
    * master: (184 commits)
      Whip post maintenance series into shape.
      Minor usage update in setgitperms.perl
      manual: use 'URL' instead of 'url'.
      manual: add some markup.
      manual: Fix example finding commits referencing given content.
      Fix wording in push definition.
      Fix some typos, punctuation, missing words, minor markup.
      manual: Fix or remove em dashes.
      Add a --dry-run option to git-push.
      Add a --dry-run option to git-send-pack.
      Fix in-place editing functions in convert.c
      instaweb: support for Ruby's WEBrick server
      instaweb: allow for use of auto-generated scripts
      Add 'git-p4 commit' as an alias for 'git-p4 submit'
      hg-to-git speedup through selectable repack intervals
      git-svn: respect Subversion's [auth] section configuration values
      gtksourceview2 support for gitview
      fix contrib/hooks/post-receive-email hooks.recipients error message
      Support cvs via git-shell
      rebase -i: use diff plumbing instead of porcelain
    spearce authored

Sep 30, 2007

  1. Junio C Hamano

    bundle transport: fix an alloc_ref() call

    Currently alloc_ref() expects the length of the refname plus 1
    as its parameter, prepares that much space and returns a "ref"
    structure for the caller to fill the refname.  One caller in
    transport.c::get_refs_from_bundle() however allocated one byte
    It may be a good idea to change the calling convention to give
    alloc_ref() the length of the refname, but that clean-up can be
    done in a separate patch.  This patch only fixes the bug and
    makes all callers consistent.
    There was also one overallocation in connect.c, which would not
    hurt but was wasteful.  This patch fixes it as well.
    Signed-off-by: Junio C Hamano <>

Sep 21, 2007

  1. Pierre Habouzit

    sq_quote_argv and add_to_string rework with strbuf's.

    * sq_quote_buf is made public, and works on a strbuf.
    * sq_quote_argv also works on a strbuf.
    * make sq_quote_argv take a "maxlen" argument to check the buffer won't grow
      too big.
    Signed-off-by: Pierre Habouzit <>
    Signed-off-by: Junio C Hamano <>
    MadCoder authored committed

Sep 19, 2007

  1. Pierre Habouzit

    Use xmemdupz() in many places.

    Signed-off-by: Pierre Habouzit <>
    Signed-off-by: Junio C Hamano <>
    MadCoder authored committed

Sep 01, 2007

  1. Luben Tuikov

    URL: allow port specification in ssh:// URLs

    Allow port specification in ssh:// URLs in the
    usual notation:
    This allows git to be used over ssh-tunneling
    Signed-off-by: Luben Tuikov <>
    Signed-off-by: Junio C Hamano <>
    ltuikov authored committed

Aug 02, 2007

  1. Linus Torvalds

    connect: accept file:// URL scheme

    We might make it something like: "if you use an url, we don't default to
    local", so the difference would be that
    	git clone file:///directory/to/repo
    would work the way it does now, but
    	git clone /directory/to/repo
    would default to "-l" behaviour. That kind of would make sense (and should
    be easy to implement.
    This adds support for "file://" URL to underlying connect
    codepath to make it happen.
    Signed-off-by: Linus Torvalds <>
    Signed-off-by: Junio C Hamano <>
    torvalds authored committed

Jul 10, 2007

  1. Add allocation and freeing functions for struct refs

    Instead of open-coding allocation wherever it happens, have a function.
    Also, add a function to free a list of refs, which we currently never
    actually do.
    Signed-off-by: Daniel Barkalow <>
    Signed-off-by: Junio C Hamano <>
    Daniel Barkalow authored committed

Jul 01, 2007

  1. Junio C Hamano

    Merge branch 'ei/worktree+filter'

    * ei/worktree+filter:
      filter-branch: always export GIT_DIR if it is set
      setup_git_directory: fix segfault if repository is found in cwd
      test GIT_WORK_TREE
      extend rev-parse test for --is-inside-work-tree
      Use new semantics of is_bare/inside_git_dir/inside_work_tree
      introduce GIT_WORK_TREE to specify the work tree
      test git rev-parse
      rev-parse: introduce --is-bare-repository
      rev-parse: document --is-inside-git-dir

Jun 16, 2007

  1. Alex Riesen

    Do not use h_errno after connect(2): the function does not set it

    Randal L. Schwartz noticed compilation problems on SunOS, which made
    me look at the code again. The thing is, h_errno is not used by
    connect(2), it is only for functions from netdb.h, like gethostbyname.
    Signed-off-by: Alex Riesen <>
    Signed-off-by: Junio C Hamano <>
    raalkml authored committed

Jun 07, 2007

  1. Junio C Hamano

    War on whitespace

    This uses "git-apply --whitespace=strip" to fix whitespace errors that have
    crept in to our source files over time.  There are a few files that need
    to have trailing whitespaces (most notably, test vectors).  The results
    still passes the test, and build result in Documentation/ area is unchanged.
    Signed-off-by: Junio C Hamano <>

Jun 06, 2007

  1. Matthias Lederhofer

    introduce GIT_WORK_TREE to specify the work tree

    setup_gdg is used as abbreviation for setup_git_directory_gently.
    The work tree can be specified using the environment variable
    GIT_WORK_TREE and the config option core.worktree (the environment
    variable has precendence over the config option).  Additionally
    there is a command line option --work-tree which sets the
    environment variable.
    setup_gdg does the following now:
    GIT_DIR unspecified
    repository in .git directory
        parent directory of the .git directory is used as work tree,
        GIT_WORK_TREE is ignored
    GIT_DIR unspecified
    repository in cwd
        GIT_DIR is set to cwd
        see the cases with GIT_DIR specified what happens next and
        also see the note below
    GIT_DIR specified
    GIT_WORK_TREE/core.worktree unspecified
        cwd is used as work tree
    GIT_DIR specified
    GIT_WORK_TREE/core.worktree specified
        the specified work tree is used
    Note on the case where GIT_DIR is unspecified and repository is in cwd:
        GIT_WORK_TREE is used but is_inside_git_dir is always true.
        I did it this way because setup_gdg might be called multiple
        times (e.g. when doing alias expansion) and in successive calls
        setup_gdg should do the same thing every time.
    Meaning of is_bare/is_inside_work_tree/is_inside_git_dir:
    (1) is_bare_repository
        A repository is bare if core.bare is true or core.bare is
        unspecified and the name suggests it is bare (directory not
        named .git).  The bare option disables a few protective
        checks which are useful with a working tree.  Currently
        this changes if a repository is bare:
            updates of HEAD are allowed
            git gc packs the refs
            the reflog is disabled by default
    (2) is_inside_work_tree
        True if the cwd is inside the associated working tree (if there
        is one), false otherwise.
    (3) is_inside_git_dir
        True if the cwd is inside the git directory, false otherwise.
        Before this patch is_inside_git_dir was always true for bare
    When setup_gdg finds a repository git_config(git_default_config) is
    always called.  This ensure that is_bare_repository makes use of
    core.bare and does not guess even though core.bare is specified.
    inside_work_tree and inside_git_dir are set if setup_gdg finds a
    repository.  The is_inside_work_tree and is_inside_git_dir functions
    will die if they are called before a successful call to setup_gdg.
    Signed-off-by: Matthias Lederhofer <>
    Signed-off-by: Junio C Hamano <>
    matled authored committed

May 29, 2007

  1. Merge branch 'db/remote'

    * db/remote:
      Move refspec pattern matching to match_refs().
      Update local tracking refs when pushing
      Add handlers for fetch-side configuration of remotes.
      Move refspec parser from connect.c and cache.h to remote.{c,h}
      Move remote parsing into a library file out of builtin-push.
    Junio C Hamano authored
Something went wrong with that request. Please try again.