Class: GitCommitSizeScraper::Scraper

Inherits:
Object
  • Object
show all
Defined in:
lib/git_commit_size_scraper/scraper.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Scraper

Returns a new instance of Scraper.



5
6
7
8
9
# File 'lib/git_commit_size_scraper/scraper.rb', line 5

def initialize *args
  args.flatten!
  @commits = `git rev-list --all #{args.join " "}`.split
  @list    = {}
end

Instance Attribute Details

#commitsObject (readonly)

Returns the value of attribute commits.



3
4
5
# File 'lib/git_commit_size_scraper/scraper.rb', line 3

def commits
  @commits
end

#listObject (readonly)

Returns the value of attribute list.



3
4
5
# File 'lib/git_commit_size_scraper/scraper.rb', line 3

def list
  @list
end

Instance Method Details

#blobs_in_commit(treeish) ⇒ Object



11
12
13
14
15
# File 'lib/git_commit_size_scraper/scraper.rb', line 11

def blobs_in_commit treeish
 `git diff-tree -r -c -M -C --no-commit-id #{treeish}`.
   split("\n").
   map { |blob| blob.split[3] }
end

#bytes_in_commit(treeish) ⇒ Object



22
23
24
25
# File 'lib/git_commit_size_scraper/scraper.rb', line 22

def bytes_in_commit treeish
  blobs = blobs_in_commit treeish
  total = blobs.map { |blob| size_in_bytes blob }.reduce(:+)
end

#size_in_bytes(obj) ⇒ Object



17
18
19
20
# File 'lib/git_commit_size_scraper/scraper.rb', line 17

def size_in_bytes obj
  return 0 if obj =~ /\A0+\z/
  `git cat-file -s #{obj}`.to_i
end

#walkObject



27
28
29
# File 'lib/git_commit_size_scraper/scraper.rb', line 27

def walk
  @commits.map { |c| @list[c] = bytes_in_commit c }
end