foundix
deepin
2014-05-17 05:23 /usr/bin/add-apt-repositoryCopy the Code
- #! /usr/bin/python3
- from __future__ import print_function
- import io
- import os
- import sys
- import gettext
- import locale
- from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler
- from softwareproperties.shortcuts import ShortcutException
- from softwareproperties.ppa import DEFAULT_KEYSERVER
- import aptsources
- from aptsources.sourceslist import SourceEntry
- from optparse import OptionParser
- from gettext import gettext as _
- if __name__ == "__main__":
- # Force encoding to UTF-8 even in non-UTF-8 locales.
- sys.stdout = io.TextIOWrapper(
- sys.stdout.detach(), encoding="UTF-8", line_buffering=True)
- try:
- locale.setlocale(locale.LC_ALL, "")
- except:
- pass
- gettext.textdomain("software-properties")
- usage = """Usage: %prog
- %prog is a script for adding apt sources.list entries.
- It can be used to add any repository and also provides a shorthand
- syntax for adding a Launchpad PPA (Personal Package Archive)
- repository.
- - The apt repository source line to add. This is one of:
- a complete apt line in quotes,
- a repo url and areas in quotes (areas defaults to 'main')
- a PPA shortcut.
- a distro component
- Examples:
- apt-add-repository 'deb http://myserver/path/to/repo stable myrepo'
- apt-add-repository 'http://myserver/path/to/repo myrepo'
- apt-add-repository 'https://packages.medibuntu.org free non-free'
- apt-add-repository http://extras.ubuntu.com/ubuntu
- apt-add-repository ppa:user/repository
- apt-add-repository multiverse
- If --remove is given the tool will remove the given sourceline from your
- sources.list
- """
- parser = OptionParser(usage)
- # FIXME: provide a --sources-list-file= option that
- # puts the line into a specific file in sources.list.d
- parser.add_option ("-m", "--massive-debug", action="store_true",
- dest="massive_debug", default=False,
- help=_("Print a lot of debug information to the command line"))
- parser.add_option("-r", "--remove", action="store_true",
- dest="remove", default=False,
- help=_("remove repository from sources.list.d directory"))
- parser.add_option("-k", "--keyserver",
- dest="keyserver", default=DEFAULT_KEYSERVER,
- help=_("URL of keyserver. Default: %default"))
- parser.add_option("-s", "--enable-source", action="store_true",
- dest="enable_source", default=False,
- help=_("Allow downloading of the source packages from the repository"))
- parser.add_option("-y", "--yes", action="store_true",
- dest="assume_yes", default=False,
- help=_("Assume yes to all queries"))
- (options, args) = parser.parse_args()
- if os.geteuid() != 0:
- print(_("Error: must run as root"))
- sys.exit(1)
- if len(args) == 0:
- print(_("Error: need a repository as argument"))
- sys.exit(1)
- elif len(args) > 1:
- print(_("Error: need a single repository as argument"))
- sys.exit(1)
- # force new ppa file to be 644 (LP: #399709)
- os.umask(0o022)
- # get the line
- line = args[0]
- # add it
- sp = SoftwareProperties(options=options)
- distro = aptsources.distro.get_distro()
- distro.get_sources(sp.sourceslist)
- # check if its a component that should be added/removed
- components = [comp.name for comp in distro.source_template.components]
- if line in components:
- if options.remove:
- if line in distro.enabled_comps:
- distro.disable_component(line)
- print(_("'%s' distribution component disabled for all sources.") % line)
- else:
- print(_("'%s' distribution component is already disabled for all sources.") % line)
- sys.exit(0)
- else:
- if line not in distro.enabled_comps:
- distro.enable_component(line)
- print(_("'%s' distribution component enabled for all sources.") % line)
- else:
- print(_("'%s' distribution component is already enabled for all sources.") % line)
- sys.exit(0)
- sp.sourceslist.save()
- sys.exit(0)
- # this wasn't a component name ('multiverse', 'backports'), so its either
- # a actual line to be added or a shortcut.
- try:
- shortcut = shortcut_handler(line)
- except ShortcutException as e:
- print(e)
- sys.exit(1)
- # display more information about the shortcut / ppa info
- if not options.assume_yes and shortcut.should_confirm():
- try:
- info = shortcut.info()
- except ShortcutException as e:
- print(e)
- sys.exit(1)
- print(" %s" % (info["description"] or ""))
- print(_(" More info: %s") % str(info["web_link"]))
- if (sys.stdin.isatty() and
- not "FORCE_ADD_APT_REPOSITORY" in os.environ):
- if options.remove:
- print(_("Press [ENTER] to continue or ctrl-c to cancel removing it"))
- else:
- print(_("Press [ENTER] to continue or ctrl-c to cancel adding it"))
- sys.stdin.readline()
- if options.remove:
- try:
- (line, file) = shortcut.expand(sp.distro.codename)
- except ShortcutException as e:
- print(e)
- sys.exit(1)
- deb_line = sp.expand_http_line(line)
- debsrc_line = 'deb-src' + deb_line[3:]
- deb_entry = SourceEntry(deb_line, file)
- debsrc_entry = SourceEntry(debsrc_line, file)
- try:
- sp.remove_source(deb_entry)
- except ValueError:
- print(_("Error: '%s' doesn't exist in a sourcelist file") % deb_line)
- try:
- sp.remove_source(debsrc_entry)
- except ValueError:
- print(_("Error: '%s' doesn't exist in a sourcelist file") % debsrc_line)
- else:
- try:
- if not sp.add_source_from_shortcut(shortcut, options.enable_source):
- print(_("Error: '%s' invalid") % line)
- sys.exit(1)
- except ShortcutException as e:
- print(e)
- sys.exit(1)
- sp.sourceslist.save()
Reply Like 0 View the author
/usr/bin/add-apt-repository
/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py
/usr/lib/python3/dist-packages/aptsources/distro.py
这三个文件里的内容
直接复制粘贴回复就行了
万分感谢
可以直接用