gitlab_git 7.0.0.rc10 → 7.0.0.rc11
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/VERSION +1 -1
- data/lib/gitlab_git/blob.rb +27 -18
- data/lib/gitlab_git/diff.rb +18 -7
- data/lib/gitlab_git/repository.rb +40 -41
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01d35bccb72fd1412692b9c65341610f78616595
|
4
|
+
data.tar.gz: 636bf49e47997552e56cd1af4858632621701283
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a03878e04c0906780ea36d4852f1e030388c60862ffbbcef6395a8e66f41f0e534be34d8f0079aa938aadbcff909d5d4df50593d8603aad11b70d0d514dc8f7
|
7
|
+
data.tar.gz: 2636e356c09f723637d585236c58fb50c52e154482a9aebf1d725d397e755fc4a63fbb8aed92d33205c322949f3ca2bf33f61fbc250c0abd6113643f89a304e4
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
7.0.0.
|
1
|
+
7.0.0.rc11
|
data/lib/gitlab_git/blob.rb
CHANGED
@@ -15,18 +15,22 @@ module Gitlab
|
|
15
15
|
|
16
16
|
return nil unless blob_entry
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
18
|
+
if blob_entry[:type] == :commit
|
19
|
+
submodule_blob(blob_entry, path, sha)
|
20
|
+
else
|
21
|
+
blob = repository.lookup(blob_entry[:oid])
|
22
|
+
|
23
|
+
if blob
|
24
|
+
Blob.new(
|
25
|
+
id: blob.oid,
|
26
|
+
name: blob_entry[:name],
|
27
|
+
size: blob.size,
|
28
|
+
data: blob.content,
|
29
|
+
mode: blob_entry[:mode],
|
30
|
+
path: path,
|
31
|
+
commit_id: sha,
|
32
|
+
)
|
33
|
+
end
|
30
34
|
end
|
31
35
|
end
|
32
36
|
|
@@ -63,17 +67,22 @@ module Gitlab
|
|
63
67
|
|
64
68
|
if path_arr.size > 1
|
65
69
|
return nil unless entry[:type] == :tree
|
66
|
-
else
|
67
|
-
return nil unless entry[:type] == :blob
|
68
|
-
end
|
69
|
-
|
70
|
-
if path_arr.size > 1
|
71
70
|
path_arr.shift
|
72
71
|
find_entry_by_path(repository, entry[:oid], path_arr.join('/'))
|
73
72
|
else
|
74
|
-
entry
|
73
|
+
[:blob, :commit].include?(entry[:type]) ? entry : nil
|
75
74
|
end
|
76
75
|
end
|
76
|
+
|
77
|
+
def submodule_blob(blob_entry, path, sha)
|
78
|
+
Blob.new(
|
79
|
+
id: blob_entry[:oid],
|
80
|
+
name: blob_entry[:name],
|
81
|
+
data: '',
|
82
|
+
path: path,
|
83
|
+
commit_id: sha,
|
84
|
+
)
|
85
|
+
end
|
77
86
|
end
|
78
87
|
|
79
88
|
def initialize(options)
|
data/lib/gitlab_git/diff.rb
CHANGED
@@ -5,8 +5,6 @@ module Gitlab
|
|
5
5
|
class TimeoutError < StandardError; end
|
6
6
|
include EncodingHelper
|
7
7
|
|
8
|
-
attr_accessor :raw_diff
|
9
|
-
|
10
8
|
# Diff properties
|
11
9
|
attr_accessor :old_path, :new_path, :a_mode, :b_mode, :diff
|
12
10
|
|
@@ -52,11 +50,13 @@ module Gitlab
|
|
52
50
|
hash
|
53
51
|
end
|
54
52
|
|
53
|
+
def submodule?
|
54
|
+
a_mode == '160000' || b_mode == '160000'
|
55
|
+
end
|
56
|
+
|
55
57
|
private
|
56
58
|
|
57
59
|
def init_from_rugged(rugged)
|
58
|
-
@raw_diff = rugged
|
59
|
-
|
60
60
|
@diff = encode!(strip_diff_headers(rugged.to_s))
|
61
61
|
|
62
62
|
d = rugged.delta
|
@@ -80,9 +80,20 @@ module Gitlab
|
|
80
80
|
# Strip out the information at the beginning of the patch's text to match
|
81
81
|
# Grit's output
|
82
82
|
def strip_diff_headers(diff_text)
|
83
|
-
|
84
|
-
|
85
|
-
|
83
|
+
# Delete everything up to the first line that starts with '---' or
|
84
|
+
# 'Binary'
|
85
|
+
diff_text.sub!(/\A.*?^(---|Binary)/m, '\1')
|
86
|
+
# Remove trailing newline because the tests ask for it
|
87
|
+
diff_text.chomp!
|
88
|
+
|
89
|
+
if diff_text.start_with?('---') or diff_text.start_with?('Binary')
|
90
|
+
diff_text
|
91
|
+
else
|
92
|
+
# If the diff_text did not contain a line starting with '---' or
|
93
|
+
# 'Binary', return the empty string. No idea why; we are just
|
94
|
+
# preserving behavior from before the refactor.
|
95
|
+
''
|
96
|
+
end
|
86
97
|
end
|
87
98
|
end
|
88
99
|
end
|
@@ -265,7 +265,7 @@ module Gitlab
|
|
265
265
|
# Return an array of Diff objects that represent the diff
|
266
266
|
# between +from+ and +to+.
|
267
267
|
def diff(from, to, *paths)
|
268
|
-
rugged.diff(from, to, paths: paths).
|
268
|
+
rugged.diff(from, to, paths: paths).each_patch.map do |p|
|
269
269
|
Gitlab::Git::Diff.new(p)
|
270
270
|
end
|
271
271
|
end
|
@@ -275,7 +275,7 @@ module Gitlab
|
|
275
275
|
# NOTE: It would be simpler to use the Rugged::Diff#patch method, but
|
276
276
|
# that formats the diff text differently than Rugged::Patch#to_s for
|
277
277
|
# changes to binary files.
|
278
|
-
rugged.diff(from, to, paths: paths).
|
278
|
+
rugged.diff(from, to, paths: paths).each_patch.map do |p|
|
279
279
|
p.to_s
|
280
280
|
end.join("\n")
|
281
281
|
end
|
@@ -736,11 +736,11 @@ module Gitlab
|
|
736
736
|
|
737
737
|
current = ""
|
738
738
|
content.split("\n").each do |txt|
|
739
|
-
if txt.match(/^\[/)
|
739
|
+
if txt.match(/^\s*\[/)
|
740
740
|
current = txt.match(/(?<=").*(?=")/)[0]
|
741
741
|
results[current] = {}
|
742
742
|
else
|
743
|
-
match_data = txt.match(/(\w+)
|
743
|
+
match_data = txt.match(/(\w+)\s*=\s*(.*)/)
|
744
744
|
results[current][match_data[1]] = match_data[2]
|
745
745
|
|
746
746
|
if match_data[1] == "path"
|
@@ -778,7 +778,7 @@ module Gitlab
|
|
778
778
|
end
|
779
779
|
|
780
780
|
if !current_path ||
|
781
|
-
commit_touches_path?(c, current_path, options[:follow])
|
781
|
+
commit_touches_path?(c, current_path, options[:follow], walker)
|
782
782
|
|
783
783
|
# This is a commit we care about, unless we haven't skipped enough
|
784
784
|
# yet
|
@@ -792,36 +792,43 @@ module Gitlab
|
|
792
792
|
commits
|
793
793
|
end
|
794
794
|
|
795
|
-
# Returns true if the given commit affects the given path. If the
|
796
|
-
# +follow+ option is true and the file specified by +path+ was renamed,
|
797
|
-
# then the path value is set to the old path.
|
798
|
-
def commit_touches_path?(commit, path, follow)
|
799
|
-
if follow
|
800
|
-
touches_path_diff?(commit, path)
|
801
|
-
else
|
802
|
-
touches_path_tree?(commit, path)
|
803
|
-
end
|
804
|
-
end
|
805
|
-
|
806
795
|
# Returns true if +commit+ introduced changes to +path+, using commit
|
807
|
-
# trees to make that determination.
|
808
|
-
|
809
|
-
|
796
|
+
# trees to make that determination. Uses the history simplification
|
797
|
+
# rules that `git log` uses by default, where a commit is omitted if it
|
798
|
+
# is TREESAME to any parent.
|
799
|
+
#
|
800
|
+
# If the +follow+ option is true and the file specified by +path+ was
|
801
|
+
# renamed, then the path value is set to the old path.
|
802
|
+
def commit_touches_path?(commit, path, follow, walker)
|
810
803
|
entry = tree_entry(commit, path)
|
811
804
|
|
812
|
-
if
|
805
|
+
if commit.parents.empty?
|
813
806
|
# This is the root commit, return true if it has +path+ in its tree
|
814
807
|
return entry != nil
|
815
808
|
end
|
816
809
|
|
817
|
-
|
810
|
+
num_treesame = 0
|
811
|
+
commit.parents.each do |parent|
|
812
|
+
parent_entry = tree_entry(parent, path)
|
813
|
+
|
814
|
+
# Only follow the first TREESAME parent for merge commits
|
815
|
+
if num_treesame > 0
|
816
|
+
walker.hide(parent)
|
817
|
+
next
|
818
|
+
end
|
818
819
|
|
819
|
-
|
820
|
-
|
821
|
-
|
820
|
+
if entry.nil? && parent_entry.nil?
|
821
|
+
num_treesame += 1
|
822
|
+
elsif entry && parent_entry && entry[:oid] == parent_entry[:oid]
|
823
|
+
num_treesame += 1
|
824
|
+
end
|
825
|
+
end
|
826
|
+
|
827
|
+
case num_treesame
|
828
|
+
when 0
|
829
|
+
detect_rename(commit, commit.parents.first, path) if follow
|
822
830
|
true
|
823
|
-
else
|
824
|
-
entry[:oid] != parent_entry[:oid]
|
831
|
+
else false
|
825
832
|
end
|
826
833
|
end
|
827
834
|
|
@@ -841,24 +848,18 @@ module Gitlab
|
|
841
848
|
tmp_entry
|
842
849
|
end
|
843
850
|
|
844
|
-
#
|
845
|
-
#
|
846
|
-
|
847
|
-
|
848
|
-
def touches_path_diff?(commit, path)
|
849
|
-
diff = commit.diff(reverse: true, paths: [path],
|
850
|
-
disable_pathspec_match: true)
|
851
|
-
|
852
|
-
return false if diff.deltas.empty?
|
851
|
+
# Compare +commit+ and +parent+ for +path+. If +path+ is a file and was
|
852
|
+
# renamed in +commit+, then set +path+ to the old filename.
|
853
|
+
def detect_rename(commit, parent, path)
|
854
|
+
diff = parent.diff(commit, paths: [path], disable_pathspec_match: true)
|
853
855
|
|
854
856
|
# If +path+ is a filename, not a directory, then we should only have
|
855
857
|
# one delta. We don't need to follow renames for directories.
|
856
|
-
return
|
858
|
+
return nil if diff.each_delta.count > 1
|
857
859
|
|
858
|
-
|
859
|
-
delta = diff.deltas.first
|
860
|
+
delta = diff.each_delta.first
|
860
861
|
if delta.added?
|
861
|
-
full_diff =
|
862
|
+
full_diff = parent.diff(commit)
|
862
863
|
full_diff.find_similar!
|
863
864
|
|
864
865
|
full_diff.each_delta do |full_delta|
|
@@ -868,8 +869,6 @@ module Gitlab
|
|
868
869
|
end
|
869
870
|
end
|
870
871
|
end
|
871
|
-
|
872
|
-
true
|
873
872
|
end
|
874
873
|
|
875
874
|
def archive_to_file(treeish = 'master', prefix = nil, filename = 'archive.tar.gz', format = nil, compress_cmd = %W(gzip))
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab_git
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.0.
|
4
|
+
version: 7.0.0.rc11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitriy Zaporozhets
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gitlab-linguist
|