7
7
8
8
has_features :bare_repositories , :reference_tracking , :ssh_identity , :multiple_remotes ,
9
9
:user , :depth , :branch , :submodules , :safe_directory , :hooks_allowed ,
10
- :umask , :http_proxy , :tmpdir
10
+ :umask , :http_proxy , :tmpdir , :include_paths
11
11
12
12
def create
13
13
check_force
@@ -19,6 +19,7 @@ def create
19
19
set_mirror if @resource . value ( :ensure ) == :mirror && @resource . value ( :source ) . is_a? ( Hash )
20
20
self . skip_hooks = @resource . value ( :skip_hooks ) unless @resource . value ( :skip_hooks ) . nil?
21
21
22
+ configure_sparse_checkout if @resource . value ( :includes )
22
23
checkout if @resource . value ( :revision )
23
24
update_submodules if !ensure_bare_or_mirror? && @resource . value ( :submodules ) == :true
24
25
@@ -91,6 +92,20 @@ def revision=(desired)
91
92
update_owner_and_excludes
92
93
end
93
94
95
+ def includes
96
+ return nil if bare_exists?
97
+
98
+ at_path do
99
+ return nil unless File . file? ( '.git/info/sparse-checkout' )
100
+ File . readlines ( '.git/info/sparse-checkout' ) . map ( &:chomp )
101
+ end
102
+ end
103
+
104
+ def includes = ( _desired )
105
+ configure_sparse_checkout
106
+ checkout
107
+ end
108
+
94
109
def bare_exists?
95
110
bare_git_config_exists? && !working_copy_exists?
96
111
end
@@ -407,6 +422,33 @@ def init_repository
407
422
end
408
423
end
409
424
425
+ # @!visibility private
426
+ def configure_sparse_checkout
427
+ raise ( "Cannot set includes on a #{ @resource . value ( :ensure ) } repository" ) if ensure_bare_or_mirror? || bare_exists?
428
+
429
+ git_ver = git_version
430
+ if Gem ::Version . new ( git_ver ) >= Gem ::Version . new ( '2.25.0' )
431
+ # sparse-checkout command was introduced in version 2.25.0.
432
+ at_path do
433
+ args = [ 'sparse-checkout' , 'set' , '--no-cone' ] + @resource . value ( :includes )
434
+ exec_git ( *args )
435
+ end
436
+ else
437
+ at_path do
438
+ exec_git ( 'config' , '--local' , '--bool' , 'core.sparseCheckout' , 'true' )
439
+
440
+ # Includes may be an Array or a String
441
+ File . open ( '.git/info/sparse-checkout' , 'w' ) do |f |
442
+ if @resource . value ( :includes ) . respond_to? ( :each )
443
+ @resource . value ( :includes ) . each { |inc | f . puts inc }
444
+ else
445
+ f . puts @resource . value ( :includes )
446
+ end
447
+ end
448
+ end
449
+ end
450
+ end
451
+
410
452
# @!visibility private
411
453
def commits?
412
454
at_path do
@@ -493,7 +535,7 @@ def tags
493
535
def set_excludes
494
536
# Excludes may be an Array or a String.
495
537
at_path do
496
- open ( '.git/info/exclude' , 'w' ) do |f |
538
+ File . open ( '.git/info/exclude' , 'w' ) do |f |
497
539
if @resource . value ( :excludes ) . respond_to? ( :each )
498
540
@resource . value ( :excludes ) . each { |ex | f . puts ex }
499
541
else
0 commit comments