eac_git 0.7.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0cbaa3bcfa8bc46c1f611e08799e4a391d73ff3851f71ed3d076f1acd5c2f6ff
4
- data.tar.gz: 90e5a236919f519e06c8ff11321417e140a91c8f95be074d546584e8cd2d6927
3
+ metadata.gz: e3e59f62094b03ab4c24d4ee36a542cef813a308c797a8835482ae52174d50ea
4
+ data.tar.gz: 9c1dcb9b11dbd6cd4292f198a77efb089dae5ecc06ff077f89f94a9d6423ad9b
5
5
  SHA512:
6
- metadata.gz: 85545d07434e100d1ddaa58c2bdcfcaa10ea0f4faefa54a35bcaf8fc1caf75443e8eaea471d5998b24e90ba73408c5e71f8cb182a5beac12138bf4a66b90b79a
7
- data.tar.gz: 4f040b8eb11a692e63e464a53b41d84974d491db29ae4a16362940f0524cb2529fee319eaec2b41756af12e357a2a60fd5a07324436847163a530173793baf3c
6
+ metadata.gz: dbd211017dbe7125bfdff651ca0336573a09cd37ad160ab627a61f0d5bd21a9aa73896a074af517623ea8854d525cee93651f9b23d64b799192aea2ce40a0cff
7
+ data.tar.gz: ecf155ca625baca1be22721e7dbf29807c49a3d5d3e8d4eaf26c36466f99bea708fc55ddf17d9e0c26dbb3c4c533f6d18917aab860693f14205f36055344f132
@@ -9,7 +9,7 @@ module EacGit
9
9
  # @return [EacRubyUtils::Envs::Command]
10
10
  def archive_to_dir(path)
11
11
  path = path.to_pathname
