|
|
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- from __future__ import print_function
-
- import os
- import platform
- import shutil
- import sys
-
- sys.path.append('bin')
- from autojump_argparse import ArgumentParser # noqa
-
-
- def is_empty_dir(path):
- """
- Checks if any files are present within a directory and all sub-directories.
- """
- for _, _, files in os.walk(path):
- if files:
- return False
- return True
-
-
- def parse_arguments():
- default_clink_dir = os.path.join(os.getenv('LOCALAPPDATA', ''), 'clink')
-
- parser = ArgumentParser(
- description='Uninstalls autojump.')
- parser.add_argument(
- '-n', '--dryrun', action='store_true', default=False,
- help='simulate installation')
- parser.add_argument(
- '-u', '--userdata', action='store_true', default=False,
- help='delete user data')
- parser.add_argument(
- '-d', '--destdir', metavar='DIR',
- help='custom destdir')
- parser.add_argument(
- '-p', '--prefix', metavar='DIR', default='',
- help='custom prefix')
- parser.add_argument(
- '-z', '--zshshare', metavar='DIR', default='functions',
- help='custom zshshare')
- parser.add_argument(
- '-c', '--clinkdir', metavar='DIR', default=default_clink_dir)
-
- return parser.parse_args()
-
-
- def remove_custom_installation(args, dryrun=False):
- if not args.destdir:
- return
-
- bin_dir = os.path.join(args.destdir, args.prefix, 'bin')
- doc_dir = os.path.join(args.destdir, args.prefix, 'share', 'man', 'man1')
- etc_dir = os.path.join(args.destdir, 'etc', 'profile.d')
- share_dir = os.path.join(args.destdir, args.prefix, 'share', 'autojump')
- zshshare_dir = os.path.join(args.destdir, args.zshshare)
-
- if not os.path.exists(share_dir):
- return
-
- print('\nFound custom installation...')
- rm(os.path.join(bin_dir, 'autojump'), dryrun)
- rm(os.path.join(bin_dir, 'autojump_data.py'), dryrun)
- rm(os.path.join(bin_dir, 'autojump_utils.py'), dryrun)
- rm(os.path.join(bin_dir, 'autojump_argparse.py'), dryrun)
- if platform.system() == 'Windows':
- if os.path.exists(args.clinkdir):
- rm(os.path.join(args.clinkdir, 'autojump.lua'), dryrun)
- rm(os.path.join(bin_dir, 'autojump.bat'), dryrun)
- rm(os.path.join(bin_dir, 'j.bat'), dryrun)
- rm(os.path.join(bin_dir, 'jc.bat'), dryrun)
- rm(os.path.join(bin_dir, 'jco.bat'), dryrun)
- rm(os.path.join(bin_dir, 'jo.bat'), dryrun)
- else:
- rm(os.path.join(etc_dir, 'autojump.sh'), dryrun)
- rm(os.path.join(share_dir, 'autojump.bash'), dryrun)
- rm(os.path.join(share_dir, 'autojump.fish'), dryrun)
- rm(os.path.join(share_dir, 'autojump.tcsh'), dryrun)
- rm(os.path.join(share_dir, 'autojump.zsh'), dryrun)
- rm(os.path.join(zshshare_dir, '_j'), dryrun)
- rmdir(share_dir, dryrun)
- rm(os.path.join(doc_dir, 'autojump.1'), dryrun)
-
- if is_empty_dir(args.destdir):
- rmdir(args.destdir, dryrun)
-
-
- def remove_system_installation(dryrun=False):
- default_destdir = '/'
- default_prefix = '/usr/local'
- default_zshshare = '/usr/share/zsh/site-functions'
-
- bin_dir = os.path.join(default_destdir, default_prefix, 'bin')
- doc_dir = os.path.join(
- default_destdir,
- default_prefix,
- 'share',
- 'man',
- 'man1')
- etc_dir = os.path.join(default_destdir, 'etc', 'profile.d')
- share_dir = os.path.join(
- default_destdir,
- default_prefix,
- 'share',
- 'autojump')
- zshshare_dir = os.path.join(default_destdir, default_zshshare)
-
- if not os.path.exists(share_dir):
- return
-
- print('\nFound system installation...')
-
- if os.geteuid() != 0:
- print('Please rerun as root for system-wide uninstall, skipping...',
- file=sys.stderr)
- return
-
- rm(os.path.join(bin_dir, 'autojump'), dryrun)
- rm(os.path.join(bin_dir, 'autojump_data.py'), dryrun)
- rm(os.path.join(bin_dir, 'autojump_utils.py'), dryrun)
- rm(os.path.join(etc_dir, 'autojump.sh'), dryrun)
- rm(os.path.join(share_dir, 'autojump.bash'), dryrun)
- rm(os.path.join(share_dir, 'autojump.fish'), dryrun)
- rm(os.path.join(share_dir, 'autojump.tcsh'), dryrun)
- rm(os.path.join(share_dir, 'autojump.zsh'), dryrun)
- rm(os.path.join(zshshare_dir, '_j'), dryrun)
- rmdir(share_dir, dryrun)
- rm(os.path.join(doc_dir, 'autojump.1'), dryrun)
-
-
- def remove_user_data(dryrun=False):
- if platform.system() == 'Darwin':
- data_home = os.path.join(
- os.path.expanduser('~'),
- 'Library',
- 'autojump')
- elif platform.system() == 'Windows':
- data_home = os.path.join(
- os.getenv('APPDATA'),
- 'autojump')
- else:
- data_home = os.getenv(
- 'XDG_DATA_HOME',
- os.path.join(
- os.path.expanduser('~'),
- '.local',
- 'share',
- 'autojump'))
-
- if os.path.exists(data_home):
- print('\nFound user data...')
- rmdir(data_home, dryrun)
-
-
- def remove_user_installation(dryrun=False):
- if platform.system() == 'Windows':
- default_destdir = os.path.join(os.getenv('LOCALAPPDATA', ''),
- 'autojump')
- clink_dir = os.path.join(os.getenv('LOCALAPPDATA', ''), 'clink')
- else:
- default_destdir = os.path.join(os.path.expanduser('~'), '.autojump')
-
- if os.path.exists(default_destdir):
- print('\nFound user installation...')
- rmdir(default_destdir, dryrun)
- if platform.system() == 'Windows' and os.path.exists(clink_dir):
- rm(os.path.join(clink_dir, 'autojump.lua'), dryrun)
-
-
- def rm(path, dryrun):
- if os.path.exists(path):
- print('deleting file:', path)
- if not dryrun:
- os.remove(path)
-
-
- def rmdir(path, dryrun):
- if os.path.exists(path):
- print('deleting directory:', path)
- if not dryrun:
- shutil.rmtree(path)
-
-
- def main(args):
- if args.dryrun:
- print('Uninstalling autojump (DRYRUN)...')
- else:
- print('Uninstalling autojump...')
-
- remove_user_installation(args.dryrun)
- remove_system_installation(args.dryrun)
- remove_custom_installation(args, args.dryrun)
- if args.userdata:
- remove_user_data(args.dryrun)
-
-
- if __name__ == '__main__':
- sys.exit(main(parse_arguments()))
|