gitlab_git 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/lib/gitlab_git/commit.rb +23 -0
 - data/lib/gitlab_git/git_stats.rb +3 -3
 - data/lib/gitlab_git/repository.rb +90 -0
 - metadata +1 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 5f61306b02ce00f09ae58472e5d486e4ed676388
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 823cea793f9f714ea3b2a9459a7119ad5d80ad40
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f42e53e6b8662cd00f839539348033ca9437cf15b2e3b144542502a38f3aeda9b42d7074b853604a3b4201999e6440e1859e46c890491bdafef044e6e8214a5c
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 1a17eb07cc61c26c005940c308d77b3ed2987e82c4b0109727e7b7576d39d5dce15247cb183ce414e19f6d3966939ea48dba6b43d08b501702b2288806144518
         
     | 
    
        data/lib/gitlab_git/commit.rb
    CHANGED
    
    | 
         @@ -91,6 +91,11 @@ module Gitlab 
     | 
|
| 
       91 
91 
     | 
    
         
             
                      end
         
     | 
| 
       92 
92 
     | 
    
         
             
                    end
         
     | 
| 
       93 
93 
     | 
    
         | 
| 
      
 94 
     | 
    
         
            +
                    # Delegate Repository#find_commits
         
     | 
| 
      
 95 
     | 
    
         
            +
                    def find_all(repo, options = {})
         
     | 
| 
      
 96 
     | 
    
         
            +
                      repo.find_commits(options)
         
     | 
| 
      
 97 
     | 
    
         
            +
                    end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
       94 
99 
     | 
    
         
             
                    def decorate(commit, ref = nil)
         
     | 
| 
       95 
100 
     | 
    
         
             
                      Gitlab::Git::Commit.new(commit, ref)
         
     | 
| 
       96 
101 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -190,6 +195,24 @@ module Gitlab 
     | 
|
| 
       190 
195 
     | 
    
         
             
                    raw_commit.to_patch
         
     | 
| 
       191 
196 
     | 
    
         
             
                  end
         
     | 
| 
       192 
197 
     | 
    
         | 
| 
      
 198 
     | 
    
         
            +
                  # Get refs collection(Grit::Head or Grit::Remote or Grit::Tag)
         
     | 
| 
      
 199 
     | 
    
         
            +
                  #
         
     | 
| 
      
 200 
     | 
    
         
            +
                  # Ex.
         
     | 
| 
      
 201 
     | 
    
         
            +
                  #   commit.ref(repo)
         
     | 
| 
      
 202 
     | 
    
         
            +
                  #
         
     | 
| 
      
 203 
     | 
    
         
            +
                  def refs(repo)
         
     | 
| 
      
 204 
     | 
    
         
            +
                    repo.refs_hash[id]
         
     | 
| 
      
 205 
     | 
    
         
            +
                  end
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
                  # Get ref names collection
         
     | 
| 
      
 208 
     | 
    
         
            +
                  #
         
     | 
| 
      
 209 
     | 
    
         
            +
                  # Ex.
         
     | 
| 
      
 210 
     | 
    
         
            +
                  #   commit.ref_names(repo)
         
     | 
| 
      
 211 
     | 
    
         
            +
                  #
         
     | 
| 
      
 212 
     | 
    
         
            +
                  def ref_names(repo)
         
     | 
| 
      
 213 
     | 
    
         
            +
                    refs(repo).map(&:name)
         
     | 
| 
      
 214 
     | 
    
         
            +
                  end
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
       193 
216 
     | 
    
         
             
                  private
         
     | 
| 
       194 
217 
     | 
    
         | 
| 
       195 
218 
     | 
    
         
             
                  def init_from_grit(grit)
         
     | 
    
        data/lib/gitlab_git/git_stats.rb
    CHANGED
    
    | 
         @@ -11,9 +11,9 @@ module Gitlab 
     | 
|
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                  def log
         
     | 
| 
       13 
13 
     | 
    
         
             
                    log = nil
         
     | 
