1. 28 Jan, 2019 1 commit
    • Gábor Szeder's avatar
      object_as_type: initialize commit-graph-related fields of 'struct commit' · 4468d443
      Gábor Szeder authored
      When the commit graph and generation numbers were introduced in
      commits 177722b3 (commit: integrate commit graph with commit
      parsing, 2018-04-10) and 83073cc9 (commit: add generation number to
      struct commit, 2018-04-25), they tried to make sure that the
      corresponding 'graph_pos' and 'generation' fields of 'struct commit'
      are initialized conservatively, as if the commit were not included in
      the commit-graph file.
      
      Alas, initializing those fields only in alloc_commit_node() missed the
      case when an object that happens to be a commit is first looked up via
      lookup_unknown_object(), and is then later converted to a 'struct
      commit' via the object_as_type() helper function (either calling it
      directly, or as part of a subsequent lookup_commit() call).
      Consequently, both of those fields incorrectly remain set to zero,
      which means e.g. that the commit is present in and is the first entry
      of the commit-graph file.  This will result in wrong timestamp, parent
      and root tree hashes, if such a 'struct commit' instance is later
      filled from the commit-graph.
      
      Extract the initialization of 'struct commit's fields from
      alloc_commit_node() into a helper function, and call it from
      object_as_type() as well, to make sure that it properly initializes
      the two commit-graph-related fields, too.  With this helper function
      it is hopefully less likely that any new fields added to 'struct
      commit' in the future would remain uninitialized.
      
      With this change alloc_commit_index() won't have any remaining callers
      outside of 'alloc.c', so mark it as static.
      Signed-off-by: Gábor Szeder's avatarSZEDER Gábor <szeder.dev@gmail.com>
      Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
      4468d443
  2. 15 Aug, 2018 2 commits
  3. 16 May, 2018 1 commit