Class: Dependabot::DependencyFile

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/dependency_file.rb

Defined Under Namespace

Classes: ContentEncoding, Mode, Operation

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, content:, directory: "/", type: "file", support_file: false, vendored_file: false, symlink_target: nil, content_encoding: ContentEncoding::UTF_8, deleted: false, operation: Operation::UPDATE, mode: nil) ⇒ DependencyFile

Returns a new instance of DependencyFile.



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/dependabot/dependency_file.rb', line 75

def initialize(name:, content:, directory: "/", type: "file",
               support_file: false, vendored_file: false, symlink_target: nil,
               content_encoding: ContentEncoding::UTF_8, deleted: false,
               operation: Operation::UPDATE, mode: nil)
  @name = name
  @content = content
  @directory = T.let(clean_directory(directory), String)
  @symlink_target = symlink_target
  @support_file = support_file
  @vendored_file = vendored_file
  @content_encoding = content_encoding
  @operation = operation

  # Make deleted override the operation. Deleted is kept when operation
  # was introduced to keep compatibility with downstream dependants.
  @operation = Operation::DELETE if deleted

  # Type is used *very* sparingly. It lets the git_modules updater know that
  # a "file" is actually a submodule, and lets our Go updaters know which
  # file represents the main.go.
  # New use cases should be avoided if at all possible (and use the
  # support_file flag instead)
  @type = type

  begin
    @mode = T.let(File.stat(realpath).mode.to_s(8), T.nilable(String))
  rescue StandardError
    @mode = mode
  end

  return unless (type == "symlink") ^ symlink_target

  raise "Symlinks must specify a target!" unless symlink_target
  raise "Only symlinked files must specify a target!" if symlink_target
end

Instance Attribute Details

#contentObject

Returns the value of attribute content.



15
16
17
# File 'lib/dependabot/dependency_file.rb', line 15

def content
  @content
end

#content_encodingObject

Returns the value of attribute content_encoding.



35
36
37
# File 'lib/dependabot/dependency_file.rb', line 35

def content_encoding
  @content_encoding
end

#directoryObject

Returns the value of attribute directory.



20
21
22
# File 'lib/dependabot/dependency_file.rb', line 20

def directory
  @directory
end

#modeObject

Returns the value of attribute mode.



41
42
43
# File 'lib/dependabot/dependency_file.rb', line 41

def mode
  @mode
end

#nameObject

Returns the value of attribute name.



12
13
14
# File 'lib/dependabot/dependency_file.rb', line 12

def name
  @name
end

#operationObject

Returns the value of attribute operation.



38
39
40
# File 'lib/dependabot/dependency_file.rb', line 38

def operation
  @operation
end

#support_fileObject

Returns the value of attribute support_file.



26
27
28
# File 'lib/dependabot/dependency_file.rb', line 26

def support_file
  @support_file
end

Returns the value of attribute symlink_target.



32
33
34
# File 'lib/dependabot/dependency_file.rb', line 32

def symlink_target
  @symlink_target
end

#typeObject

Returns the value of attribute type.



23
24
25
# File 'lib/dependabot/dependency_file.rb', line 23

def type
  @type
end

#vendored_fileObject

Returns the value of attribute vendored_file.



29
30
31
# File 'lib/dependabot/dependency_file.rb', line 29

def vendored_file
  @vendored_file
end

Instance Method Details

#==(other) ⇒ Object



140
141
142
143
144
145
146
147
148
149
# File 'lib/dependabot/dependency_file.rb', line 140

def ==(other)
  case other
  when DependencyFile
    my_hash = to_h.reject { |k| k == "support_file" }
    their_hash = other.to_h.reject { |k| k == "support_file" }
    my_hash == their_hash
  else
    false
  end
end

#binary?Boolean

Returns:

  • (Boolean)


187
188
189
# File 'lib/dependabot/dependency_file.rb', line 187

def binary?
  content_encoding == ContentEncoding::BASE64
end

#decoded_contentObject



192
193
194
195
196
# File 'lib/dependabot/dependency_file.rb', line 192

def decoded_content
  return Base64.decode64(T.must(content)) if binary?

  T.must(content)
end

#deletedObject



172
173
174
# File 'lib/dependabot/dependency_file.rb', line 172

def deleted
  @operation == Operation::DELETE
end

#deleted=(deleted) ⇒ Object



177
178
179
# File 'lib/dependabot/dependency_file.rb', line 177

def deleted=(deleted)
  @operation = deleted ? Operation::DELETE : Operation::UPDATE
end

#deleted?Boolean

Returns:

  • (Boolean)


182
183
184
# File 'lib/dependabot/dependency_file.rb', line 182

def deleted?
  deleted
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


157
158
159
# File 'lib/dependabot/dependency_file.rb', line 157

def eql?(other)
  self == other
end

#hashObject



152
153
154
# File 'lib/dependabot/dependency_file.rb', line 152

def hash
  to_h.hash
end

#pathObject



130
131
132
# File 'lib/dependabot/dependency_file.rb', line 130

def path
  Pathname.new(File.join(directory, name)).cleanpath.to_path
end

#realpathObject



135
136
137
# File 'lib/dependabot/dependency_file.rb', line 135

def realpath
  (symlink_target || path).sub(%r{^/}, "")
end

#support_file?Boolean

Returns:

  • (Boolean)


162
163
164
# File 'lib/dependabot/dependency_file.rb', line 162

def support_file?
  @support_file
end

#to_hObject



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/dependabot/dependency_file.rb', line 112

def to_h
  details = {
    "name" => name,
    "content" => content,
    "directory" => directory,
    "type" => type,
    "support_file" => support_file,
    "content_encoding" => content_encoding,
    "deleted" => deleted,
    "operation" => operation,
    "mode" => mode
  }

  details["symlink_target"] = symlink_target if symlink_target
  details
end

#vendored_file?Boolean

Returns:

  • (Boolean)


167
168
169
# File 'lib/dependabot/dependency_file.rb', line 167

def vendored_file?
  @vendored_file
end