| 
       14 
     | 
    
         
            -
                    Grit::Git.with_timeout( 
     | 
| 
       15 
     | 
    
         
            -
                      # Limit log to  
     | 
| 
       16 
     | 
    
         
            -
                      args = ['- 
     | 
| 
      
 14 
     | 
    
         
            +
                    Grit::Git.with_timeout(30) do
         
     | 
| 
      
 15 
     | 
    
         
            +
                      # Limit log to 6k commits to avoid timeout for huge projects
         
     | 
| 
      
 16 
     | 
    
         
            +
                      args = ['-6000', '--format=%aN%x0a%aE%x0a%cd', '--date=short', '--shortstat', '--no-merges']
         
     | 
| 
       17 
17 
     | 
    
         
             
                      log = repo.git.run(nil, 'log', nil, {}, args)
         
     | 
| 
       18 
18 
     | 
    
         
             
                    end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
         @@ -199,6 +199,96 @@ module Gitlab 
     | 
|
| 
       199 
199 
     | 
    
         
             
                  def diff(from, to)
         
     | 
| 
       200 
200 
     | 
    
         
             
                    raw.diff(from, to)
         
     | 
| 
       201 
201 
     | 
    
         
             
                  end
         
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
      
 203 
     | 
    
         
            +
                  # Returns commits collection
         
     | 
| 
      
 204 
     | 
    
         
            +
                  #
         
     | 
| 
      
 205 
     | 
    
         
            +
                  # Ex.
         
     | 
| 
      
 206 
     | 
    
         
            +
                  #   repo.find_commits(
         
     | 
| 
      
 207 
     | 
    
         
            +
                  #     ref: 'master',
         
     | 
| 
      
 208 
     | 
    
         
            +
                  #     max_count: 10,
         
     | 
| 
      
 209 
     | 
    
         
            +
                  #     skip: 5,
         
     | 
| 
      
 210 
     | 
    
         
            +
                  #     order: :date
         
     | 
| 
      
 211 
     | 
    
         
            +
                  #   )
         
     | 
| 
      
 212 
     | 
    
         
            +
                  #
         
     | 
| 
      
 213 
     | 
    
         
            +
                  #   +options+ is a Hash of optional arguments to git
         
     | 
| 
      
 214 
     | 
    
         
            +
                  #     :ref is the ref from which to begin (SHA1 or name)
         
     | 
| 
      
 215 
     | 
    
         
            +
                  #     :contains is the commit contained by the refs from which to begin (SHA1 or name)
         
     | 
| 
      
 216 
     | 
    
         
            +
                  #     :max_count is the maximum number of commits to fetch
         
     | 
| 
      
 217 
     | 
    
         
            +
                  #     :skip is the number of commits to skip
         
     | 
| 
      
 218 
     | 
    
         
            +
                  #     :order is the commits order and allowed value is :date(default) or :topo
         
     | 
| 
      
 219 
     | 
    
         
            +
                  #
         
     | 
| 
      
 220 
     | 
    
         
            +
                  def find_commits(options = {})
         
     | 
| 
      
 221 
     | 
    
         
            +
                    actual_options = options.dup
         
     | 
| 
      
 222 
     | 
    
         
            +
             
     | 
| 
      
 223 
     | 
    
         
            +
                    allowed_options = [:ref, :max_count, :skip, :contains, :order]
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                    actual_options.keep_if do |key, value|
         
     | 
| 
      
 226 
     | 
    
         
            +
                      allowed_options.include?(key)
         
     | 
| 
      
 227 
     | 
    
         
            +
                    end
         
     | 
| 
      
 228 
     | 
    
         
            +
             
     | 
| 
      
 229 
     | 
    
         
            +
                    default_options = {pretty: 'raw', order: :date}
         
     | 
| 
      
 230 
     | 
    
         
            +
             
     | 
| 
      
 231 
     | 
    
         
            +
                    actual_options = default_options.merge(actual_options)
         
     | 
| 
      
 232 
     | 
    
         
            +
             
     | 
| 
      
 233 
     | 
    
         
            +
                    order = actual_options.delete(:order)
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
      
 235 
     | 
    
         
            +
                    case order
         
     | 
| 
      
 236 
     | 
    
         
            +
                    when :date
         
     | 
| 
      
 237 
     | 
    
         
            +
                      actual_options[:date_order] = true
         
     | 
| 
      
 238 
     | 
    
         
            +
                    when :topo
         
     | 
| 
      
 239 
     | 
    
         
            +
                      actual_options[:topo_order] = true
         
     | 
| 
      
 240 
     | 
    
         
            +
                    end
         
     | 
| 
      
 241 
     | 
    
         
            +
             
     | 
| 
      
 242 
     | 
    
         
            +
                    ref = actual_options.delete(:ref)
         
     | 
| 
      
 243 
     | 
    
         
            +
             
     | 
| 
      
 244 
     | 
    
         
            +
                    containing_commit = actual_options.delete(:contains)
         
     | 
| 
      
 245 
     | 
    
         
            +
             
     | 
| 
      
 246 
     | 
    
         
            +
                    args = []
         
     | 
| 
      
 247 
     | 
    
         
            +
             
     | 
| 
      
 248 
     | 
    
         
            +
                    if ref
         
     | 
| 
      
 249 
     | 
    
         
            +
                      args.push(ref)
         
     | 
| 
      
 250 
     | 
    
         
            +
                    elsif containing_commit
         
     | 
| 
      
 251 
     | 
    
         
            +
                      args.push(*branch_names_contains(containing_commit))
         
     | 
| 
      
 252 
     | 
    
         
            +
                    else
         
     | 
| 
      
 253 
     | 
    
         
            +
                      actual_options[:all] = true
         
     | 
| 
      
 254 
     | 
    
         
            +
                    end
         
     | 
| 
      
 255 
     | 
    
         
            +
             
     | 
| 
      
 256 
     | 
    
         
            +
                    output = raw.git.native(:rev_list, actual_options, *args)
         
     | 
| 
      
 257 
     | 
    
         
            +
             
     | 
| 
      
 258 
     | 
    
         
            +
                    Grit::Commit.list_from_string(raw, output).map do |commit|
         
     | 
| 
      
 259 
     | 
    
         
            +
                      Gitlab::Git::Commit.decorate(commit)
         
     | 
| 
      
 260 
     | 
    
         
            +
                    end
         
     | 
| 
      
 261 
     | 
    
         
            +
                  rescue Grit::GitRuby::Repository::NoSuchShaFound
         
     | 
| 
      
 262 
     | 
    
         
            +
                    []
         
     | 
| 
      
 263 
     | 
    
         
            +
                  end
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
                  # Returns branch names collection that contains the special commit(SHA1 or name)
         
     | 
| 
      
 266 
     | 
    
         
            +
                  #
         
     | 
| 
      
 267 
     | 
    
         
            +
                  # Ex.
         
     | 
| 
      
 268 
     | 
    
         
            +
                  #   repo.branch_names_contains('master')
         
     | 
| 
      
 269 
     | 
    
         
            +
                  #
         
     | 
| 
      
 270 
     | 
    
         
            +
                  def branch_names_contains(commit)
         
     | 
| 
      
 271 
     | 
    
         
            +
                    output = raw.git.native(:branch, {contains: true}, commit)
         
     | 
| 
      
 272 
     | 
    
         
            +
                    # The output is expected as follow
         
     | 
| 
      
 273 
     | 
    
         
            +
                    #   fix-aaa
         
     | 
| 
      
 274 
     | 
    
         
            +
                    #   fix-bbb
         
     | 
| 
      
 275 
     | 
    
         
            +
                    # * master
         
     | 
| 
      
 276 
     | 
    
         
            +
                    output.scan(/[^* \n]+/)
         
     | 
| 
      
 277 
     | 
    
         
            +
                  end
         
     | 
| 
      
 278 
     | 
    
         
            +
             
     | 
| 
      
 279 
     | 
    
         
            +
                  # Get refs hash which key is SHA1 and value is ref object(Grit::Head or Grit::Remote or Grit::Tag)
         
     | 
| 
      
 280 
     | 
    
         
            +
                  def refs_hash
         
     | 
| 
      
 281 
     | 
    
         
            +
                    # Initialize only when first call
         
     | 
| 
      
 282 
     | 
    
         
            +
                    if @refs_hash.nil?
         
     | 
| 
      
 283 
     | 
    
         
            +
                      @refs_hash = Hash.new { |h, k| h[k] = [] }
         
     | 
| 
      
 284 
     | 
    
         
            +
             
     | 
| 
      
 285 
     | 
    
         
            +
                      @raw.refs.each do |r|
         
     | 
| 
      
 286 
     | 
    
         
            +
                        @refs_hash[r.commit.id] << r
         
     | 
| 
      
 287 
     | 
    
         
            +
                      end
         
     | 
| 
      
 288 
     | 
    
         
            +
                    end
         
     | 
| 
      
 289 
     | 
    
         
            +
             
     | 
| 
      
 290 
     | 
    
         
            +
                    @refs_hash
         
     | 
| 
      
 291 
     | 
    
         
            +
                  end
         
     | 
| 
       202 
292 
     | 
    
         
             
                end
         
     | 
| 
       203 
293 
     | 
    
         
             
              end
         
     | 
| 
       204 
294 
     | 
    
         
             
            end
         
     |