Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

217 righe
6.4 KiB

10 anni fa
10 anni fa
10 anni fa
10 anni fa
10 anni fa
10 anni fa
  1. #!/usr/bin/env python3
  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()))