Module: Makit::NugetCache

Defined in:
lib/makit/nuget_cache.rb

Defined Under Namespace

Classes: Error

Class Method Summary collapse

Class Method Details

.purge(package_id:, version: nil, dotnet: "dotnet", dry_run: false) ⇒ Object

Purges a package (and optionally a version) from the NuGet global packages cache.

Examples:

Makit::NugetCache.purge(package_id: "Newtonsoft.Json")
Makit::NugetCache.purge(package_id: "Newtonsoft.Json", version: "13.0.3")

Returns a Hash with keys:

:global_packages_dir, :package_dir, :target_dir, :purged, :reason (if not purged)


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/makit/nuget_cache.rb', line 19

def self.purge(package_id:, version: nil, dotnet: "dotnet", dry_run: false)
  raise ArgumentError, "package_id is required" if package_id.to_s.strip.empty?

  global_dir = resolve_global_packages_dir(dotnet: dotnet)
  package_dir = File.join(global_dir, normalize_package_id(package_id))

  target_dir =
    if version && !version.to_s.strip.empty?
      File.join(package_dir, version.to_s.strip)
    else
      package_dir
    end

  result = {
    global_packages_dir: global_dir,
    package_dir: package_dir,
    target_dir: target_dir,
    purged: false
  }

  unless Dir.exist?(target_dir)
    result[:reason] = "Target directory does not exist"
    return result
  end

  if dry_run
    result[:reason] = "dry_run"
    return result
  end

  assert_within!(target_dir, global_dir)

  FileUtils.rm_rf(target_dir)
  result[:purged] = true
  result
rescue Error, ArgumentError => e
  result ||= {}
  result[:purged] = false
  result[:reason] = e.message
  result
end