PageRenderTime 42ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/pacfoster/pacfoster.rb

https://bitbucket.org/kaendfinger/aur-mirror
Ruby | 88 lines | 76 code | 11 blank | 1 comment | 5 complexity | 55fbd689083fe2afcda4f103ab7f2a90 MD5 | raw file
Possible License(s): LGPL-2.0, Unlicense, AGPL-1.0, BitTorrent-1.0, EPL-1.0, GPL-3.0, BSD-3-Clause, GPL-2.0, MIT, CC-BY-SA-3.0, BSD-2-Clause, MPL-2.0, BSD-3-Clause-No-Nuclear-License-2014, JSON, AGPL-3.0, MPL-2.0-no-copyleft-exception, IPL-1.0, LGPL-2.1, ISC, CC-BY-3.0, WTFPL, 0BSD, CC0-1.0, LGPL-3.0, Cube, Apache-2.0
  1. #!/usr/bin/ruby
  2. file = File.expand_path("~/.pacsafe.conf")
  3. trap("INT") { exit }
  4. $stdout.sync = true #rsync "realtime" output
  5. if File.file? file
  6. filelist = File.new(file, "r").lines.collect {|line| line.strip}
  7. filelist.delete("")
  8. else
  9. filelist = Array.new
  10. end
  11. puts "building database...\n\n"
  12. installedlist = `pacman -Qt 2>/dev/null`.split("\n").collect {|item| item.split(" ")[0]} + `pacman -Qdt 2>/dev/null`.split("\n").collect {|item| item.split(" ")[0]}
  13. testlist = installedlist - filelist
  14. keeplist = Array.new
  15. prunelist = Array.new
  16. i=0
  17. while i < testlist.size
  18. item = testlist[i]
  19. system("yaourt -Qs \"^#{item.gsub("+", '\\\\\\\\\\\+')}$\" 2>/dev/null")
  20. print "(Yes/Prune/Skip/Info/Undo/eXit/Quit/Help) "
  21. begin
  22. system("stty raw echo")
  23. input = STDIN.getc.downcase
  24. ensure
  25. system("stty -raw echo")
  26. end
  27. case input
  28. when "y" then
  29. puts ": keeping #{item}"
  30. keeplist.push item
  31. when "p"
  32. puts ": deleting #{item}"
  33. prunelist.push item
  34. when "i"
  35. puts ": info"
  36. print `yaourt -Qi #{item}`
  37. i -= 1
  38. when "q", "\x03"
  39. puts ": quitting"
  40. exit
  41. when "x"
  42. puts ": exiting..."
  43. break
  44. when "u"
  45. puts ": undo"
  46. i -= 2
  47. keeplist.delete testlist[i+1]
  48. prunelist.delete testlist[i+1]
  49. when "s"
  50. puts ": skipping #{item}"
  51. when "h"
  52. puts ": help\n\nYes: Keep package and write it to pacsave.conf
  53. Prune: Remove package with -Rsc (with dependencies)
  54. Skip: Skip package for now, decide later
  55. Info: Show more informations of the package
  56. Undo: Undo the last choice, and ask again
  57. eXit: Exit, remove marked packages and write pacsave.conf
  58. Quit: Quit without writing pacsave.conf and removing packages
  59. Help: Show this help"
  60. i -= 1
  61. else
  62. puts ": unknown command '#{input.chr}'"
  63. i -= 1
  64. end
  65. i += 1
  66. puts
  67. end
  68. if keeplist.size > 0 then
  69. puts "writing new keepers to #{file}..."
  70. File.open(file, "w") do |file|
  71. file.puts (filelist + keeplist).sort.join("\n")
  72. end
  73. end
  74. if prunelist.size > 0 then
  75. puts "removing package(s) #{prunelist.join(" ")}"
  76. system "yaourt -Rsc #{prunelist.join(" ")}"
  77. end