[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