Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

217 linhas
6.4 KiB

10 anos atrás
10 anos atrás
10 anos atrás
10 anos atrás
10 anos atrás
10 anos atrás
10 anos atrás
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from __future__ import print_function
  4. import os
  5. import platform
  6. import shutil
  7. import sys
  8. sys.path.append('bin')
  9. from autojump_argparse import ArgumentParser # noqa
  10. def is_empty_dir(path):
  11. """
  12. Checks if any files are present within a directory and all sub-directories.
  13. """
  14. for _, _, files in os.walk(path):
  15. if files:
  16. return False
  17. return True
  18. def parse_arguments():
  19. default_clink_dir = os.path.join(os.getenv('LOCALAPPDATA', ''), 'clink')
  20. parser = ArgumentParser(
  21. description='Uninstalls autojump.',
  22. )
  23. parser.add_argument(
  24. '-n', '--dryrun', action='store_true', default=False,
  25. help='simulate installation',
  26. )
  27. parser.add_argument(
  28. '-u', '--userdata', action='store_true', default=False,
  29. help='delete user data',
  30. )
  31. parser.add_argument(
  32. '-d', '--destdir', metavar='DIR',
  33. help='custom destdir',
  34. )
  35. parser.add_argument(
  36. '-p', '--prefix', metavar='DIR', default='',
  37. help='custom prefix',
  38. )
  39. parser.add_argument(
  40. '-z', '--zshshare', metavar='DIR', default='functions',
  41. help='custom zshshare',
  42. )
  43. parser.add_argument(
  44. '-c', '--clinkdir', metavar='DIR', default=default_clink_dir,
  45. )
  46. return parser.parse_args()
  47. def remove_custom_installation(args, dryrun=False):
  48. if not args.destdir:
  49. return
  50. bin_dir = os.path.join(args.destdir, args.prefix, 'bin')
  51. doc_dir = os.path.join(args.destdir, args.prefix, 'share', 'man', 'man1')
  52. etc_dir = os.path.join(args.destdir, 'etc', 'profile.d')
  53. share_dir = os.path.join(args.destdir, args.prefix, 'share', 'autojump')
  54. zshshare_dir = os.path.join(args.destdir, args.zshshare)
  55. if not os.path.exists(share_dir):
  56. return
  57. print('\nFound custom installation...')
  58. rm(os.path.join(bin_dir, 'autojump'), dryrun)
  59. rm(os.path.join(bin_dir, 'autojump_data.py'), dryrun)
  60. rm(os.path.join(bin_dir, 'autojump_utils.py'), dryrun)
  61. rm(os.path.join(bin_dir, 'autojump_argparse.py'), dryrun)
  62. if platform.system() == 'Windows':
  63. if os.path.exists(args.clinkdir):
  64. rm(os.path.join(args.clinkdir, 'autojump.lua'), dryrun)
  65. rm(os.path.join(bin_dir, 'autojump.bat'), dryrun)
  66. rm(os.path.join(bin_dir, 'j.bat'), dryrun)
  67. rm(os.path.join(bin_dir, 'jc.bat'), dryrun)
  68. rm(os.path.join(bin_dir, 'jco.bat'), dryrun)
  69. rm(os.path.join(bin_dir, 'jo.bat'), dryrun)
  70. else:
  71. rm(os.path.join(etc_dir, 'autojump.sh'), dryrun)
  72. rm(os.path.join(share_dir, 'autojump.bash'), dryrun)
  73. rm(os.path.join(share_dir, 'autojump.fish'), dryrun)
  74. rm(os.path.join(share_dir, 'autojump.tcsh'), dryrun)
  75. rm(os.path.join(share_dir, 'autojump.zsh'), dryrun)
  76. rm(os.path.join(zshshare_dir, '_j'), dryrun)
  77. rmdir(share_dir, dryrun)
  78. rm(os.path.join(doc_dir, 'autojump.1'), dryrun)
  79. if is_empty_dir(args.destdir):
  80. rmdir(args.destdir, dryrun)
  81. def remove_system_installation(dryrun=False):
  82. default_destdir = '/'
  83. default_prefix = '/usr/local'
  84. default_zshshare = '/usr/share/zsh/site-functions'
  85. bin_dir = os.path.join(default_destdir, default_prefix, 'bin')
  86. doc_dir = os.path.join(
  87. default_destdir,
  88. default_prefix,
  89. 'share',
  90. 'man',
  91. 'man1',
  92. )
  93. etc_dir = os.path.join(default_destdir, 'etc', 'profile.d')
  94. share_dir = os.path.join(
  95. default_destdir,
  96. default_prefix,
  97. 'share',
  98. 'autojump',
  99. )
  100. zshshare_dir = os.path.join(default_destdir, default_zshshare)
  101. if not os.path.exists(share_dir):
  102. return
  103. print('\nFound system installation...')
  104. if os.geteuid() != 0:
  105. print(
  106. 'Please rerun as root for system-wide uninstall, skipping...',
  107. file=sys.stderr,
  108. )
  109. return
  110. rm(os.path.join(bin_dir, 'autojump'), dryrun)
  111. rm(os.path.join(bin_dir, 'autojump_data.py'), dryrun)
  112. rm(os.path.join(bin_dir, 'autojump_utils.py'), dryrun)
  113. rm(os.path.join(etc_dir, 'autojump.sh'), dryrun)
  114. rm(os.path.join(share_dir, 'autojump.bash'), dryrun)
  115. rm(os.path.join(share_dir, 'autojump.fish'), dryrun)
  116. rm(os.path.join(share_dir, 'autojump.tcsh'), dryrun)
  117. rm(os.path.join(share_dir, 'autojump.zsh'), dryrun)
  118. rm(os.path.join(zshshare_dir, '_j'), dryrun)
  119. rmdir(share_dir, dryrun)
  120. rm(os.path.join(doc_dir, 'autojump.1'), dryrun)
  121. def remove_user_data(dryrun=False):
  122. if platform.system() == 'Darwin':
  123. data_home = os.path.join(
  124. os.path.expanduser('~'),
  125. 'Library',
  126. 'autojump',
  127. )
  128. elif platform.system() == 'Windows':
  129. data_home = os.path.join(
  130. os.getenv('APPDATA'),
  131. 'autojump',
  132. )
  133. else:
  134. data_home = os.getenv(
  135. 'XDG_DATA_HOME',
  136. os.path.join(
  137. os.path.expanduser('~'),
  138. '.local',
  139. 'share',
  140. 'autojump',
  141. ),
  142. )
  143. if os.path.exists(data_home):
  144. print('\nFound user data...')
  145. rmdir(data_home, dryrun)
  146. def remove_user_installation(dryrun=False):
  147. if platform.system() == 'Windows':
  148. default_destdir = os.path.join(
  149. os.getenv('LOCALAPPDATA', ''),
  150. 'autojump',
  151. )
  152. clink_dir = os.path.join(os.getenv('LOCALAPPDATA', ''), 'clink')
  153. else:
  154. default_destdir = os.path.join(os.path.expanduser('~'), '.autojump')
  155. if os.path.exists(default_destdir):
  156. print('\nFound user installation...')
  157. rmdir(default_destdir, dryrun)
  158. if platform.system() == 'Windows' and os.path.exists(clink_dir):
  159. rm(os.path.join(clink_dir, 'autojump.lua'), dryrun)
  160. def rm(path, dryrun):
  161. if os.path.exists(path):
  162. print('deleting file:', path)
  163. if not dryrun:
  164. os.remove(path)
  165. def rmdir(path, dryrun):
  166. if os.path.exists(path):
  167. print('deleting directory:', path)
  168. if not dryrun:
  169. shutil.rmtree(path)
  170. def main(args):
  171. if args.dryrun:
  172. print('Uninstalling autojump (DRYRUN)...')
  173. else:
  174. print('Uninstalling autojump...')
  175. remove_user_installation(args.dryrun)
  176. remove_system_installation(args.dryrun)
  177. remove_custom_installation(args, args.dryrun)
  178. if args.userdata:
  179. remove_user_data(args.dryrun)
  180. if __name__ == '__main__':
  181. sys.exit(main(parse_arguments()))