Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(212)

Side by Side Diff: pym/portage/dbapi/bintree.py

Issue 6458015: Add support for grabbing Packages files using external programs. (Closed) Base URL: http://git.chromium.org/git/portage_tool.git@cros-2.1.9
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | pym/portage/getbinpkg.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 1998-2010 Gentoo Foundation 1 # Copyright 1998-2010 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2 2 # Distributed under the terms of the GNU General Public License v2
3 3
4 __all__ = ["bindbapi", "binarytree"] 4 __all__ = ["bindbapi", "binarytree"]
5 5
6 import portage 6 import portage
7 portage.proxy.lazyimport.lazyimport(globals(), 7 portage.proxy.lazyimport.lazyimport(globals(),
8 'portage.checksum:hashfunc_map,perform_multiple_checksums,verify_all', 8 'portage.checksum:hashfunc_map,perform_multiple_checksums,verify_all',
9 'portage.dbapi.dep_expand:dep_expand', 9 'portage.dbapi.dep_expand:dep_expand',
10 'portage.dep:dep_getkey,isjustname,match_from_list', 10 'portage.dep:dep_getkey,isjustname,match_from_list',
(...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 if e.errno != errno.ENOENT: 765 if e.errno != errno.ENOENT:
766 raise 766 raise
767 local_timestamp = pkgindex.header.get("TIMESTAMP", None) 767 local_timestamp = pkgindex.header.get("TIMESTAMP", None)
768 rmt_idx = self._new_pkgindex() 768 rmt_idx = self._new_pkgindex()
769 proc = None 769 proc = None
770 tmp_filename = None 770 tmp_filename = None
771 try: 771 try:
772 # urlparse.urljoin() only works correctly with r ecognized 772 # urlparse.urljoin() only works correctly with r ecognized
773 # protocols and requires the base url to have a trailing 773 # protocols and requires the base url to have a trailing
774 # slash, so join manually... 774 # slash, so join manually...
775 url = base_url.rstrip("/") + "/Packages"
775 try: 776 try:
776 » » » » » f = urllib_request_urlopen(base_url.rstr ip("/") + "/Packages") 777 » » » » » f = urllib_request_urlopen(url)
777 except IOError: 778 except IOError:
778 path = parsed_url.path.rstrip("/") + "/P ackages" 779 path = parsed_url.path.rstrip("/") + "/P ackages"
779 780
780 if parsed_url.scheme == 'sftp': 781 if parsed_url.scheme == 'sftp':
781 # The sftp command complains abo ut 'Illegal seek' if 782 # The sftp command complains abo ut 'Illegal seek' if
782 # we try to make it write to /de v/stdout, so use a 783 # we try to make it write to /de v/stdout, so use a
783 # temp file instead. 784 # temp file instead.
784 fd, tmp_filename = tempfile.mkst emp() 785 fd, tmp_filename = tempfile.mkst emp()
785 os.close(fd) 786 os.close(fd)
786 if port is not None: 787 if port is not None:
787 port_args = ['-P', "%s" % (port,)] 788 port_args = ['-P', "%s" % (port,)]
788 proc = subprocess.Popen(['sftp'] + port_args + \ 789 proc = subprocess.Popen(['sftp'] + port_args + \
789 [user_passwd + host + ": " + path, tmp_filename]) 790 [user_passwd + host + ": " + path, tmp_filename])
790 if proc.wait() != os.EX_OK: 791 if proc.wait() != os.EX_OK:
791 raise 792 raise
792 f = open(tmp_filename, 'rb') 793 f = open(tmp_filename, 'rb')
793 elif parsed_url.scheme == 'ssh': 794 elif parsed_url.scheme == 'ssh':
794 if port is not None: 795 if port is not None:
795 port_args = ['-p', "%s" % (port,)] 796 port_args = ['-p', "%s" % (port,)]
796 proc = subprocess.Popen(['ssh'] + port_args + \ 797 proc = subprocess.Popen(['ssh'] + port_args + \
797 [user_passwd + host, '-- ', 'cat', path], 798 [user_passwd + host, '-- ', 'cat', path],
798 stdout=subprocess.PIPE) 799 stdout=subprocess.PIPE)
799 f = proc.stdout 800 f = proc.stdout
800 else: 801 else:
801 » » » » » » raise 802 » » » » » » setting = 'FETCHCOMMAND_' + pars ed_url.scheme.upper()
803 » » » » » » fcmd = self.settings.get(setting )
804 » » » » » » if not fcmd:
805 » » » » » » » raise
806 » » » » » » fd, tmp_filename = tempfile.mkst emp()
807 » » » » » » tmp_dirname, tmp_basename = os.p ath.split(tmp_filename)
808 » » » » » » os.close(fd)
809 » » » » » » success = portage.getbinpkg.file _get(url,
810 » » » » » » tmp_dirname, fcmd=fcmd, fil ename=tmp_basename)
811 » » » » » » if not success:
812 » » » » » » » raise portage.exception. FileNotFound(url)
813 » » » » » » f = open(tmp_filename, 'rb')
802 814
803 f_dec = codecs.iterdecode(f, 815 f_dec = codecs.iterdecode(f,
804 _encodings['repo.content'], errors='repl ace') 816 _encodings['repo.content'], errors='repl ace')
805 try: 817 try:
806 rmt_idx.readHeader(f_dec) 818 rmt_idx.readHeader(f_dec)
807 remote_timestamp = rmt_idx.header.get("T IMESTAMP", None) 819 remote_timestamp = rmt_idx.header.get("T IMESTAMP", None)
808 if not remote_timestamp: 820 if not remote_timestamp:
809 # no timestamp in the header, so mething's wrong 821 # no timestamp in the header, so mething's wrong
810 pkgindex = None 822 pkgindex = None
811 else: 823 else:
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 def getslot(self, mycatpkg): 1341 def getslot(self, mycatpkg):
1330 "Get a slot for a catpkg; assume it exists." 1342 "Get a slot for a catpkg; assume it exists."
1331 myslot = "" 1343 myslot = ""
1332 try: 1344 try:
1333 myslot = self.dbapi.aux_get(mycatpkg,["SLOT"])[0] 1345 myslot = self.dbapi.aux_get(mycatpkg,["SLOT"])[0]
1334 except SystemExit as e: 1346 except SystemExit as e:
1335 raise 1347 raise
1336 except Exception as e: 1348 except Exception as e:
1337 pass 1349 pass
1338 return myslot 1350 return myslot
OLDNEW
« no previous file with comments | « no previous file | pym/portage/getbinpkg.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698