1010module Dependabot
1111 module Gradle
1212 class FileUpdater
13- class LockfileUpdater
13+ class GradleUpdaterBase
1414 extend T ::Sig
1515
1616 sig { params ( dependency_files : T ::Array [ Dependabot ::DependencyFile ] ) . void }
1717 def initialize ( dependency_files :)
1818 @dependency_files = dependency_files
1919 end
2020
21+ sig { params ( _file : Dependabot ::DependencyFile ) . returns ( T ::Boolean ) }
22+ def target_file? ( _file )
23+ raise NotImplementedError
24+ end
25+
26+ sig { returns ( T ::Array [ String ] ) }
27+ def command_args
28+ raise NotImplementedError
29+ end
30+
31+ sig { params ( build_file : Dependabot ::DependencyFile ) . returns ( String ) }
32+ def base_path ( build_file )
33+ File . dirname ( File . join ( build_file . directory , build_file . name ) )
34+ end
35+
2136 sig { params ( build_file : Dependabot ::DependencyFile ) . returns ( T ::Array [ Dependabot ::DependencyFile ] ) }
22- def update_lockfiles ( build_file )
23- local_lockfiles = dependency_files . select do |file |
24- file . directory == build_file . directory && file . name . end_with? ( ".lockfile" )
37+ def update_files ( build_file )
38+ local_files = dependency_files . select do |file |
39+ file . directory == build_file . directory && target_file? ( file )
2540 end
2641
27- # If we don't have any lockfiles in the build files don't generate one
28- return dependency_files unless local_lockfiles . any?
42+ # If we don't have any files in the build files don't generate one
43+ return dependency_files unless local_files . any?
2944
3045 updated_files = dependency_files . dup
3146 SharedHelpers . in_a_temporary_directory do |temp_dir |
3247 populate_temp_directory ( temp_dir )
33- cwd = File . join ( temp_dir , build_file . directory , build_file . name )
34- cwd = File . dirname ( cwd )
48+ cwd = File . join ( temp_dir , base_path ( build_file ) )
3549
3650 # Create gradle.properties file with proxy settings
3751 # Would prefer to use command line arguments, but they don't work.
3852 properties_filename = File . join ( temp_dir , build_file . directory , "gradle.properties" )
3953 write_properties_file ( properties_filename )
4054
41- command_parts = [
42- "gradle" ,
43- "dependencies" ,
44- "--no-daemon" ,
45- "--write-locks"
46- ]
55+ command_parts = %w( gradle --no-daemon --stacktrace ) + command_args
4756 command = Shellwords . join ( command_parts )
4857
4958 Dir . chdir ( cwd ) do
5059 SharedHelpers . run_shell_command ( command , cwd : cwd )
51- update_lockfiles_content ( temp_dir , local_lockfiles , updated_files )
60+ update_files_content ( temp_dir , local_files , updated_files )
5261 rescue SharedHelpers ::HelperSubprocessFailed => e
53- puts "Failed to update lockfiles : #{ e . message } "
62+ puts "Failed to update files : #{ e . message } "
5463 return updated_files
5564 end
5665 end
5766 updated_files
5867 end
5968
69+ private
70+
6071 sig do
6172 params (
6273 temp_dir : T . any ( Pathname , String ) ,
63- local_lockfiles : T ::Array [ Dependabot ::DependencyFile ] ,
64- updated_lockfiles : T ::Array [ Dependabot ::DependencyFile ]
74+ local_files : T ::Array [ Dependabot ::DependencyFile ] ,
75+ updated_files : T ::Array [ Dependabot ::DependencyFile ]
6576 ) . void
6677 end
67- def update_lockfiles_content ( temp_dir , local_lockfiles , updated_lockfiles )
68- local_lockfiles . each do |file |
78+ def update_files_content ( temp_dir , local_files , updated_files )
79+ local_files . each do |file |
6980 f_content = File . read ( File . join ( temp_dir , file . directory , file . name ) )
7081 tmp_file = file . dup
7182 tmp_file . content = f_content
72- updated_lockfiles [ T . must ( updated_lockfiles . index ( file ) ) ] = tmp_file
83+ updated_files [ T . must ( updated_files . index ( file ) ) ] = tmp_file
7384 end
7485 end
7586
87+ sig { returns ( T ::Array [ Dependabot ::DependencyFile ] ) }
88+ def files_to_populate
89+ @dependency_files
90+ end
91+
7692 sig { params ( temp_dir : T . any ( Pathname , String ) ) . void }
7793 def populate_temp_directory ( temp_dir )
78- @dependency_files . each do |file |
94+ files_to_populate . each do |file |
7995 in_path_name = File . join ( temp_dir , file . directory , file . name )
8096 FileUtils . mkdir_p ( File . dirname ( in_path_name ) )
8197 File . write ( in_path_name , file . content )
@@ -100,8 +116,6 @@ def write_properties_file(file_name) # rubocop:disable Metrics/PerceivedComplexi
100116 File . write ( file_name , properties_content )
101117 end
102118
103- private
104-
105119 sig { returns ( T ::Array [ Dependabot ::DependencyFile ] ) }
106120 attr_reader :dependency_files
107121 end
0 commit comments