Skip to content
Snippets Groups Projects
  1. Feb 19, 2016
  2. Feb 17, 2016
  3. Feb 16, 2016
  4. Feb 09, 2016
    • Yorick Peterse's avatar
      Smarter flushing of branch statistics caches · 2ce0d063
      Yorick Peterse authored
      Instead of flushing the behind/ahead counts for all branches upon every
      push we now only flush the cache of branches that actually need to have
      these statistics recalculated. There are now basically 2 scenarios and
      their effects:
      
      1. A user pushes a commit to the default branch, this results in the
         cache being flushed for all branches.
      2. A user pushes to a non default branch, this results in _only_ the
         cache for that branch being flushed.
      
      The existing code (Repository#expire_cache) remains backwards compatible
      with the previous behaviour, the new behaviour is only applied when a
      branch name is passed as an argument. This ensures that when for example
      a project is deleted the cache for all branches is flushed.
      2ce0d063
  5. Feb 08, 2016
    • Yorick Peterse's avatar
      Cache various Repository Git operations · 9a99d8e4
      Yorick Peterse authored
      This caches the output of the following methods:
      
      * Repository#empty?
      * Repository#has_visible_content?
      * Repository#root_ref
      
      The cache for Repository#has_visible_content? is flushed whenever a
      commit is pushed to a new branch or an existing branch is removed.
      The cache for Repository#root_ref is only flushed whenever a user
      changes the default branch of a project. The cache for Repository#empty?
      is never explicitly flushed as there's no need for it.
      9a99d8e4
    • Tony Chu's avatar
  6. Feb 04, 2016
    • Yorick Peterse's avatar
      Dedicated method for counting commits between refs · b263ab61
      Yorick Peterse authored
      gitlab_git 8.1 adds the ability to count the amount of commits between
      two references without having to allocate anything but regular
      Rugged::Commit objects. This in turn speeds up the process of counting
      the number of commits a branch is ahead/behind by about 3.5x.
      b263ab61
  7. Jan 28, 2016
  8. Jan 22, 2016
  9. Jan 21, 2016
  10. Jan 07, 2016
  11. Dec 25, 2015
    • Stan Hu's avatar
      Disable --follow in `git log` to avoid loading duplicate commit data in infinite scroll · ff8cd116
      Stan Hu authored
      `git` doesn't work properly when `--follow` and `--skip` are specified together. We could even be **omitting commits in the Web log** as a result.
      
      Here are the gory details. Let's say you ran:
      
      ```
      git log -n=5 --skip=2 README
      ```
      
      This is the working case since it omits `--follow`. This is what happens:
      
      1. `git` starts at `HEAD` and traverses down the tree until it finds the top-most commit relevant to README.
      2. Once this is found, this commit is returned via `get_revision_1()`.
      3. If the `skip_count` is positive, decrement and repeat step 2. Otherwise go onto step 4.
      4. `show_log()` gets called with that commit.
      5. Repeat step 1 until we have all five entries.
      
      That's exactly what we want. What happens when you use `--follow`? You have to understand how step 1 is performed:
      
      * When you specify a pathspec on the command-line (e.g. README), a flag `prune` [gets set here](https://github.com/git/git/blob/master/revision.c#L2351).
      * If the `prune` flag is active, `get_commit_action()` determines whether the commit should be [scanned for matching paths](https://github.com/git/git/blob/master/revision.c#L2989).
      * In the case of `--follow`, however, `prune` is [disabled here](https://github.com/git/git/blob/master/revision.c#L2350).
      * As a result, a commit is never scanned for matching paths and therefore never pruned. `HEAD` will always get returned as the first commit, even if it's not relevant to the README.
      * Making matters worse, the `--skip` in the example above would actually skip every other after `HEAD` N times. If README were changed in these skipped commits, we would actually miss information!
      
      Since git uses a matching algorithm to determine whether a file was renamed, I
      believe `git` needs to generate a diff of each commit to do this and traverse
      each commit one-by-one to do this. I think that's the rationale for disabling
      the `prune` functionality since you can't just do a simple string comparison.
      
      Closes #4181, #4229, #3574, #2410
      ff8cd116
  12. Dec 18, 2015
  13. Dec 15, 2015
    • Jeff Stubler's avatar
      Fix diverging commit count calculation · 2e8ec7e7
      Jeff Stubler authored
      Rugged seemed to stop accepting branch names as valid refs, throwing `Rugged::ReferenceError` exceptions. Now the branch target rather than branch name is used, and the default branch's hash is also calculated, and these work properly.
      
      This used to work and might be something worth re-investigating in the future.
      2e8ec7e7
  14. Dec 10, 2015
  15. Dec 08, 2015
  16. Dec 07, 2015
  17. Dec 03, 2015
  18. Nov 30, 2015
  19. Nov 18, 2015
  20. Nov 16, 2015
  21. Nov 11, 2015
  22. Nov 03, 2015
  23. Nov 02, 2015
  24. Nov 01, 2015
  25. Oct 29, 2015
  26. Oct 28, 2015
  27. Oct 23, 2015
  28. Oct 21, 2015
Loading