Não pode escolher mais do que 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.

200 linhas
6.3 KiB

há 10 anos
há 10 anos
há 10 anos
há 10 anos
há 10 anos
há 10 anos
há 10 anos
há 10 anos
há 10 anos
há 10 anos
há 10 anos
  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. parser.add_argument(
  23. '-n', '--dryrun', action='store_true', default=False,
  24. help='simulate installation')
  25. parser.add_argument(
  26. '-u', '--userdata', action='store_true', default=False,
  27. help='delete user data')
  28. parser.add_argument(
  29. '-d', '--destdir', metavar='DIR',
  30. help='custom destdir')
  31. parser.add_argument(
  32. '-p', '--prefix', metavar='DIR', default='',
  33. help='custom prefix')
  34. parser.add_argument(
  35. '-z', '--zshshare', metavar='DIR', default='functions',
  36. help='custom zshshare')
  37. parser.add_argument(
  38. '-c', '--clinkdir', metavar='DIR', default=default_clink_dir)
  39. return parser.parse_args()
  40. def remove_custom_installation(args, dryrun=False):
  41. if not args.destdir:
  42. return
  43. bin_dir = os.path.join(args.destdir, args.prefix, 'bin')
  44. doc_dir = os.path.join(args.destdir, args.prefix, 'share', 'man', 'man1')
  45. etc_dir = os.path.join(args.destdir, 'etc', 'profile.d')
  46. share_dir = os.path.join(args.destdir, args.prefix, 'share', 'autojump')
  47. zshshare_dir = os.path.join(args.destdir, args.zshshare)
  48. if not os.path.exists(share_dir):
  49. return
  50. print('\nFound custom installation...')
  51. rm(os.path.join(bin_dir, 'autojump'), dryrun)
  52. rm(os.path.join(bin_dir, 'autojump_data.py'), dryrun)
  53. rm(os.path.join(bin_dir, 'autojump_utils.py'), dryrun)
  54. rm(os.path.join(bin_dir, 'autojump_argparse.py'), dryrun)
  55. if platform.system() == 'Windows':
  56. if os.path.exists(args.clinkdir):
  57. rm(os.path.join(args.clinkdir, 'autojump.lua'), dryrun)
  58. rm(os.path.join(bin_dir, 'autojump.bat'), dryrun)
  59. rm(os.path.join(bin_dir, 'j.bat'), dryrun)
  60. rm(os.path.join(bin_dir, 'jc.bat'), dryrun)
  61. rm(os.path.join(bin_dir, 'jco.bat'), dryrun)
  62. rm(os.path.join(bin_dir, 'jo.bat'), dryrun)
  63. else:
  64. rm(os.path.join(etc_dir, 'autojump.sh'), dryrun)
  65. rm(os.path.join(share_dir, 'autojump.bash'), dryrun)
  66. rm(os.path.join(share_dir, 'autojump.fish'), dryrun)
  67. rm(os.path.join(share_dir, 'autojump.tcsh'), dryrun)
  68. rm(os.path.join(share_dir, 'autojump.zsh'), dryrun)
  69. rm(os.path.join(zshshare_dir, '_j'), dryrun)
  70. rmdir(share_dir, dryrun)
  71. rm(os.path.join(doc_dir, 'autojump.1'), dryrun)
  72. if is_empty_dir(args.destdir):
  73. rmdir(args.destdir, dryrun)
  74. def remove_system_installation(dryrun=False):
  75. default_destdir = '/'
  76. default_prefix = '/usr/local'
  77. default_zshshare = '/usr/share/zsh/site-functions'
  78. bin_dir = os.path.join(default_destdir, default_prefix, 'bin')
  79. doc_dir = os.path.join(
  80. default_destdir,
  81. default_prefix,
  82. 'share',
  83. 'man',
  84. 'man1')
  85. etc_dir = os.path.join(default_destdir, 'etc', 'profile.d')
  86. share_dir = os.path.join(
  87. default_destdir,
  88. default_prefix,
  89. 'share',
  90. 'autojump')
  91. zshshare_dir = os.path.join(default_destdir, default_zshshare)
  92. if not os.path.exists(share_dir):
  93. return
  94. print('\nFound system installation...')
  95. if os.geteuid() != 0:
  96. print('Please rerun as root for system-wide uninstall, skipping...',
  97. file=sys.stderr)
  98. return
  99. rm(os.path.join(bin_dir, 'autojump'), dryrun)
  100. rm(os.path.join(bin_dir, 'autojump_data.py'), dryrun)
  101. rm(os.path.join(bin_dir, 'autojump_utils.py'), dryrun)
  102. rm(os.path.join(etc_dir, 'autojump.sh'), dryrun)
  103. rm(os.path.join(share_dir, 'autojump.bash'), dryrun)
  104. rm(os.path.join(share_dir, 'autojump.fish'), dryrun)
  105. rm(os.path.join(share_dir, 'autojump.tcsh'), dryrun)
  106. rm(os.path.join(share_dir, 'autojump.zsh'), dryrun)
  107. rm(os.path.join(zshshare_dir, '_j'), dryrun)
  108. rmdir(share_dir, dryrun)
  109. rm(os.path.join(doc_dir, 'autojump.1'), dryrun)
  110. def remove_user_data(dryrun=False):
  111. if platform.system() == 'Darwin':
  112. data_home = os.path.join(
  113. os.path.expanduser('~'),
  114. 'Library',
  115. 'autojump')
  116. elif platform.system() == 'Windows':
  117. data_home = os.path.join(
  118. os.getenv('APPDATA'),
  119. 'autojump')
  120. else:
  121. data_home = os.getenv(
  122. 'XDG_DATA_HOME',
  123. os.path.join(
  124. os.path.expanduser('~'),
  125. '.local',
  126. 'share',
  127. 'autojump'))
  128. if os.path.exists(data_home):
  129. print('\nFound user data...')
  130. rmdir(data_home, dryrun)
  131. def remove_user_installation(dryrun=False):
  132. if platform.system() == 'Windows':
  133. default_destdir = os.path.join(os.getenv('LOCALAPPDATA', ''),
  134. 'autojump')
  135. clink_dir = os.path.join(os.getenv('LOCALAPPDATA', ''), 'clink')
  136. else:
  137. default_destdir = os.path.join(os.path.expanduser('~'), '.autojump')
  138. if os.path.exists(default_destdir):
  139. print('\nFound user installation...')
  140. rmdir(default_destdir, dryrun)
  141. if platform.system() == 'Windows' and os.path.exists(clink_dir):
  142. rm(os.path.join(clink_dir, 'autojump.lua'), dryrun)
  143. def rm(path, dryrun):
  144. if os.path.exists(path):
  145. print('deleting file:', path)
  146. if not dryrun:
  147. os.remove(path)
  148. def rmdir(path, dryrun):
  149. if os.path.exists(path):
  150. print('deleting directory:', path)
  151. if not dryrun:
  152. shutil.rmtree(path)
  153. def main(args):
  154. if args.dryrun:
  155. print('Uninstalling autojump (DRYRUN)...')
  156. else:
  157. print('Uninstalling autojump...')
  158. remove_user_installation(args.dryrun)
  159. remove_system_installation(args.dryrun)
  160. remove_custom_installation(args, args.dryrun)
  161. if args.userdata:
  162. remove_user_data(args.dryrun)
  163. if __name__ == '__main__':
  164. sys.exit(main(parse_arguments()))