diff -uNr a/v/manifest b/v/manifest --- a/v/manifest 213e6ee9c388c260463ff127c129b88531438e26f02e49cf5e38822a7bfa493feede975eccfd3924c23cbad8cb8e6c21ae0a59e6a07d180ba9acff9cf8de57af +++ b/v/manifest d65f2d1a8e23b06c994571b7a4fd04e7707a00016ac68ec82b5a4908930c25bd766f9925d89c32b24160ad2d1c5f70c5a3d6cdab1b64dc9757eb5b25126903a9 @@ -1 +1,2 @@ 543800 v99 Canonical version of asciilifeform's v.py, the original V proof of concept +543800 v98 Phf's change to replace gnu patch with vtools vpatch for patching diff -uNr a/v/v.py b/v/v.py --- a/v/v.py 2a837416675b312acffbe3df80d0b0d099d1d9f2768148476d31e25502b20ab0713a8110b4f4a97455ecc29a444cd8e92f03534211307a9ae5a5595dcb1f0ad2 +++ b/v/v.py db0ca7ac7165b1891d3413f91d1acf36c0aedae0d410f7727b719e21dd85a3ec4d10181800ac8ae8a140ee49c0133d7fa956069464d7d8b7f89143a6553430af @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python ############################################################################## # Quick Intro: @@ -15,10 +15,10 @@ ############################################################################## -import os, sys, shutil, argparse, re, tempfile, gnupg +import os, sys, shutil, argparse, re, tempfile, gnupg, subprocess ############################################################################## -vver = 100 # This program's Kelvin version. +vver = 98 # This program's Kelvin version. ## HOW YOU CAN HELP: ## @@ -59,6 +59,7 @@ return sorted ############################################################################## +vpatch_path = "vpatch" verbose = False def fatal(msg): @@ -202,10 +203,24 @@ print "Pressing using head: {0} to path: '{1}'".format(args.head, args.dest) headpos = patches.index(args.head) seq = patches[:headpos + 1] - os.mkdir(args.dest) + if os.path.exists(args.dest): + print "Warning: target {0} already exists".format(args.dest) + else: + os.mkdir(args.dest) for p in seq: print "Using: {0}".format(disp_vp(p)) - os.system("patch -E --dir {0} -p1 < {1}".format(args.dest, p)) + out = subprocess.Popen([vpatch_path], cwd=args.dest, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + with open(p, "r") as inp: + body = inp.read() + stdout, stderr = out.communicate(body) + print stdout, + if out.returncode != 0: + fatal(("-----------------------------------\n" + + "There was an error while pressing:\n" + + "{0}\n" + + "Result in {1} might be in an invalid state!\n" + + "-----------------------------------").format(stderr.strip(), args.dest)) print "Completed Pressing using head: {0} to path: '{1}'".format(args.head, args.dest) # Command: Origin. @@ -317,9 +332,15 @@ name = handle[k['fingerprint']] if args.fingers: name += '-' + k['keyid'] + uids = ', '.join(map(str, k['uids'])) pubkeys[k['keyid']] = {'fp':k['fingerprint'], - 'id':', '.join(map(str, k['uids'])), + 'id':uids, 'handle':name} + for subkey in k.get('subkeys', []): + keyid, fingerprint = subkey[0], subkey[2] + pubkeys[keyid] = {'fp':fingerprint, + 'id':uids, + 'handle':name} # Validate seals for p in pfiles: