1. 11 8月, 2014 2 次提交
  2. 31 7月, 2014 2 次提交
  3. 29 7月, 2014 10 次提交
    • J
      t4013: test diff-tree's --stdin commit formatting · d299e9e5
      Jeff King 提交于
      Once upon a time, git-log was just "rev-list | diff-tree",
      and we did not bother to test it separately. These days git-log
      is implemented internally, but we want to make sure that the
      rev-list to diff-tree pipeline continues to function. Let's
      add a basic sanity test.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      d299e9e5
    • J
      Merge branch 'jk/alloc-commit-id-maint' into maint · 5d7c37a1
      Junio C Hamano 提交于
      * jk/alloc-commit-id-maint:
        diff-tree: avoid lookup_unknown_object
        object_as_type: set commit index
        alloc: factor out commit index
        add object_as_type helper for casting objects
        parse_object_buffer: do not set object type
        move setting of object->type to alloc_* functions
        alloc: write out allocator definitions
        alloc.c: remove the alloc_raw_commit_node() function
      5d7c37a1
    • J
      diff-tree: avoid lookup_unknown_object · b794ebea
      Jeff King 提交于
      We generally want to avoid lookup_unknown_object, because it
      results in allocating more memory for the object than may be
      strictly necessary.
      
      In this case, it is used to check whether we have an
      already-parsed object before calling parse_object, to save
      us from reading the object from disk. Using lookup_object
      would be fine for that purpose, but we can take it a step
      further. Since this code was written, parse_object already
      learned the "check lookup_object" optimization, so we can
      simply call parse_object directly.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      b794ebea
    • J
      object_as_type: set commit index · 34dfe197
      Jeff King 提交于
      The point of the "index" field of struct commit is that
      every allocated commit would have one. It is supposed to be
      an invariant that whenever object->type is set to
      OBJ_COMMIT, we have a unique index.
      
      Commit 969eba63 (commit: push commit_index update into
      alloc_commit_node, 2014-06-10) covered this case for
      newly-allocated commits. However, we may also allocate an
      "unknown" object via lookup_unknown_object, and only later
      convert it to a commit. We must make sure that we set the
      commit index when we switch the type field.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      34dfe197
    • J
      alloc: factor out commit index · 5de7f500
      Jeff King 提交于
      We keep a static counter to set the commit index on newly
      allocated objects. However, since we also need to set the
      index on any_objects which are converted to commits, let's
      make the counter available as a public function.
      
      While we're moving it, let's make sure the counter is
      allocated as an unsigned integer to match the index field in
      "struct commit".
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      5de7f500
    • J
      add object_as_type helper for casting objects · c4ad00f8
      Jeff King 提交于
      When we call lookup_commit, lookup_tree, etc, the logic goes
      something like:
      
        1. Look for an existing object struct. If we don't have
           one, allocate and return a new one.
      
        2. Double check that any object we have is the expected
           type (and complain and return NULL otherwise).
      
        3. Convert an object with type OBJ_NONE (from a prior
           call to lookup_unknown_object) to the expected type.
      
      We can encapsulate steps 2 and 3 in a helper function which
      checks whether we have the expected object type, converts
      OBJ_NONE as appropriate, and returns the object.
      
      Not only does this shorten the code, but it also provides
      one central location for converting OBJ_NONE objects into
      objects of other types. Future patches will use that to
      enforce type-specific invariants.
      
      Since this is a refactoring, we would want it to behave
      exactly as the current code. It takes a little reasoning to
      see that this is the case:
      
        - for lookup_{commit,tree,etc} functions, we are just
          pulling steps 2 and 3 into a function that does the same
          thing.
      
        - for the call in peel_object, we currently only do step 3
          (but we want to consolidate it with the others, as
          mentioned above). However, step 2 is a noop here, as the
          surrounding conditional makes sure we have OBJ_NONE
          (which we want to keep to avoid an extraneous call to
          sha1_object_info).
      
        - for the call in lookup_commit_reference_gently, we are
          currently doing step 2 but not step 3. However, step 3
          is a noop here. The object we got will have just come
          from deref_tag, which must have figured out the type for
          each object in order to know when to stop peeling.
          Therefore the type will never be OBJ_NONE.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      c4ad00f8
    • J
      parse_object_buffer: do not set object type · fe0444b5
      Jeff King 提交于
      The only way that "obj" can be non-NULL is if it came from
      one of the lookup_* functions. These functions always ensure
      that the object has the expected type (and return NULL
      otherwise), so there is no need for us to set the type.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      fe0444b5
    • J
      move setting of object->type to alloc_* functions · fe24d396
      Jeff King 提交于
      The "struct object" type implements basic object
      polymorphism.  Individual instances are allocated as
      concrete types (or as a union type that can store any
      object), and a "struct object *" can be cast into its real
      type after examining its "type" enum.  This means it is
      dangerous to have a type field that does not match the
      allocation (e.g., setting the type field of a "struct blob"
      to "OBJ_COMMIT" would mean that a reader might read past the
      allocated memory).
      
      In most of the current code this is not a problem; the first
      thing we do after allocating an object is usually to set its
      type field by passing it to create_object. However, the
      virtual commits we create in merge-recursive.c do not ever
      get their type set. This does not seem to have caused
      problems in practice, though (presumably because we always
      pass around a "struct commit" pointer and never even look at
      the type).
      
      We can fix this oversight and also make it harder for future
      code to get it wrong by setting the type directly in the
      object allocation functions.
      
      This will also make it easier to fix problems with commit
      index allocation, as we know that any object allocated by
      alloc_commit_node will meet the invariant that an object
      with an OBJ_COMMIT type field will have a unique index
      number.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      fe24d396
    • J
      alloc: write out allocator definitions · 52604d71
      Jeff King 提交于
      Because the allocator functions for tree, blobs, etc are all
      very similar, we originally used a macro to avoid repeating
      ourselves. Since the prior commit, though, the heavy lifting
      is done by an inline helper function.  The macro does still
      save us a few lines, but at some readability cost.  It
      obfuscates the function definitions (and makes them hard to
      find via grep).
      
      Much worse, though, is the fact that it isn't used
      consistently for all allocators. Somebody coming later may
      be tempted to modify DEFINE_ALLOCATOR, but they would miss
      alloc_commit_node, which is treated specially.
      
      Let's just drop the macro and write everything out
      explicitly.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      52604d71
    • R
      alloc.c: remove the alloc_raw_commit_node() function · 8c3f3f28
      Ramsay Jones 提交于
      In order to encapsulate the setting of the unique commit index, commit
      969eba63 ("commit: push commit_index update into alloc_commit_node",
      10-06-2014) introduced a (logically private) intermediary allocator
      function. However, this function (alloc_raw_commit_node()) was declared
      as a public function, which undermines its entire purpose.
      
      Introduce an inline function, alloc_node(), which implements the main
      logic of the allocator used by DEFINE_ALLOCATOR, and redefine the macro
      in terms of the new function. In addition, use the new function in the
      implementation of the alloc_commit_node() allocator, rather than the
      intermediary allocator, which can now be removed.
      
      Noticed by sparse ("symbol 'alloc_raw_commit_node' was not declared.
      Should it be static?").
      Signed-off-by: NRamsay Jones <ramsay@ramsay1.demon.co.uk>
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      8c3f3f28
  4. 24 7月, 2014 3 次提交
  5. 23 7月, 2014 18 次提交
  6. 22 7月, 2014 2 次提交
  7. 17 7月, 2014 3 次提交
    • J
      Git 2.0.2 · ebc5da32
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      ebc5da32
    • J
      Merge branch 'jc/fix-clone-single-starting-at-a-tag' into maint · 2e931843
      Junio C Hamano 提交于
      "git clone -b brefs/tags/bar" would have mistakenly thought we were
      following a single tag, even though it was a name of the branch,
      because it incorrectly used strstr().
      
      * jc/fix-clone-single-starting-at-a-tag:
        builtin/clone.c: detect a clone starting at a tag correctly
      2e931843
    • J
      Merge branch 'jk/pretty-G-format-fixes' into maint · 588de86f
      Junio C Hamano 提交于
      "%G" (nothing after G) is an invalid pretty format specifier, but
      the parser did not notice it as garbage.
      
      * jk/pretty-G-format-fixes:
        move "%G" format test from t7510 to t6006
        pretty: avoid reading past end-of-string with "%G"
        t7510: check %G* pretty-format output
        t7510: test a commit signed by an unknown key
        t7510: use consistent &&-chains in loop
        t7510: stop referring to master in later tests
      588de86f