--- GLIUtility.orig.py 2006-02-14 11:40:30.000000000 -0500 +++ GLIUtility.py 2006-02-23 01:24:07.000000000 -0500 @@ -726,41 +726,38 @@ def get_global_use_flags(): use_desc = {} - f = open("/usr/portage/profiles/use.desc", "r") - for line in f: + for line in open("/usr/portage/profiles/use.desc", "r"): line = line.strip() if line == "# The following flags are NOT to be set or unset by users": break if not line or line.startswith("#"): continue - dash_pos = line.find(" - ") - if dash_pos == -1: continue - flagname = line[:dash_pos] or line[dash_pos-1] - desc = line[dash_pos+3:] - use_desc[flagname] = desc - f.close() + try: + flagname, desc = line.split(" - ", 1) + use_desc[flagname] = desc + except ValueError: # split string not found + continue return use_desc def get_local_use_flags(): use_local_desc = {} - f = open("/usr/portage/profiles/use.local.desc", "r") - for line in f: + for line in open("/usr/portage/profiles/use.local.desc", "r"): line = line.strip() if not line or line.startswith("#"): continue - dash_pos = line.find(" - ") - if dash_pos == -1: continue - colon_pos = line.find(":", 0, dash_pos) - pkg = line[:colon_pos] - flagname = line[colon_pos+1:dash_pos] or line[colon_pos+1] - desc = "(" + pkg + ") " + line[dash_pos+3:] - use_local_desc[flagname] = desc - f.close() + try: + line, desc = line.split(" - ", 1) + pkg, flagname = line.split(":", 1) + use_local_desc[flagname] = "(" + pkg + ")" + desc + except ValueError: # split string not found + continue return use_local_desc def get_cd_snapshot_uri(): - snapshot_loc = spawn("ls /mnt/{cdrom,livecd}/snapshots/portage-* 2>/dev/null | head -n 1", return_output=True)[1].strip() - if snapshot_loc: - snapshot_loc = "file://" + snapshot_loc - return snapshot_loc + import glob + snapshot_loc = glob.glob("/mnt/{cdrom,livecd}/snapshots/portage-*") + try: + return "file://" + snapshot_loc[0] + except IndexError: + return "" def validate_uri(uri): # Get tuple of matches @@ -800,11 +797,17 @@ dirlist = [] dirlist += dirs + files elif uriparts[0] == "http": - dirlist = spawn("wget -O - http://" + uriparts[3] + uriparts[5] + r" 2> /dev/null | grep -i href | grep -v 'http://' | grep -v 'ftp://' | sed -e 's:^.\+href=\"\(.\+\)\".\+$:\1:i'", return_output=True)[1].strip().split("\n") + command = \ + "wget -O - " + uriparts[0] + "://" + uriparts[3] + uriparts[5] + " 2> /dev/null" + \ + " | grep -i href" + \ + " | grep -v 'http://'" + \ + " | grep -v 'ftp://'" + \ + r" | sed -e 's:^.\+href=\"\(.\+\)\".\+$:\1:i'" + dirlist = spawn(command, return_output=True)[1].strip().split("\n") dirs = [] files = [] for entry in dirlist: - if not entry.startswith("/") and entry.find("?") == -1: + if not entry.startswith("/") and ("?" in entry): if entry.endswith("/"): dirs.append(entry) else: @@ -817,26 +820,28 @@ dirlist = [] dirlist += dirs + files elif uriparts[0] == "ftp": - dirlist = spawn("wget -O - ftp://" + uriparts[3] + uriparts[5] + r" 2> /dev/null | grep -i href | sed -e 's:^.\+href=\"\(.\+\)\".\+$:\1:i' -e 's|^ftp://[^/]\+/|/|'", return_output=True)[1].strip().split("\n") + command = "wget -O - " + uriparts[0] + "://" + uriparts[3] + uriparts[5] + " 2> /dev/null" + \ + " | grep -i href" + \ + r" | sed -e 's:^.\+href=\"\(.\+\)\".\+$:\1:i' -e 's|^ftp://[^/]\+/|/|'" + dirlist = spawn(command, return_output=True)[1].strip().split("\n") dirs = [] files = [] for entry in dirlist: if entry.startswith(uriparts[5]): - entry = entry[len(uriparts[5]):] + entry = remove_prefix(entry, uriparts[5]) if entry.endswith("/"): dirs.append(entry) else: files.append(entry) dirs.sort() files.sort() - if not uriparts[5] == "/": + if uriparts[5] != "/": dirlist = ["../"] else: dirlist = [] dirlist += dirs + files elif uriparts[0] == "scp": - tmpdirlist = "" - dirlist = [] + dirlist = "" sshcmd = ["ssh"] if uriparts[4]: sshcmd.append("-p") @@ -845,7 +850,10 @@ sshcmd.append(uriparts[1] + "@" + uriparts[3]) else: sshcmd.append(uriparts[3]) - sshcmd.append("ls --color=no -1F " + uriparts[5] + r" 2>/dev/null | sed -e 's:\*$::'") + sshcmd.append( + "ls --color=no -1F " + uriparts[5] + " 2>/dev/null" + + r" | sed -e 's:\*$::'" + ) # print str(sshcmd) pid, child_fd = pty.fork() if not pid: @@ -870,15 +878,15 @@ os.write(child_fd, "yes\n") else: if got_password_prompt: - if not tmpdirlist and data.endswith("assword: "): + if dirlist or not data.endswith("assword: "): + dirlist += data + else: raise GLIException("IncorrectPassword", "notice", "get_directory_listing_from_uri", "Your SSH password was incorrect") - tmpdirlist += data else: pid2, status = os.waitpid(pid, os.WNOHANG) if pid2: break - for tmpentry in tmpdirlist.strip().split("\n"): - dirlist.append(tmpentry.strip()) + dirlist = [entry.strip() for entry in dirlist.strip().split("\n")] dirs = [] files = [] for entry in dirlist: @@ -888,12 +896,13 @@ files.append(entry) dirs.sort() files.sort() - if not uriparts[5] == "/": + if uriparts[5] != "/": dirlist = ["../"] else: dirlist = [] dirlist += dirs + files else: + #raise NotImplementedError, uriparts[0] dirlist = ["this/", "type/", "isn't/", "supported", "yet"] return dirlist @@ -905,41 +914,43 @@ def uncdata(text): if text.startswith("") else: return text def get_grp_pkgs_from_cd(): - if not is_file("/usr/livecd/grppkgs.txt"): + try: + grp_pkgs = open('/usr/livecd/grppkgs.txt', 'r').read().split() + except IOError: #file not found or not readable return "" #raise GLIException("GLIUtilityError", "fatal", "get_grp_pkgs_from_cd", "Required file /usr/livecd/grppkgs.txt does not exist") - status,output = spawn('cat /usr/livecd/grppkgs.txt',return_output=True) - output = output.split() - #remove the first part before a / for comparision - results = [] - for pkg in output: - results.append(pkg[(pkg.find('/')+1):]) - return results + else: + #remove the first part before a / for comparision + return [remove_prefix(pkg, '/') for pkg in grp_pkgs] def get_keymaps(self): - return GLIUtility.spawn(r"find /usr/share/keymaps -iname *.map.gz | sed -e 's:^.\+/::' -e 's:\..\+$::' | sort", return_output=True)[1].strip().split("\n") + result = GLIUtility.spawn("find /usr/share/keymaps -name *.map.gz", return_output=True)[1].strip().split("\n") + result = [remove_suffix(os.path.basename(keymap), ".map.gz") for keymap in result] + result.sort() + return result + +_chosts = { + "x86": ("i386-pc-linux-gnu", "i486-pc-linux-gnu", "i586-pc-linux-gnu", "i686-pc-linux-gnu", ), + "amd64": ("x86_64-pc-linux-gnu", ), + "alpha": ("alpha-unknown-linux-gnu", ), + "ppc": ("powerpc-unknown-linux-gnu", ), + "ppc64": ("powerpc64-unknown-linux-gnu", ), + "sparc": ("sparc-unknown-linux-gnu", ), + "sparc64": ("sparc-unknown-linux-gnu", ), + "hppa": ("hppa-unknown-linux-gnu", "hppa1.1-unknown-linux-gnu", "hppa2.0-unknown-linux-gnu", ), + "mips": ("mips-unknown-linux-gnu", ), +} def get_chosts(arch): - chosts = [] - if arch == "x86": - chosts = ["i386-pc-linux-gnu", "i486-pc-linux-gnu", "i586-pc-linux-gnu", "i686-pc-linux-gnu"] - if arch == "amd64": - chosts = ["x86_64-pc-linux-gnu"] - if arch == "alpha": - chosts = ["alpha-unknown-linux-gnu"] - if arch == "ppc": - chosts = ["powerpc-unknown-linux-gnu"] - if arch == "ppc64": - chosts = ["powerpc64-unknown-linux-gnu"] - if arch in ["sparc", "sparc64"]: - chosts = ["sparc-unknown-linux-gnu"] - if arch == "hppa": - chosts = ["hppa-unknown-linux-gnu", "hppa1.1-unknown-linux-gnu", "hppa2.0-unknown-linux-gnu"] - if arch == "mips": - chosts = ["mips-unknown-linux-gnu"] - return chosts + return _chosts.get(arch, ()) + +def remove_prefix(s, prefix): + return s.split(prefix, 1)[1] + +def remove_suffix(s, suffix): + return s.rsplit(suffix, 1)[0]