Mercurial > hg > config
comparison python/install_config.py @ 579:f894bd779943
STUB: python/install_config.py
| author | Jeff Hammel <k0scist@gmail.com> | 
|---|---|
| date | Mon, 20 Jan 2014 19:19:10 -0800 | 
| parents | c16238544fca | 
| children | b563a9c1f2b7 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 578:c16238544fca | 579:f894bd779943 | 
|---|---|
| 4 installs config to a user's home directory | 4 installs config to a user's home directory | 
| 5 this can be done with | 5 this can be done with | 
| 6 curl http://k0s.org/hg/config/raw-file/tip/python/install_config.py | python | 6 curl http://k0s.org/hg/config/raw-file/tip/python/install_config.py | python | 
| 7 """ | 7 """ | 
| 8 | 8 | 
| 9 # TODO: | |
| 10 # - dl and get ~/web/sync.ini : | |
| 11 # ln -s /home/jhammel/web/sync.ini /home/jhammel/.silvermirror | |
| 12 # - handle cases where config is autogenerated BUT you still want | |
| 13 # to have some base (e.g. .gkrellm2/user_config) | |
| 14 | |
| 15 # imports | |
| 9 import imp | 16 import imp | 
| 10 import optparse | 17 import optparse | 
| 11 import os | 18 import os | 
| 12 import subprocess | 19 import subprocess | 
| 13 import sys | 20 import sys | 
| 14 | 21 | 
| 15 # config repository | 22 # globals | 
| 16 SRC='http://k0s.org/hg/config' | 23 SRC='http://k0s.org/hg/config' # config repository | 
| 17 HOME=os.environ['HOME'] | 24 HOME=os.environ['HOME'] | 
| 18 | 25 | 
| 19 ### standalone functions | 26 ### standalone functions | 
| 20 | 27 | 
| 21 def execute(*commands): | 28 def execute(*commands): | 
| 68 f.write(hgrc) | 75 f.write(hgrc) | 
| 69 def __call__(self): | 76 def __call__(self): | 
| 70 Step.__call__(self) | 77 Step.__call__(self) | 
| 71 self.write_hgrc() | 78 self.write_hgrc() | 
| 72 | 79 | 
| 73 # | 80 | 
| 74 # | |
| 75 #@requires(Command('git')) | 81 #@requires(Command('git')) | 
| 76 #class GitInstall | 82 #class GitInstall | 
| 77 | |
| 78 ### legacy -v | |
| 79 | |
| 80 commands = [ | |
| 81 ['hg', 'init'], | |
| 82 ['hg', 'pull', SRC], | |
| 83 ['hg', 'update', '-C'], | |
| 84 ] | |
| 85 | |
| 86 os.chdir(HOME) # go home | |
| 87 | |
| 88 execute(*commands) | |
| 89 | |
| 90 # make a (correct) .hg/hgrc file for $HOME | |
| 91 hgrc = """[paths] | |
| 92 default = http://k0s.org/hg/config | |
| 93 default-push = ssh://k0s.org/hg/config | |
| 94 """ | |
| 95 with file(os.path.join(HOME, '.hg/hgrc', 'w')) as f: | |
| 96 f.write(hgrc) | |
| 97 | |
| 98 # get the which command | |
| 99 sys.path.append(os.path.join(HOME, 'python')) | |
| 100 from which import which | |
| 101 | |
| 102 | |
| 103 # do git stuff | |
| 104 git = which('git') | |
| 105 if git: | |
| 106 # get virtual env | |
| 107 virtualenv_commands = [['git', 'clone', 'https://github.com/pypa/virtualenv.git'], | |
| 108 ['ln', '-s', HOME + '/virtualenv/virtualenv.py', HOME + '/bin/']] | |
| 109 execute(*virtualenv_commands) | |
| 110 | |
| 111 # setup git's global ignore, since git is silly about this | |
| 112 # and doesn't look for the file in the right place | |
| 113 execute(['git', 'config', '--global', 'core.excludesfile', os.path.join(HOME, '.gitignore')]) | |
| 114 | |
| 115 # install some python | |
| 116 install_develop('smartopen') | |
| 117 install_develop('silvermirror') # XXX this won't actually work since python-dev isn't installed; install it first | |
| 118 | |
| 119 postinstall_commands = [ ['ln', '-s', os.path.join(HOME, 'smartopen', 'bin', 'smartopen'), os.path.join(HOME, 'bin', 'smartopen') ], | |
| 120 ['ln', '-s', os.path.join(HOME, 'silvermirror', 'bin', 'silvermirror'), os.path.join(HOME, 'bin', 'silvermirror') ], | |
| 121 ] | |
| 122 execute(*postinstall_commands) | |
| 123 else: | |
| 124 print "git not installed" | |
| 125 | 83 | 
| 126 class UbuntuPackages(Step): | 84 class UbuntuPackages(Step): | 
| 127 """ubuntu packages to install""" | 85 """ubuntu packages to install""" | 
| 128 | 86 | 
| 129 PACKAGES=["mercurial", "unison", "fluxbox", "antiword", "xclip", | 87 PACKAGES=["mercurial", | 
| 130 "graphviz", "python-dev", "python-lxml", "curl", "arandr", | 88 "unison", | 
| 131 "git", "emacs", "irssi"] | 89 "fluxbox", | 
| 132 print "Ensure the following packages are installed:" | 90 "antiword", | 
| 133 print "sudo apt-get install %s" % ' '.join(PACKAGES) | 91 "xclip", | 
| 92 "graphviz", | |
| 93 "python-dev", | |
| 94 "python-lxml", | |
| 95 "curl", | |
| 96 "arandr", | |
| 97 "git", | |
| 98 "emacs", | |
| 99 "irssi"] | |
| 100 def __call__(self): | |
| 101 print "Ensure the following packages are installed:" | |
| 102 print "sudo apt-get install %s" % ' '.join(PACKAGES) | |
| 134 | 103 | 
| 135 # TODO: | 104 | 
| 136 # - dl and get ~/web/sync.ini : | 105 ### legacy -v- | 
| 137 # ln -s /home/jhammel/web/sync.ini /home/jhammel/.silvermirror | 106 | 
| 138 # - handle cases where config is autogenerated BUT you still want | 107 def legacy(): | 
| 139 # to have some base (e.g. .gkrellm2/user_config) | 108 """legacy : TO DEPRECATE!""" | 
| 109 commands = [ | |
| 110 ['hg', 'init'], | |
| 111 ['hg', 'pull', SRC], | |
| 112 ['hg', 'update', '-C'], | |
| 113 ] | |
| 114 os.chdir(HOME) # go home | |
| 115 | |
| 116 execute(*commands) | |
| 117 | |
| 118 # make a (correct) .hg/hgrc file for $HOME | |
| 119 hgrc = """[paths] | |
| 120 default = http://k0s.org/hg/config | |
| 121 default-push = ssh://k0s.org/hg/config | |
| 122 """ | |
| 123 with file(os.path.join(HOME, '.hg/hgrc', 'w')) as f: | |
| 124 f.write(hgrc) | |
| 125 | |
| 126 # get the which command | |
| 127 sys.path.append(os.path.join(HOME, 'python')) | |
| 128 from which import which | |
| 129 | |
| 130 # do git stuff | |
| 131 git = which('git') | |
| 132 if git: | |
| 133 | |
| 134 # get virtual env | |
| 135 virtualenv_commands = [['git', 'clone', 'https://github.com/pypa/virtualenv.git'], | |
| 136 ['ln', '-s', HOME + '/virtualenv/virtualenv.py', HOME + '/bin/']] | |
| 137 execute(*virtualenv_commands) | |
| 138 | |
| 139 # setup git's global ignore, since git is silly about this | |
| 140 # and doesn't look for the file in the right place | |
| 141 execute(['git', 'config', '--global', 'core.excludesfile', os.path.join(HOME, '.gitignore')]) | |
| 142 | |
| 143 # install some python | |
| 144 install_develop('smartopen') | |
| 145 install_develop('silvermirror') # XXX this won't actually work since python-dev isn't installed; install it first | |
| 146 | |
| 147 postinstall_commands = [['ln', '-s', os.path.join(HOME, 'smartopen', 'bin', 'smartopen'), os.path.join(HOME, 'bin', 'smartopen') ], | |
| 148 ['ln', '-s', os.path.join(HOME, 'silvermirror', 'bin', 'silvermirror'), os.path.join(HOME, 'bin', 'silvermirror') ], | |
| 149 ] | |
| 150 execute(*postinstall_commands) | |
| 151 else: | |
| 152 print "git not installed" | |
| 153 | |
| 154 | |
| 140 | 155 | 
| 141 def main(args=sys.argv[1:]): | 156 def main(args=sys.argv[1:]): | 
| 142 | 157 | 
| 143 # go home | 158 # go home | 
| 144 os.chdir(HOME) | 159 os.chdir(HOME) | 
| 148 parser = optparse.OptionParser(usage=usage, description=__doc__) | 163 parser = optparse.OptionParser(usage=usage, description=__doc__) | 
| 149 parser.add_option('--deb', '--dpkg', '--debian-packages', | 164 parser.add_option('--deb', '--dpkg', '--debian-packages', | 
| 150 dest='debian_packages', | 165 dest='debian_packages', | 
| 151 action='store_true', default=False, | 166 action='store_true', default=False, | 
| 152 help="display debian packages to install") | 167 help="display debian packages to install") | 
| 168 parser.add_option('-l', '--list', '--list-steps', | |
| 169 dest='list_steps', | |
| 170 action='store_true', default=False, | |
| 171 help="list steps to be run") | |
| 153 options, args = parser.parse_args() | 172 options, args = parser.parse_args() | 
| 154 | 173 | 
| 155 # plan steps | 174 # plan steps | 
| 156 steps = [InitializeRepository] | 175 steps = [InitializeRepository, UbuntuPackages] | 
| 176 if options.debian_packages: | |
| 177 steps = [DebianPackages] | |
| 178 | |
| 179 if options.list_steps: | |
| 180 # list steps if specified | |
| 181 for step in steps: | |
| 182 print step | |
| 157 | 183 | 
| 158 # execute steps | 184 # execute steps | 
| 159 for step in steps: | 185 for step in steps: | 
| 160 pass # TODO | 186 instance = step() | 
| 187 instance() | |
| 161 | 188 | 
| 162 if __name__ == '__main__': | 189 if __name__ == '__main__': | 
| 163 main() | 190 main() | 
