diff options
author | 2017-07-26 05:09:14 +0300 | |
---|---|---|
committer | 2017-07-26 05:09:14 +0300 | |
commit | 8e9b7e59696a2facf7fb625bf0b8fc5c577929f1 (patch) | |
tree | 897e00b1adf8c140dce69de1afb0028079d2b368 | |
parent | Unsealed url and bugz package source modules (diff) | |
download | pomu-8e9b7e59696a2facf7fb625bf0b8fc5c577929f1.tar.gz pomu-8e9b7e59696a2facf7fb625bf0b8fc5c577929f1.tar.bz2 pomu-8e9b7e59696a2facf7fb625bf0b8fc5c577929f1.zip |
Paid off some technical debt
error fixes, syntax, logic
finally converted bugz to iquery
fixed extra imports in iquery
totally disabled writing in temp files in the url backend, fixed full
-rw-r--r-- | pomu/cli.py | 8 | ||||
-rw-r--r-- | pomu/patch/patch.py | 16 | ||||
-rw-r--r-- | pomu/repo/repo.py | 2 | ||||
-rw-r--r-- | pomu/source/bugz.py | 44 | ||||
-rw-r--r-- | pomu/source/url.py | 13 | ||||
-rw-r--r-- | pomu/util/iquery.py | 16 | ||||
-rw-r--r-- | pomu/util/misc.py | 2 |
7 files changed, 30 insertions, 71 deletions
diff --git a/pomu/cli.py b/pomu/cli.py index 14e0b95..bf163b9 100644 --- a/pomu/cli.py +++ b/pomu/cli.py @@ -3,6 +3,7 @@ import click from os import path +from pomu.patch.patch import process_changes from pomu.repo.init import init_plain_repo, init_portage_repo from pomu.repo.repo import portage_repo_path, portage_repos, pomu_active_repo from pomu.source import dispatcher @@ -70,12 +71,11 @@ def status(): else: print('pomu is initialized at', repo.root) -@main.command() +@main.command(name='import') @click.argument('package', required=True) -@click.option('--patch', nargs=-1) - #help='Patches for the package') +@click.option('--patch', nargs = -1) @needs_repo -def import(package, patch): +def list(package, patch): """Imports a package""" pkg = dispatcher.get_package(package).expect() pkg.patch(patch) diff --git a/pomu/patch/patch.py b/pomu/patch/patch.py index 4a8357c..7021d63 100644 --- a/pomu/patch/patch.py +++ b/pomu/patch/patch.py @@ -1,20 +1,12 @@ """ """ -from os import path, walk, makedirs, remove -from shutil import copy2 +from os import path from time import time -import subprocess - from git.repo import Repo -from patch import PatchSet -from pomu.repo.repo import Repository -from pomu.util.fs import strip_prefix -from pomu.util.misc import list_add from pomu.util.pkg import cpv_split -from pomu.util.result import Result def process_changes(_repo): # we only tackle repository changes so far @@ -32,7 +24,7 @@ def process_changes(_repo): for diff in chans: # changes in tracked files pkpref = path.dirname(diff.a_path).split('/')[0:1].join('/') if pkpref in res: - res[pkpref].append(header(diff.a_path, diff.b_path).join('\n') + + res[pkpref].append(diff_header(diff.a_path, diff.b_path).join('\n') + diff.diff.decode('utf-8')) res = {x: res[x] for x in res if res[x]} for _pkg, diffs in res.items(): # add each change as its own patch @@ -59,7 +51,6 @@ def process_changes(_repo): orig = repo.odb.stream(diff.a_blob.binsha).read().decode('utf-8') pkg = _repo.get_package(cat, name) orig_lines = [path.join(pkg.pkgdir, x.strip()) for x in orig.split('\n') if x.strip() != ''] - ps = PatchSet() pkg.patches = orig_lines pkg.apply_patches(revert=True) pkg = _repo.get_package(cat, name) @@ -92,7 +83,7 @@ def process_changes(_repo): def new_file_patch(repo, newf): with open(path.join(repo.root, newf), 'r') as f: lines = ['+' + x.strip('\n') for x in f.readlines()] - head = header('/dev/null', newf, len(lines)) + head = diff_header('/dev/null', newf, len(lines)) return (head + lines).join('\n') + '\n' def diff_header(a_path, b_path, lines=None): @@ -100,4 +91,3 @@ def diff_header(a_path, b_path, lines=None): if lines: header.append('@@ -0,0 +1,' + lines + ' @@') return header - filename = path.join(self.category, self.name, '{}-{}.format') diff --git a/pomu/repo/repo.py b/pomu/repo/repo.py index a60e5b2..4317e47 100644 --- a/pomu/repo/repo.py +++ b/pomu/repo/repo.py @@ -35,7 +35,7 @@ class Repository(): def merge(self, mergeable): """Merges a package or a patchset into the repository""" if isinstance(mergeable, Package): - return merge_pkg(mergeable) + return self.merge_pkg(mergeable) elif isinstance(mergeable, PatchList): pkg = self.get_package(mergeable.name, mergeable.category, mergeable.slot).unwrap() diff --git a/pomu/source/bugz.py b/pomu/source/bugz.py index 84adfd7..8dc92ac 100644 --- a/pomu/source/bugz.py +++ b/pomu/source/bugz.py @@ -6,13 +6,11 @@ import xmlrpc.client from os import path from urllib.parse import urlparse -from pbraw import grab - from pomu.package import Package from pomu.source import dispatcher -from pomu.util.misc import extract_urls, parse_range -from pomu.util.pkg import cpv_split, ver_str -from pomu.util.query import query, QueryContext +from pomu.util.iquery import Prompt +from pomu.util.misc import extract_urls +from pomu.util.query import query from pomu.util.result import Result class BzEbuild(): @@ -62,43 +60,19 @@ class BugzillaSource(): comments = proxy.comments(payload)['bugs'][str(uri)]['comments'] comment_links = [] for comment in comments: - comment_links.extend(extract_urls(text)) + comment_links.extend(extract_urls(comment['text'])) items = attachments + comment_links if not items: return Result.Err() - lines = ['Please select required items (ranges are accepted)'] - for idx, item in enumerate(items): - if isinstance(item, str): - lines.append('{} - {}'.format(idx, item)) - else: - lines.append('{} - Attachment: {}'.format(idx, item['file_name'])) - lines.append('>>> ') - rng = query('items', '\n'.join(lines), 1) - idxs = parse_range(rng, len(items)) - if not idxs: - return Result.Err() - filtered = [x for idx, x in enumerate(items) if idx + 1 in idxs] - files = [] - for idx, item in enumerate(idxs): - if isinstance(item, str): - files.extend([(x[0], x[1].encode('utf-8')) for x in grab(item)]) - else: - files.append((item['file_name'], item['data'])) + p = Prompt(items) + files = p.run() if not files: return Result.Err() category = query('category', 'Please enter package category').expect() - name = query('name', 'Please enter package name') + name = query('name', 'Please enter package name').expect() ver = query('version', 'Please specify package version for {}'.format(name)).expect() - # TODO: ??? - fmap = {} - for fn, data in files: - with QueryContext(path=None): - fpath = query('path', 'Please enter path for {} file'.format(fn), path.join(category, name, fn)) - fmap[fpath] = data - - - - return Result.Ok(BzEbuild(uri, category, name, ver, uri)) + fmap = {path.join(category, name, x[2]): x[1] for x in items} + return Result.Ok(BzEbuild(uri, category, name, ver, fmap)) @dispatcher.handler(priority=2) def parse_link(uri): diff --git a/pomu/source/url.py b/pomu/source/url.py index 0f43f01..33f51fb 100644 --- a/pomu/source/url.py +++ b/pomu/source/url.py @@ -2,15 +2,13 @@ A package source module to import packages from URLs """ -from os import path, close -from tempfile import mkstemp +from os import path from pbraw import grab from pomu.package import Package from pomu.source import dispatcher from pomu.source.base import PackageBase, BaseSource -from pomu.util.pkg import cpv_split, ver_str from pomu.util.query import query from pomu.util.result import Result @@ -26,15 +24,12 @@ class URLEbuild(PackageBase): self.contents = contents def fetch(self): - fd, tfile = tempfile.mkstemp() - os.close(fd) if self.contents: if isinstance(self.contents, str): self.content = self.content.encode('utf-8') else: fs = grab(self.url) self.content = fs[0][1].encode('utf-8') - f.write(fs[0][1]) return Package(self.name, '/', self, self.category, self.version, filemap = { path.join( @@ -70,7 +65,7 @@ class URLGrabberSource(BaseSource): category, _, name = name.rpartition('/') ver = query('version', 'Please specify package version for {}'.format(name)).expect() if not category: - category = query('category', 'Please enter category for {}'.format(name), parent).expect() + category = query('category', 'Please enter category for {}'.format(name)).expect() files = grab(uri) if not files: return Result.Err() @@ -80,8 +75,8 @@ class URLGrabberSource(BaseSource): def parse_full(url): if not url.startswith('url:'): return Result.Err() - return URLGrabberSource.parse_ebuild_path(uri[3:]) + return URLGrabberSource.parse_ebuild_path(url[4:]) @classmethod def from_meta_dir(cls, metadir): - return LocalEbuild.from_data_dir(cls, metadir) + return URLEbuild.from_data_dir(cls, metadir) diff --git a/pomu/util/iquery.py b/pomu/util/iquery.py index 032838d..df76251 100644 --- a/pomu/util/iquery.py +++ b/pomu/util/iquery.py @@ -1,14 +1,12 @@ """A module to interactively query""" from pydoc import pager -from curtsies import CursorAwareWindow, Input, FSArray, fsarray, fmtstr +from curtsies import CursorAwareWindow, Input, fsarray, fmtstr from curtsies.fmtfuncs import underline from pbraw import grab class Position: - row = attr.ib() - column = attr.ib() def __init__(self, row=0, column=0): self.row = row self.column = column @@ -21,7 +19,7 @@ def render_entry(entry, width, active=False): char = '*' if entry[2] else ' ' w = 3 + fmtstr(entry[0]).width + 2 text = fmtstr(entry[3]) - return fsmtstr( + return fmtstr( '[' + underline(char) if active else char + '] ' + entry[0] + ' ' + entry[3][:width - w - 2] + '..' if text.width < width - w else entry[3]) @@ -46,7 +44,7 @@ class Prompt: CursorAwareWindow(in_stream=tty_in, out_stream=tty_out, hide_cursor=False, - extra_bytes_callback=input_generator.unget_bytes) as window: + extra_bytes_callback=input_.unget_bytes) as window: self.window = window self.render() for event in input_: @@ -61,22 +59,22 @@ class Prompt: def preview(self): entry = self.entries[self.idx] if entry[0] is not None: - pydoc.pager(entry[1]) + pager(entry[1]) else: gr = grab(entry) if not gr: del self.entries[self.idx] self.idx = clamp(self.idx - 1) - pydoc.pager('Error: could not fetch '.format(entry)) + pager('Error: could not fetch '.format(entry)) self.entries[self.idx:self.idx+1] = [process_entry((x[0], x[1].encode('utf-8'))) for x in gr] - pydoc.pager(self.entries[self.idx][1]) + pager(self.entries[self.idx][1]) def toggle(self): if self.idx == len(self.entries): return self.entries[self.idx][3] = not self.entries[self.idx][3] - def process_event(self): + def process_event(self, event): if self.list: if event == '<UP>': self.idx = clamp(self.idx - 1) diff --git a/pomu/util/misc.py b/pomu/util/misc.py index 09d4232..de297af 100644 --- a/pomu/util/misc.py +++ b/pomu/util/misc.py @@ -1,6 +1,8 @@ """Miscellaneous utility functions""" import re +from pomu.util.result import Result + def list_add(dst, src): """ Extends the target list with a scalar, or contents of the given list |