[Debtorrent-commits] r7 - in /debtorrent/trunk:
DebTorrent/BT1/btformats.py
DebTorrent/BT1/makemetafile.py btmakemetafile.py
camrdale-guest at users.alioth.debian.org
camrdale-guest at users.alioth.debian.org
Wed Apr 25 21:59:25 UTC 2007
Author: camrdale-guest
Date: Wed Apr 25 21:59:25 2007
New Revision: 7
URL: http://svn.debian.org/wsvn/debtorrent/?sc=1&rev=7
Log:
Made btmakemetafile generate .dtorrent file from Packages file
Modified:
debtorrent/trunk/DebTorrent/BT1/btformats.py
debtorrent/trunk/DebTorrent/BT1/makemetafile.py
debtorrent/trunk/btmakemetafile.py
Modified: debtorrent/trunk/DebTorrent/BT1/btformats.py
URL: http://svn.debian.org/wsvn/debtorrent/debtorrent/trunk/DebTorrent/BT1/btformats.py?rev=7&op=diff
==============================================================================
--- debtorrent/trunk/DebTorrent/BT1/btformats.py (original)
+++ debtorrent/trunk/DebTorrent/BT1/btformats.py Wed Apr 25 21:59:25 2007
@@ -14,9 +14,12 @@
pieces = info.get('pieces')
if type(pieces) != StringType or len(pieces) % 20 != 0:
raise ValueError, 'bad metainfo - bad pieces key'
- piecelength = info.get('piece length')
- if type(piecelength) not in ints or piecelength <= 0:
- raise ValueError, 'bad metainfo - illegal piece length'
+ piecelengths = info.get('piece lengths')
+ if type(piecelengths) != ListType:
+ raise ValueError
+ for length in piecelengths:
+ if type(length) not in ints or length <= 0:
+ raise ValueError, 'bad metainfo - bad piece length'
name = info.get('name')
if type(name) != StringType:
raise ValueError, 'bad metainfo - bad name'
Modified: debtorrent/trunk/DebTorrent/BT1/makemetafile.py
URL: http://svn.debian.org/wsvn/debtorrent/debtorrent/trunk/DebTorrent/BT1/makemetafile.py?rev=7&op=diff
==============================================================================
--- debtorrent/trunk/DebTorrent/BT1/makemetafile.py (original)
+++ debtorrent/trunk/DebTorrent/BT1/makemetafile.py Wed Apr 25 21:59:25 2007
@@ -12,6 +12,7 @@
from threading import Event
from time import time
from traceback import print_exc
+import binascii
try:
from sys import getfilesystemencoding
ENCODING = getfilesystemencoding()
@@ -27,7 +28,7 @@
('piece_size_pow2', 0,
"which power of 2 to set the piece size to (0 = automatic)"),
('comment', '',
- "optional human-readable comment to put in .torrent"),
+ "optional human-readable comment to put in .dtorrent"),
('filesystem_encoding', '',
"optional specification for filesystem encoding " +
"(set automatically in recent Python versions)"),
@@ -69,9 +70,9 @@
else:
a, b = split(file)
if b == '':
- f = a + '.torrent'
+ f = a + '.dtorrent'
else:
- f = join(a, b + '.torrent')
+ f = join(a, b + '.dtorrent')
if piece_len_exp == 0: # automatic
size = calcsize(file)
@@ -152,67 +153,38 @@
def makeinfo(file, piece_length, encoding, flag, progress, progress_percent=1):
file = abspath(file)
- if isdir(file):
- subs = subfiles(file)
- subs.sort()
- pieces = []
- sh = sha()
- done = 0L
- fs = []
- totalsize = 0.0
- totalhashed = 0L
- for p, f in subs:
- totalsize += getsize(f)
-
- for p, f in subs:
- pos = 0L
- size = getsize(f)
- fs.append({'length': size, 'path': uniconvertl(p, encoding)})
- h = open(f, 'rb')
- while pos < size:
- a = min(size - pos, piece_length - done)
- sh.update(h.read(a))
- if flag.isSet():
- return
- done += a
- pos += a
- totalhashed += a
-
- if done == piece_length:
- pieces.append(sh.digest())
- done = 0
- sh = sha()
- if progress_percent:
- progress(totalhashed / totalsize)
- else:
- progress(a)
- h.close()
- if done > 0:
- pieces.append(sh.digest())
- return {'pieces': ''.join(pieces),
- 'piece length': piece_length, 'files': fs,
- 'name': uniconvert(split(file)[1], encoding) }
- else:
- size = getsize(file)
- pieces = []
- p = 0L
- h = open(file, 'rb')
- while p < size:
- x = h.read(min(piece_length, size - p))
- if flag.isSet():
- return
- pieces.append(sha(x).digest())
- p += piece_length
- if p > size:
- p = size
- if progress_percent:
- progress(float(p) / size)
- else:
- progress(min(piece_length, size - p))
- h.close()
- return {'pieces': ''.join(pieces),
- 'piece length': piece_length, 'length': size,
- 'name': uniconvert(split(file)[1], encoding) }
+ pieces = []
+ lengths = []
+ fs = []
+ packages = 0
+
+ p = [None, None, None]
+ f = open(file)
+ for line in f:
+ line = line.rstrip()
+ if line == "":
+ if (p[0] and p[1] and p[2]):
+ path = []
+ while p[1]:
+ p[1],d = split(p[1])
+ path.insert(0,d)
+ fs.append({'length': p[0], 'path': uniconvertl(path, encoding)})
+ lengths.append(p[0])
+ pieces.append(p[2])
+ packages += 1
+ progress(packages)
+ p = [None, None, None]
+ if line[:9] == "Filename:":
+ p[1] = line[10:]
+ if line[:5] == "Size:":
+ p[0] = long(line[6:])
+ if line[:5] == "SHA1:":
+ p[2] = binascii.a2b_hex(line[6:])
+ f.close()
+
+ return {'pieces': ''.join(pieces),
+ 'piece lengths': lengths, 'files': fs,
+ 'name': uniconvert(split(file)[1], encoding) }
def subfiles(d):
r = []
@@ -232,7 +204,7 @@
vc = lambda x: None, fc = lambda x: None):
files = listdir(dir)
files.sort()
- ext = '.torrent'
+ ext = '.dtorrent'
if params.has_key('target'):
target = params['target']
else:
Modified: debtorrent/trunk/btmakemetafile.py
URL: http://svn.debian.org/wsvn/debtorrent/debtorrent/trunk/btmakemetafile.py?rev=7&op=diff
==============================================================================
--- debtorrent/trunk/btmakemetafile.py (original)
+++ debtorrent/trunk/btmakemetafile.py Wed Apr 25 21:59:25 2007
@@ -21,11 +21,11 @@
def prog(amount):
- print '%.1f%% complete\r' % (amount * 100),
+ print '%d packages found\r' % amount,
if len(argv) < 3:
a,b = split(argv[0])
- print 'Usage: ' + b + ' <trackerurl> <file> [file...] [params...]'
+ print 'Usage: ' + b + ' <trackerurl> <Packages file> [Packages file...] [params...]'
print
print formatDefinitions(defaults, 80)
print_announcelist_details()
More information about the Debtorrent-commits
mailing list