I think I might make another page in the settings to allow one to choose what fields to search in and possibly which to display as details. I plan on embedding the code to search ports right in NPM, but if it doesn't clog things up I don't see why not to allow the ability to use an external program. The best reason being if the index file ever changes or is ax'ed and I get hit by a bus, no one has to learn Python to fix NPM lol.
A couple months ago I sat down and started trying to figure out the format of the index file in ports, it was pretty easy and I wrote a small script to search it and print out all the cells of information in each entry of the index that had a matching package-version in it.
This is a quick test script I wrote tonight that searchs for a port and displays a short info on it, being a test I wrote the port to look for in the file test rather then passing sys.argv over to save time. I plan to adopt NPM to using a variation of this for searching ports now.
1: #!/usr/bin/env python
2:
3: # This is as much of the format of /usr/ports/INDEX-* file as I have
4: # been able to reverse engineer by looking at it and a few other things
5: # that didn't come with a nice fat manual page: the source is the documentation!
6: #
7: # Each program is listed on one line with each field separated with the pipe
8: # symbol (|), list values are delimited by a space.
9: #
10: # pkg-ver| -> as listed in pkg_info
11: # location in ports| -> /usr/ports/editors/vim
12: # install prefix| -> /usr/local
13: # short descr| ->
14: # path to pkg-descr| -> /usr/ports/editors/vim/pkg-decsr
15: # maintainer e-mail| -> who@foo.com
16: # listed in categories| -> list of cat, e.g. cat1 cat2
17: # dependencies to build| -> list of pkg-ver required to build this port
18: # dependencies at run time| -> list of pkg-ver required to run this program
19: # website| -> the programs website
20: # | -> unknown
21: # | -> unknown
22: # XXX: the unknowns may relate to internal port opts, e..g use zip, etc
23: ####
24:
25:
26: import re, os.path
27:
28: INDEX="/usr/ports/INDEX-6"
29:
30: # find keys 1,2,4 in index row via regex
31: def search(pattern):
32: idx = open(INDEX)
33: for line in idx:
34: keys = line.split('|')
35: k = (keys[0],os.path.split(keys[1])[1], keys[3])
36: for each in k:
37: if re.search(pattern, each):
38: print 'found'
39: mypp(keys)
40: idx.close()
41:
42: def mypp(table):
43: print "PORT INFORMATION FOR: %s" % table[0]
44: print 'location: %s' % table[1][11:]
45: print 'descr: %s' % table[3]
46: print 'category: %s' % table[6]
47: print 'website: %s' % table[9]
48:
49:
50: if __name__ == "__main__":
51: search("linux-flock")
52:
53:
No comments:
Post a Comment