12
- repo.command('archive', '--format=tar', hash).pipe(
12
+ repo.command('archive', '--format=tar', id).pipe(
13
13
  ::EacGit::Executables.tar.command('-xC', path)
14
14
  )
15
15
  end
@@ -7,19 +7,25 @@ module EacGit
7
7
  class Commit
8
8
  require_sub __FILE__, include_modules: true
9
9
  enable_simple_cache
10
+ include ::Comparable
10
11
 
11
12
  FIELDS = {
12
13
  author_name: '%an', author_email: '%ae', author_date: '%ai',
13
14
  subject: '%s',
14
15
  author_all: '%an <%ae>, %ai',
15
16
  commiter_name: '%cn', commiter_email: '%ce', commiter_date: '%ci',
16
- commiter_all: '%cn <%ce>, %ci'
17
+ commiter_all: '%cn <%ce>, %ci',
18
+ raw_body: '%B'
17
19
  }.freeze
18
20
 
19
- common_constructor :repo, :hash
21
+ common_constructor :repo, :id
22
+
23
+ def <=>(other)
24
+ [repo, id] <=> [other.repo, other.id]
25
+ end
20
26
 
21
27
  def format(format)
22
- repo.command('--no-pager', 'log', '-1', "--pretty=format:#{format}", hash).execute!.strip
28
+ repo.command('--no-pager', 'log', '-1', "--pretty=format:#{format}", id).execute!.strip
23
29
  end
24
30
 
25
31
  FIELDS.each do |field, format|
@@ -36,8 +42,21 @@ module EacGit
36
42
  changed_files.inject(0) { |a, e| a + e.dst_size }
37
43
  end
38
44
 
45
+ # @return [EacGit::Local::Commit, nil]
46
+ def parent
47
+ ps = parents
48
+ raise "#{self} has more than one parent" if ps.count > 2
49
+
50
+ ps.empty? ? nil : ps.first
51
+ end
52
+
53
+ # @return [Array<EacGit::Local::Commit>]
54
+ def parents
55
+ format('%P').each_line.map { |line| repo.commitize(line) }
56
+ end
57
+
39
58
  def root_child?
40
- format('%P').blank?
59
+ parents.empty?
41
60
  end
42
61
 
43
62
  private
@@ -45,7 +64,7 @@ module EacGit
45
64
  def diff_tree_execute
46
65
  args = []
47
66
  args << '--root' if root_child?
48
- args << hash
67
+ args << id
49
68
  repo.command(*::EacGit::Local::Commit::DiffTreeLine::GIT_COMMAND_ARGS, *args).execute!
50
69
  end
51
70
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_git/remote'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module EacGit
7
+ class Local
8
+ module Log
9
+ def log(until_commit = nil, from_commit = nil)
10
+ until_commit, from_commit = [until_commit, from_commit].map { |c| commitize(c) }
11
+ from_commit ||= head
12
+ command('log', '--format=%H', "#{until_commit.id}..#{from_commit.id}")
13
+ .execute!.each_line.map { |line| commitize(line.strip) }
14
+ end
15
+ end
16
+ end
17
+ end
data/lib/eac_git/local.rb CHANGED
@@ -7,15 +7,43 @@ module EacGit
7
7
  # A Git repository in local filesystem.
8
8
  class Local
9
9
  require_sub __FILE__, include_modules: true
10
+ include ::Comparable
11
+
12
+ HEAD_REFERENCE = 'HEAD'
13
+
14
+ class << self
15
+ def find(path)
16
+ path = path.to_pathname.expand_path
17
+ if path.join('.git').exist?
18
+ new(path)
19
+ elsif path.to_path != '/'
20
+ find(path.parent)
21
+ end
22
+ end
23
+ end
10
24
 
11
25
  common_constructor :root_path do
12
26
  self.root_path = root_path.to_pathname
13
27
  end
14
28
 
29
+ def <=>(other)
30
+ root_path <=> other.root_path
31
+ end
32
+
15
33
  def commit(ref, required = false)
16
34
  rev_parse(ref, required).if_present { |v| ::EacGit::Local::Commit.new(self, v) }
17
35
  end
18
36
 
37
+ def commitize(source)
38
+ if source.is_a?(::EacGit::Local::Commit)
39
+ return source if source.repo == self
40
+
41
+ source = source.id
42
+ end
43
+
44
+ source.to_s.strip.if_present(nil) { |v| ::EacGit::Local::Commit.new(self, v) }
45
+ end
46
+
19
47
  def descendant?(descendant, ancestor)
20
48
  base = merge_base(descendant, ancestor)
21
49
  return false if base.blank?
@@ -24,6 +52,11 @@ module EacGit
24
52
  base == revparse
25
53
  end
26
54
 
55
+ # @return [EacGit::Local::Commit
56
+ def head(required = true)
57
+ commit(HEAD_REFERENCE, required)
58
+ end
59
+
27
60
  def merge_base(*commits)
28
61
  refs = commits.dup
29
62
  while refs.count > 1
@@ -56,6 +89,12 @@ module EacGit
56
89
  ::EacGit::Local::Subrepo.new(self, subpath)
57
90
  end
58
91
 
92
+ # @return [Array<EacGit::Local::Subrepo>]
93
+ def subrepos
94
+ command('subrepo', '-q', 'status').execute!.split("\n").map(&:strip).select(&:present?)
95
+ .map { |subpath| subrepo(subpath) }
96
+ end
97
+
59
98
  def to_s
60
99
  "#{self.class}[#{root_path}]"
61
100
  end
@@ -5,20 +5,18 @@ require 'eac_git/rspec/stubbed_git_local_repo'
5
5
 
6
6
  module EacGit
7
7
  module Rspec
8
- class Setup
9
- common_constructor :setup_obj
10
-
11
- def perform
12
- setup_conditional_git
13
- setup_stubbed_git_local_repo
8
+ module Setup
9
+ def self.extended(setup_obj)
10
+ setup_obj.setup_conditional_git
11
+ setup_obj.setup_stubbed_git_local_repo
14
12
  end
15
13
 
16
14
  def setup_conditional_git
17
- setup_obj.conditional(:git) { ::EacGit::Executables.git.validate }
15
+ conditional(:git) { ::EacGit::Executables.git.validate }
18
16
  end
19
17
 
20
18
  def setup_stubbed_git_local_repo
21
- setup_obj.rspec_config.include ::EacGit::Rspec::StubbedGitLocalRepo
19
+ rspec_config.include ::EacGit::Rspec::StubbedGitLocalRepo
22
20
  end
23
21
  end
24
22
  end
@@ -3,6 +3,7 @@
3
3
  require 'eac_git/local'
4
4
  require 'eac_ruby_utils/envs'
5
5
  require 'fileutils'
6
+ require 'securerandom'
6
7
  require 'tmpdir'
7
8
 
8
9
  module EacGit
@@ -29,6 +30,16 @@ module EacGit
29
30
  def file(*subpath)
30
31
  StubbedGitRepositoryFile.new(self, subpath)
31
32
  end
33
+
34
+ # @return [EacGit::Local::Commit
35
+ def random_commit
36
+ content = ::SecureRandom.hex
37
+ file = "#{content}.txt"
38
+ file(file).write(content)
39
+ command('add', file).execute!
40
+ command('commit', '-m', "Random commit: #{file}.").execute!
41
+ head
42
+ end
32
43
  end
33
44
 
34
45
  class StubbedGitRepositoryFile
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacGit
4
- VERSION = '0.7.1'
4
+ VERSION = '0.9.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_git
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Put here the authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-31 00:00:00.000000000 Z
11
+ date: 2021-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_ruby_utils
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.72'
19
+ version: '0.74'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.72'
26
+ version: '0.74'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: parseconfig
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +53,7 @@ dependencies:
53
53
  version: '0.8'
54
54
  - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: 0.8.1
56
+ version: 0.8.2
57
57
  type: :development
58
58
  prerelease: false
59
59
  version_requirements: !ruby/object:Gem::Requirement
@@ -63,7 +63,7 @@ dependencies:
63
63
  version: '0.8'
64
64
  - - ">="
65
65
  - !ruby/object:Gem::Version
66
- version: 0.8.1
66
+ version: 0.8.2
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: eac_ruby_gem_support
69
69
  requirement: !ruby/object:Gem::Requirement
@@ -73,7 +73,7 @@ dependencies:
73
73
  version: '0.3'
74
74
  - - ">="
75
75
  - !ruby/object:Gem::Version
76
- version: 0.3.1
76
+ version: 0.3.2
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
@@ -83,7 +83,7 @@ dependencies:
83
83
  version: '0.3'
84
84
  - - ">="
85
85
  - !ruby/object:Gem::Version
86
- version: 0.3.1
86
+ version: 0.3.2
87
87
  description:
88
88
  email:
89
89
  executables: []
@@ -98,6 +98,7 @@ files:
98
98
  - lib/eac_git/local/commit/changed_file.rb
99
99
  - lib/eac_git/local/commit/diff_tree_line.rb
100
100
  - lib/eac_git/local/dirty_files.rb
101
+ - lib/eac_git/local/log.rb
101
102
  - lib/eac_git/local/subrepo.rb
102
103
  - lib/eac_git/local/subrepo/config.rb
103
104
  - lib/eac_git/remote.rb