diff options
author | lioux <lioux@FreeBSD.org> | 2006-07-29 21:52:20 +0000 |
---|---|---|
committer | lioux <lioux@FreeBSD.org> | 2006-07-29 21:52:20 +0000 |
commit | 6a0479965be09ef6e05ed1f66522386c654a2371 (patch) | |
tree | a550257ee53b64924b9c0995af55ceb11aac923e /net-p2p | |
parent | 49fda9359b7f0af5682b188dbe300207044821b5 (diff) | |
download | FreeBSD-ports-6a0479965be09ef6e05ed1f66522386c654a2371.zip FreeBSD-ports-6a0479965be09ef6e05ed1f66522386c654a2371.tar.gz |
o Update to 4.20.4
o Add a new batch of local patches:
- Better support for launchmany-{console,curses}
- Add -save_incomplete_in
- More fixes
- General fixes
Diffstat (limited to 'net-p2p')
17 files changed, 645 insertions, 315 deletions
diff --git a/net-p2p/py-bittorrent-devel/Makefile b/net-p2p/py-bittorrent-devel/Makefile index b0933eb..8fe79dc 100644 --- a/net-p2p/py-bittorrent-devel/Makefile +++ b/net-p2p/py-bittorrent-devel/Makefile @@ -6,7 +6,7 @@ # PORTNAME= BitTorrent -PORTVERSION= 4.20.0 +PORTVERSION= 4.20.4 PORTEPOCH= 1 CATEGORIES?= net-p2p python MASTER_SITES= http://download.bittorrent.com/dl/ diff --git a/net-p2p/py-bittorrent-devel/distinfo b/net-p2p/py-bittorrent-devel/distinfo index 2207cb7..df01d12 100644 --- a/net-p2p/py-bittorrent-devel/distinfo +++ b/net-p2p/py-bittorrent-devel/distinfo @@ -1,3 +1,3 @@ -MD5 (BitTorrent-4.20.0.tar.gz) = eb4568ec465421b03827bd5665395a62 -SHA256 (BitTorrent-4.20.0.tar.gz) = 70a78b693336cca4723f3a10eedc97eb88be7b20320f90b3bfee640ea4c14970 -SIZE (BitTorrent-4.20.0.tar.gz) = 2372371 +MD5 (BitTorrent-4.20.4.tar.gz) = 6616f6ae8a8460804ce43b3cf4b6f73b +SHA256 (BitTorrent-4.20.4.tar.gz) = 54a231c6f95175fab6e493fef1e726f7f198d84396f0d6e5d6541db77b545d69 +SIZE (BitTorrent-4.20.4.tar.gz) = 2395512 diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__AutoUpdateButler.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__AutoUpdateButler.py new file mode 100644 index 0000000..f70e5ea --- /dev/null +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__AutoUpdateButler.py @@ -0,0 +1,11 @@ +--- ./BitTorrent/AutoUpdateButler.py.orig Fri Jul 28 23:30:10 2006 ++++ ./BitTorrent/AutoUpdateButler.py Fri Jul 28 23:29:47 2006 +@@ -375,7 +375,7 @@ + self.multitorrent.remove_auto_updates_except(infohash) + + try: +- df = self.multitorrent.create_torrent(metainfo, installer_path, installer_path, hidden=True, is_auto_update=True) ++ df = self.multitorrent.create_torrent(metainfo, installer_path, installer_path, installer_path, installer_path, hidden=True, is_auto_update=True) + yield df + df.getResult() + except TorrentAlreadyRunning: diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__HTTPHandler.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__HTTPHandler.py index 5d23886..c2a4671 100644 --- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__HTTPHandler.py +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__HTTPHandler.py @@ -1,5 +1,5 @@ ---- ./BitTorrent/HTTPHandler.py.orig Mon Jun 12 22:45:48 2006 -+++ ./BitTorrent/HTTPHandler.py Wed Jun 21 23:57:08 2006 +--- ./BitTorrent/HTTPHandler.py.orig Wed Jul 12 02:18:18 2006 ++++ ./BitTorrent/HTTPHandler.py Sat Jul 22 17:42:24 2006 @@ -19,7 +19,7 @@ diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__MultiTorrent.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__MultiTorrent.py new file mode 100644 index 0000000..4e805f6 --- /dev/null +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__MultiTorrent.py @@ -0,0 +1,35 @@ +--- ./BitTorrent/MultiTorrent.py.orig Mon Jul 24 00:58:59 2006 ++++ ./BitTorrent/MultiTorrent.py Sat Jul 29 00:02:03 2006 +@@ -270,6 +270,8 @@ + self.logger.log(severity, message, exc_info=exc_info) + + def create_torrent(self, metainfo, save_incomplete_as, save_as, ++ saveas_style_save_incomplete_as=None, ++ saveas_style_save_as=None, + hidden=False, is_auto_update=False): + if self.is_single_torrent and len(self.torrents) > 0: + print "create_torrent: len(self.torrents)=", len(self.torrents) +@@ -295,9 +297,11 @@ + infohash, + lambda s : self.global_error(logging.ERROR, s)) + +- t = Torrent(metainfo, save_incomplete_as, save_as, self.config, +- self.data_dir, self.rawserver, self.choker, +- self.singleport_listener, self.ratelimiter, ++ t = Torrent(metainfo, save_incomplete_as, save_as, ++ saveas_style_save_incomplete_as, ++ saveas_style_save_as, ++ self.config, self.data_dir, self.rawserver, ++ self.choker, self.singleport_listener, self.ratelimiter, + self.total_downmeasure, self.filepool, self.dht, self, + self.log_root, hidden=hidden, is_auto_update=is_auto_update) + retdf = Deferred() +@@ -686,7 +690,7 @@ + '('+unicode(e.args[0])+')') + return None + +- t = Torrent(metainfo, "", "", self.config, self.data_dir, ++ t = Torrent(metainfo, "", "", "", "", self.config, self.data_dir, + self.rawserver, self.choker, + self.singleport_listener, self.ratelimiter, + self.total_downmeasure, self.filepool, self.dht, self, diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__NewRateLimiter.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__NewRateLimiter.py new file mode 100644 index 0000000..f972188 --- /dev/null +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__NewRateLimiter.py @@ -0,0 +1,35 @@ +--- ./BitTorrent/NewRateLimiter.py.orig Wed Jul 12 02:18:21 2006 ++++ ./BitTorrent/NewRateLimiter.py Sat Jul 22 17:42:24 2006 +@@ -144,24 +144,14 @@ + def restart_loop(self, t): + # check for pending loop event + if self.task and not self.task.called: +- ## look at when it's scheduled to occur +- # we can special case events which have a delta of 0, since they +- # should occur asap. no need to check the time. +- if self.task.delta == 0: +- return +- # use time.time since twisted does anyway +- s = self.task.getTime() - time.time() +- if s > t: +- # if it would occur after the time we want, reset it +- self.task.reset(t) +- self.task.delta = t +- else: +- if t == 0: +- # don't spin the event loop needlessly +- self.run() +- else: +- self.task = self.add_task(t, self.run) +- self.task.delta = t ++ # look at when it's scheduled to occur ++ s = self.task.getTime() - bttime() ++ if s <= t: ++ return ++ # if it would occur after the time we want, cancel it ++ self.task.cancel() ++ ++ self.task = self.add_task(t, self.run) + + def _write(self, to_write): + amount = 0 diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__OldTorrentQueue.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__OldTorrentQueue.py index 6741167..ca4c402 100644 --- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__OldTorrentQueue.py +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__OldTorrentQueue.py @@ -1,5 +1,5 @@ ---- ./BitTorrent/OldTorrentQueue.py.orig Mon Jun 12 22:45:49 2006 -+++ ./BitTorrent/OldTorrentQueue.py Wed Jun 21 23:57:08 2006 +--- ./BitTorrent/OldTorrentQueue.py.orig Wed Jul 12 02:18:22 2006 ++++ ./BitTorrent/OldTorrentQueue.py Sat Jul 22 17:42:24 2006 @@ -20,7 +20,7 @@ diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Rerequester.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Rerequester.py index bb71076..acf24f0 100644 --- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Rerequester.py +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Rerequester.py @@ -1,16 +1,6 @@ ---- BitTorrent/Rerequester.py.orig Sat Jun 24 08:14:52 2006 -+++ BitTorrent/Rerequester.py Sat Jun 24 08:22:14 2006 -@@ -180,8 +180,8 @@ - def _check(self): - assert thread.get_ident() == self.rawserver.ident - assert not self.dead -- self.errorfunc(logging.INFO, 'check: ' + str(self.current_started)) - if self.current_started is not None: -+ self.errorfunc(logging.INFO, 'check: ' + str(self.current_started)) - if self.current_started <= bttime() - 58: - self.errorfunc(logging.WARNING, - _("Tracker announce still not complete " -@@ -352,7 +352,8 @@ +--- ./BitTorrent/Rerequester.py.orig Wed Jul 12 02:18:25 2006 ++++ ./BitTorrent/Rerequester.py Sat Jul 22 17:42:24 2006 +@@ -369,7 +369,8 @@ def _postrequest(self, data=None, errormsg=None, exc=None, peerid=None): assert thread.get_ident() == self.rawserver.ident self.current_started = None diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Torrent.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Torrent.py index dc31ea3..6b59f77 100644 --- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Torrent.py +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Torrent.py @@ -1,6 +1,39 @@ ---- ./BitTorrent/Torrent.py.orig Mon Jun 12 22:45:53 2006 -+++ ./BitTorrent/Torrent.py Wed Jun 21 23:57:08 2006 -@@ -234,6 +234,9 @@ +--- ./BitTorrent/Torrent.py.orig Wed Jul 12 02:18:28 2006 ++++ ./BitTorrent/Torrent.py Sat Jul 29 00:08:59 2006 +@@ -58,7 +58,6 @@ + + from khashmir import const + +- + class Feedback(object): + """Inidivual torrents (Torrent) perform callbacks regarding + changes of state to the rest of the program via a Feedback +@@ -90,8 +89,9 @@ + POLICIES = ["stop", "start", "auto"] + PRIORITIES = ["low", "normal", "high"] + +- def __init__(self, metainfo, working_path, destination_path, config, +- data_dir, rawserver, choker, ++ def __init__(self, metainfo, working_path, destination_path, ++ saveas_style_working_path, saveas_style_destination_path, ++ config, data_dir, rawserver, choker, + singleport_listener, ratelimiter, total_downmeasure, + filepool, dht, feedback, log_root, + hidden=False, is_auto_update=False): +@@ -152,8 +152,11 @@ + + self.config = Preferences(config)#, persist_callback=self._dump_torrent_config) + self.working_path = working_path #sets in config. See _set_working_path +- + self.destination_path = destination_path # sets in config. ++ ++ self.saveas_style_working_path = saveas_style_working_path ++ self.saveas_style_destination_path = saveas_style_destination_path ++ + self.priority = "normal" + self.policy = "auto" + +@@ -258,6 +261,9 @@ def is_running(self): return self.state == "running" @@ -9,3 +42,20 @@ + def is_context_valid(self): return self.context_valid + +@@ -819,8 +825,13 @@ + self.logger.debug("successfully paused torrent, moving file") + + self.state = "finishing" +- df = ThreadedDeferred(_wrap_task(self._rawserver.external_add_task), +- move, self.working_path, self.destination_path) ++ if self.saveas_style_working_path is not None and self.saveas_style_destination_path is not None: ++ df = ThreadedDeferred(_wrap_task(self._rawserver.external_add_task), ++ move, self.saveas_style_working_path, ++ self.saveas_style_destination_path) ++ else: ++ df = ThreadedDeferred(_wrap_task(self._rawserver.external_add_task), ++ move, self.working_path, self.destination_path) + yield df + df.getResult() + diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XMultiTorrent.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XMultiTorrent.py new file mode 100644 index 0000000..5d60552 --- /dev/null +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XMultiTorrent.py @@ -0,0 +1,15 @@ +--- ./BitTorrent/XMultiTorrent.py.orig Fri Jul 28 23:25:45 2006 ++++ ./BitTorrent/XMultiTorrent.py Fri Jul 28 23:27:31 2006 +@@ -50,10 +50,10 @@ + + return Binary(infohash) + +- def _create_torrent(self, torrent, dlpath): ++ def _create_torrent(self, torrent, save_incomplete_as, save_as): + d = bdecode(torrent) + metainfo = ConvertedMetainfo(d) +- self.multitorrent.create_torrent(metainfo, dlpath) ++ self.multitorrent.create_torrent(metainfo, save_incomplete_as, save_as) + return metainfo.infohash + + def xmlrpc_start_torrent(self, infohash): diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XTorrentQueue.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XTorrentQueue.py new file mode 100644 index 0000000..42420a5 --- /dev/null +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XTorrentQueue.py @@ -0,0 +1,15 @@ +--- ./BitTorrent/XTorrentQueue.py.orig Fri Jul 28 23:27:55 2006 ++++ ./BitTorrent/XTorrentQueue.py Fri Jul 28 23:28:20 2006 +@@ -32,10 +32,10 @@ + + return Binary(infohash) + +- def _create_torrent(self, torrent, dlpath): ++ def _create_torrent(self, torrent, save_incomplete_as, save_as): + d = bdecode(torrent) + metainfo = ConvertedMetainfo(d) +- self.tq.create_torrent(metainfo, dlpath) ++ self.tq.create_torrent(metainfo, save_incomplete_as, save_as) + return metainfo.infohash + + def xmlrpc_start_torrent(self, infohash): diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__defaultargs.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__defaultargs.py index 4d60a10..0befcfd 100644 --- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__defaultargs.py +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__defaultargs.py @@ -1,5 +1,5 @@ ---- ./BitTorrent/defaultargs.py.orig Mon Jun 12 22:45:58 2006 -+++ ./BitTorrent/defaultargs.py Wed Jun 21 23:57:08 2006 +--- ./BitTorrent/defaultargs.py.orig Wed Jul 12 02:18:33 2006 ++++ ./BitTorrent/defaultargs.py Sat Jul 22 17:42:24 2006 @@ -20,6 +20,8 @@ if os.name == 'posix': if os.uname()[0] in ['Darwin']: @@ -9,11 +9,11 @@ MAX_INCOMPLETE = 100 MAX_FILES_OPEN = 50 -@@ -372,6 +374,10 @@ +@@ -376,6 +378,10 @@ "name determined by --saveas_style. If this is left empty " "each torrent will be saved under the directory of the " "corresponding .torrent file")), -+ ('save_incomplete_in', '', ++ ('save_incomplete_in', u'', + _("local directory where the incomplete torrent downloads will be " + "stored until completion. Upon completion, downloads will be " + "moved to the directory specified by --save_in.")), diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__launchmanycore.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__launchmanycore.py index e28dd0a..e669d2b 100644 --- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__launchmanycore.py +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__launchmanycore.py @@ -1,247 +1,445 @@ ---- BitTorrent/launchmanycore.py.orig Mon Jun 12 22:45:59 2006 -+++ BitTorrent/launchmanycore.py Sat Jun 24 14:47:28 2006 -@@ -13,28 +13,33 @@ - # Original version written by John Hoffman, heavily modified for different - # multitorrent architecture by Uoti Urpala (over 40% shorter than original) - --raise ImportError("launchmanycore has not been ported to the 5.0 backend. Please look for it in a future release. Thanks for your patience.") -- - import os - from cStringIO import StringIO +--- ./BitTorrent/launchmanycore.py.orig Wed Jul 12 02:18:34 2006 ++++ ./BitTorrent/launchmanycore.py Fri Jul 28 23:45:22 2006 +@@ -22,14 +22,17 @@ from traceback import print_exc - from BitTorrent.translation import _ - -+from BitTorrent import BTFailure + import logging from BitTorrent import configfile --from BitTorrent.parsedir import parsedir --from BitTorrent.download import Multitorrent, Feedback -+from BitTorrent import zurllib -+from BitTorrent.AutoUpdateButler import AutoUpdateButler ++from BitTorrent import platform + from BitTorrent.parsedir import parsedir +-from BitTorrent.MultiTorrent import MultiTorrent, Feedback ++from BitTorrent.MultiTorrent import MultiTorrent, Feedback, TorrentAlreadyRunning, TorrentAlreadyInQueue, TorrentNotInitialized from BitTorrent.ConvertedMetainfo import ConvertedMetainfo --from BitTorrent import BTFailure -+from BitTorrent.MultiTorrent import MultiTorrent, TorrentAlreadyRunning, TorrentAlreadyInQueue, TorrentNotInitialized -+from BitTorrent.RawServer_twisted import RawServer -+from BitTorrent.Torrent import Torrent -+from BitTorrent.TorrentPolicy import Policy -+from BitTorrent.defer import DeferredEvent -+from BitTorrent.parsedir import parsedir + from BitTorrent import BTFailure, UserFailure + from BitTorrent.RawServer_twisted import RawServer + from BitTorrent.yielddefer import launch_coroutine, _wrap_task + from BitTorrent.ConvertedMetainfo import ConvertedMetainfo + from BitTorrent.defer import DeferredEvent ++from BitTorrent.platform import encode_for_filesystem +from BitTorrent.prefs import Preferences - --from threading import Event from time import time -- --class LaunchMany(Feedback): -+class LaunchMany(Policy): - def __init__(self, config, output, configfile_key): -+ zurllib.add_unsafe_thread() -+ - try: -- self.config = config -+ self.config = Preferences().initWithDict(config) - self.output = output - self.configfile_key = configfile_key +@@ -51,13 +54,13 @@ + # logger Formatter, which is specific to exceptions, warnings, and + # info messages. + try: ++ self.display = display.display + self.logger = logging.getLogger(configfile_key) + + self.multitorrent = None + self.rawserver = None +- self.config = config ++ self.config = Preferences().initWithDict(config) + self.configfile_key = configfile_key +- self.display = display -@@ -45,15 +50,30 @@ - - self.torrent_list = [] - self.downloads = {} -- self.doneflag = Event() -+ -+ self.doneflag = DeferredEvent() -+ self.rawserver_doneflag = DeferredEvent() + self.torrent_dir = config['torrent_dir'] - self.hashcheck_queue = [] - self.hashcheck_store = {} -- self.hashcheck_current = None +@@ -78,30 +81,31 @@ -- self.multitorrent = MultiTorrent(config, self.doneflag, -- self.global_error) -- self.rawserver = self.multitorrent.rawserver -+ self.rawserver = RawServer(self.config) -+ zurllib.set_zurllib_rawserver(self.rawserver) -+ self.rawserver.associate_thread() -+ + self.hashcheck_queue = [] + self.hashcheck_store = {} +- self.hashcheck_current = None + + self.core_doneflag = DeferredEvent() +- rawserver_doneflag = DeferredEvent() ++ self.rawserver_doneflag = DeferredEvent() + self.rawserver = RawServer(self.config) + try: + + # set up shut-down procedure before we begin doing things that + # can throw exceptions. + def shutdown(): +- print "SHUTDOWNSHUTDOWNSHUTDOWN" ++ #print "SHUTDOWNSHUTDOWNSHUTDOWN" + self.logger.critical(_("shutting down")) +- for infohash in self.multitorrent.get_torrents(): +- self.logger.info(_('dropped "%s"') % +- self.torrent_cache[infohash]['path']) +- # torrent = self.downloads[infohash] +- # if torrent is not None: +- # torrent.shutdown() ++ for torrent in self.multitorrent.get_torrents(): ++ try: ++ removed = self.torrent_cache[torrent.infohash]['path'] ++ self.logger.info(_('dropped "%s"') % removed) ++ except KeyError: ++ pass ++ if torrent is not None: ++ torrent.shutdown() + if self.multitorrent: + df = self.multitorrent.shutdown() +- set_flag = lambda *a : rawserver_doneflag.set() ++ set_flag = lambda *a : self.rawserver_doneflag.set() + df.addCallbacks(set_flag, set_flag) + else: +- rawserver_doneflag.set() ++ self.rawserver_doneflag.set() + + # It is safe to addCallback here, because there is only one thread, + # but even if the code were multi-threaded, core_doneflag has not +@@ -112,9 +116,9 @@ + + self.rawserver.install_sigint_handler(self.core_doneflag) + +- data_dir = config['data_dir'] +- print "Creating MultiTorrent" +- self.multitorrent = MultiTorrent(config, self.rawserver, data_dir) + data_dir = self.config['data_dir'] -+ self.multitorrent = \ -+ MultiTorrent(self.config, self.doneflag, self.rawserver, data_dir) -+ -+ # to handle the callbacks -+ self.multitorrent.add_policy(self) -+ -+# auto_update_butler = AutoUpdateButler(self.multitorrent, self.rawserver, -+# test_new_version=self.config['new_version'], -+# test_current_version=self.config['current_version']) -+# self.multitorrent.add_auto_update_policy(auto_update_butler) -+# self.rawserver.add_task(0, auto_update_butler.check_version) -+ - ++ #print "Creating MultiTorrent" ++ self.multitorrent = MultiTorrent(self.config, self.rawserver, data_dir) + self.rawserver.add_task(0, self.scan) self.rawserver.add_task(0, self.stats) -@@ -63,23 +83,40 @@ - def handler(signum, frame): - self.rawserver.external_add_task(0, self.read_config) - signal.signal(signal.SIGHUP, handler) -- self.rawserver.install_sigint_handler() -+ self.rawserver.install_sigint_handler(self.doneflag) - except Exception, e: - self.output.message(_("Could not set signal handler: ") + str(e)) - -- self.rawserver.listen_forever() -+ def shutdown(): -+ self.output.message(_("shutting down")) -+ for infohash in self.torrent_list: -+ self.output.message(_('dropped "%s"') % -+ self.torrent_cache[infohash]['path']) -+ torrent = self.downloads[infohash] -+ if torrent is not None: -+ torrent.shutdown() -+ if self.multitorrent: -+ df = self.multitorrent.shutdown() -+ set_flag = lambda *a : self.rawserver_doneflag.set() -+ df.addCallbacks(set_flag, set_flag) -+ -+ self.rawserver.add_task(0, self.doneflag.addCallback, \ -+ lambda r: self.rawserver.external_add_task(0, shutdown)) -+ -+ try: -+ self.rawserver.listen_forever(self.rawserver_doneflag) -+ except AttributeError, e: -+ output.message(str(e)) -+ raise -+ except KeyboardInterrupt: -+ raise - -- self.output.message(_("shutting down")) -- for infohash in self.torrent_list: -- self.output.message(_('dropped "%s"') % -- self.torrent_cache[infohash]['path']) -- torrent = self.downloads[infohash] -- if torrent is not None: -- torrent.shutdown() +@@ -131,162 +135,221 @@ + self.rawserver.add_task(0,self.core_doneflag.set()) + + except UserFailure, e: +- output.exception(unicode(e.args[0])) ++ display.exception(unicode(e.args[0])) + self.rawserver.add_task(0,self.core_doneflag.set()) except: data = StringIO() print_exc(file = data) - output.exception(data.getvalue()) -+ self.doneflag.set() -+ self.rawserver_doneflag.set() +- output.exception(data.getvalue()) ++ display.exception(data.getvalue()) + self.rawserver.add_task(0,self.core_doneflag.set()) + + # always make sure events get processed even if only for + # shutting down. +- print "listening forever" +- self.rawserver.listen_forever(rawserver_doneflag) ++ #print "listening forever" ++ try: ++ self.rawserver.listen_forever(self.rawserver_doneflag) ++ except AttributeError, e: ++ output.message(str(e)) ++ raise ++ except KeyboardInterrupt: ++ raise + + except: + data = StringIO() + print_exc(file = data) +- output.exception(data.getvalue()) ++ display.exception(data.getvalue()) ++ self.core_doneflag.set() ++ self.rawserver_doneflag.set() def scan(self): +- print "LaunchMany.scan top." ++ #print "LaunchMany.scan top." self.rawserver.add_task(self.config['parse_dir_interval'], self.scan) -@@ -122,17 +159,16 @@ - upamt = 0 - dnamt = 0 - t = 0 + + r = parsedir(self.torrent_dir, self.torrent_cache, + self.file_cache, self.blocked_files, + self.logger.error) + +- print "After parsedir" ++ #print "After parsedir" + ( self.torrent_cache, self.file_cache, self.blocked_files, + added, removed ) = r + for infohash, data in removed.items(): + self.logger.info(_('dropped "%s"') % data['path']) + self.remove(infohash) + for infohash, data in added.items(): +- print "adding item:", data['path'] ++ #print "adding item:", data['path'] + self.logger.info(_('added "%s"' ) % data['path']) +- print "after self.logger.info" ++ #print "after self.logger.info" + if self.config['launch_delay'] > 0: + self.rawserver.add_task(self.config['launch_delay'], self.add, infohash, data) + # torrent may have been known from resume state. + elif not self.multitorrent.torrent_known(infohash): + self.add(infohash, data) +- print "LaunchMany.scan bottom" ++ #print "LaunchMany.scan bottom" + + def stats(self): + self.rawserver.add_task(self.config['display_interval'], self.stats) + data = [] +- for d in self.get_torrents(): +- infohash = d.infohash +- cache = self.torrent_cache[infohash] +- if self.config['display_path']: +- name = cache['path'] +- else: +- name = cache['name'] +- size = cache['length'] +- #d = self.downloads[infohash] +- progress = '0.0%' +- peers = 0 +- seeds = 0 +- seedsmsg = "S" +- dist = 0.0 +- uprate = 0.0 +- dnrate = 0.0 +- upamt = 0 +- dnamt = 0 +- t = 0 - msg = '' - if d is None: - status = _("waiting for hash check") - else: - stats = d.get_status() - status = stats['activity'] - progress = '%.1f%%' % (int(stats['fractionDone']*1000)/10.0) -- if d.started and not d.closed: -+ if d.is_running() and d.is_context_valid(): - s = stats -- dist = s['numCopies'] -- if d.is_seed: +- #if d.state in ["created", "initializing"]: +- # status = _("waiting for hash check") +- #else: +- stats = d.get_status() +- status = stats['activity'] +- progress = '%.1f%%' % (int(stats['fractionDone']*1000)/10.0) +- if d.is_running(): +- s = stats +- dist = s['numCopies'] +- if d.is_seed: +- seeds = 0 # s['numOldSeeds'] +- seedsmsg = "s" ++ for d in self.multitorrent.get_torrents(): ++ if d is not None: ++ infohash = d.infohash ++ try: ++ cache = self.torrent_cache[infohash] ++ except KeyError: ++ self.remove(infohash) ++ continue ++ if self.config['display_path']: ++ name = cache['path'] + else: +- if s['numSeeds'] + s['numPeers']: +- t = stats['timeEst'] +- if t is None: +- t = -1 +- if t == 0: # unlikely +- t = 0.01 +- status = _("downloading") ++ name = cache['name'] ++ size = cache['length'] ++ progress = '0.0%' ++ peers = 0 ++ seeds = 0 ++ seedsmsg = "S" ++ dist = 0.0 ++ uprate = 0.0 ++ dnrate = 0.0 ++ upamt = 0 ++ dnamt = 0 ++ t = 0 ++ msg = '' ++ #if d.state in ["created", "initializing"]: ++ # status = _("waiting for hash check") ++ #else: ++ stats = d.get_status() ++ status = stats['activity'] ++ progress = '%.1f%%' % (int(stats['fractionDone']*1000)/10.0) ++ if d.is_running(): ++ s = stats + dist = int(s['distributed_copies']) + if d.is_seeding(): - seeds = 0 # s['numOldSeeds'] - seedsmsg = "s" ++ seeds = 0 # s['numOldSeeds'] ++ seedsmsg = "s" else: -@@ -152,11 +188,9 @@ - uprate = stats['upRate'] - upamt = s['upTotal'] - dnamt = s['downTotal'] -- if d.errors and (d.closed or d.errors[-1][0] + 300 > time()): -- msg = d.errors[-1][2] +- t = -1 +- status = _("connecting to peers") +- seeds = s['numSeeds'] +- dnrate = stats['downRate'] +- peers = s['numPeers'] +- uprate = stats['upRate'] +- upamt = s['upTotal'] +- dnamt = s['downTotal'] ++ if s['numSeeds'] + s['numPeers']: ++ t = stats['timeEst'] ++ if t is None: ++ t = -1 ++ if t == 0: # unlikely ++ t = 0.01 ++ status = _("downloading") ++ else: ++ t = -1 ++ status = _("connecting to peers") ++ seeds = s['numSeeds'] ++ dnrate = stats['downRate'] ++ peers = s['numPeers'] ++ uprate = stats['upRate'] ++ upamt = s['upTotal'] ++ dnamt = s['downTotal'] - data.append(( name, status, progress, peers, seeds, seedsmsg, dist, -- uprate, dnrate, upamt, dnamt, size, t, msg )) -+ uprate, dnrate, upamt, dnamt, size, t )) - stop = self.output.display(data) +- data.append(( name, status, progress, peers, seeds, seedsmsg, dist, ++ data.append(( name, status, progress, peers, seeds, seedsmsg, dist, + uprate, dnrate, upamt, dnamt, size, t, msg )) + stop = self.display(data) if stop: - self.doneflag.set() -@@ -176,22 +210,55 @@ + self.core_doneflag.set() + + def remove(self, infohash): +- self.torrent_list.remove(infohash) +- if self.downloads[infohash] is not None: +- self.downloads[infohash].shutdown() ++ torrent = self.multitorrent.get_torrent(infohash) ++ if torrent is not None: ++ torrent.shutdown() + self.was_stopped(infohash) +- del self.downloads[infohash] + + def add(self, infohash, data): +- + # data is a dict like + # { path:'/a/b/c.torrent', file:'c.torrent', length:90911, name:'Sea', + # metainfo: <metainfo>} Metainfo has bdecoded but not passed + # to ConvertedMetainfo. +- self.torrent_list.append(infohash) +- self.downloads[infohash] = None + self.hashcheck_queue.append(infohash) + self.hashcheck_store[infohash] = ConvertedMetainfo(data['metainfo']) self.check_hashcheck_queue() def check_hashcheck_queue(self): - if self.hashcheck_current is not None or not self.hashcheck_queue: + if not self.hashcheck_queue: -+ return + return +- infohash = self.hashcheck_current = self.hashcheck_queue.pop(0) + infohash = self.hashcheck_queue.pop(0) -+ x = self.hashcheck_store[infohash] -+ metainfo = ConvertedMetainfo(x) -+ del self.hashcheck_store[infohash] -+ -+ if not self.torrent_cache[infohash] or self.torrent_cache[infohash] is None: + metainfo = self.hashcheck_store[infohash] + del self.hashcheck_store[infohash] +- filename = self.determine_filename(infohash) ++ save_incomplete_as, save_as = self.determine_filename(infohash) ++ saveas_style_save_incomplete_as, saveas_style_save_as = self._determine_filename(infohash) + torrent_path = self.torrent_cache[infohash]['path'] +- self.start_torrent(torrent_path, metainfo, filename, filename) ++ self.start_torrent(torrent_path, metainfo, save_incomplete_as,save_as, ++ saveas_style_save_incomplete_as, saveas_style_save_as) + +- def start_torrent(self,torrent_path,metainfo,save_incomplete_as,save_as): ++ def start_torrent(self,torrent_path,metainfo,save_incomplete_as,save_as, ++ saveas_style_save_incomplete_as=None,saveas_style_save_as=None): + assert isinstance(metainfo, ConvertedMetainfo) + df = launch_coroutine(_wrap_task(self.rawserver.add_task), + self._start_torrent, metainfo, +- save_incomplete_as, save_as) ++ save_incomplete_as, save_as, ++ saveas_style_save_incomplete_as=saveas_style_save_incomplete_as, ++ saveas_style_save_as=saveas_style_save_as) + df.addErrback(lambda e : self.logger.error(_("DIED: "),exc_info=e)) + return df + +- def _start_torrent(self, metainfo, save_incomplete_as,save_as): ++ def _start_torrent(self, metainfo, save_incomplete_as,save_as, ++ saveas_style_save_incomplete_as,saveas_style_save_as): + assert isinstance(metainfo, ConvertedMetainfo) +- df = self.multitorrent.create_torrent(metainfo, +- save_incomplete_as, save_as) +- yield df +- torrent = self.multitorrent.get_torrent(metainfo.infohash) +- if torrent.is_initialized(): +- multitorrent.start_torrent(metainfo.infohash) +- #else: ???? # this would be an error condition already reported +- # to logger. +- check_hashcheck_queue() ++ save_incomplete_as, junk = platform.encode_for_filesystem(save_incomplete_as) ++ save_as, junk = platform.encode_for_filesystem(save_as) ++ if saveas_style_save_incomplete_as is not None: ++ saveas_style_save_incomplete_as, junk = platform.encode_for_filesystem(saveas_style_save_incomplete_as) ++ if saveas_style_save_as is not None: ++ saveas_style_save_as, junk = platform.encode_for_filesystem(saveas_style_save_as) ++ try: ++ df = self.multitorrent.create_torrent(metainfo, ++ save_incomplete_as, save_as, ++ saveas_style_save_incomplete_as, ++ saveas_style_save_as) ++ yield df ++ df.getResult() ++ except (TorrentAlreadyRunning, TorrentAlreadyInQueue): ++ pass ++ except: + raise + +- def determine_filename(self, infohash): ++ infohash = metainfo.infohash + -+ if not self.multitorrent.torrent_known(infohash): -+ try: -+ (save_as, save_incomplete_as) = self.determine_filename(infohash) -+ df = self.multitorrent.create_torrent(metainfo, save_incomplete_as, save_as) -+ except (TorrentAlreadyRunning, TorrentAlreadyInQueue): -+ pass -+ except: -+ raise -+ ++ # find out if torrent has been recorded + try: -+ if not self.multitorrent.torrent_running(infohash): -+ df = self.multitorrent.start_torrent(infohash) -+ except TorrentAlreadyRunning: -+ pass -+ except TorrentNotInitialized: -+ # requeue -+ self.remove(infohash) ++ torrent = self.multitorrent.get_torrent(infohash) ++ if not torrent or torrent is None: ++ raise UnknownInfohash(infohash.encode("hex")) ++ except: ++ raise ++ ++ # function to requeue torrent if has not been initialized just yet ++ def hashcheck_requeue(infohash): ++ df = self.remove(infohash) + data = self.torrent_cache[infohash] + if self.config['launch_delay'] > 0: + self.rawserver.add_task(self.config['launch_delay'], self.add, infohash, data) + else: + # wait at least 1 + self.rawserver.add_task(1, self.add, infohash, data) - return -- self.hashcheck_current = self.hashcheck_queue.pop(0) -- metainfo = self.hashcheck_store[self.hashcheck_current] -- del self.hashcheck_store[self.hashcheck_current] -- filename = self.determine_filename(self.hashcheck_current) -- self.downloads[self.hashcheck_current] = self.multitorrent. \ -- start_torrent(ConvertedMetainfo(metainfo), -- self.config, self, filename) -+ except: -+ raise + -+ # record if everything has gone right -+ self.downloads[infohash] = \ -+ self.multitorrent.get_torrent(infohash) - - def determine_filename(self, infohash): ++ # Is it running? ++ running = self.multitorrent.torrent_running(infohash) ++ if not running: ++ try: ++ if torrent.is_initialized(): ++ df = self.multitorrent.start_torrent(infohash) ++ yield df ++ df.getResult() ++ else: ++ raise TorrentNotInitialized ++ except TorrentAlreadyRunning: ++ pass ++ except TorrentNotInitialized: ++ hashcheck_requeue(infohash) ++ except: ++ raise ++ ++ self.check_hashcheck_queue() ++ ++ def determine_saveas_style(self, infohash): x = self.torrent_cache[infohash] name = x['name'] - savein = self.config['save_in'] -+ saveincompletein = self.config['save_incomplete_in'] - isdir = not x['metainfo']['info'].has_key('length') +- savein = self.config['save_in'] +- isdir = not x['metainfo']['info'].has_key('length') style = self.config['saveas_style'] -+ if style == 4: torrentname = os.path.split(x['path'][:-8])[1] - suggestedname = name -@@ -202,17 +269,27 @@ +@@ -295,20 +358,54 @@ + style = 1 + else: + style = 3 ++ return style ++ ++ # Specially handle the style 3 case. ++ # Style 3 breaks Torrent.move so we have an intermediate ++ # _determine_filename for Torrent.move benefit ++ # but determine_filename for general use ++ def determine_filename(self, infohash): ++ x = self.torrent_cache[infohash] ++ name = x['name'] ++ isdir = not x['metainfo']['info'].has_key('length') ++ style = self.determine_saveas_style(infohash) ++ saveincompleteas, saveas = self._determine_filename(infohash) ++ ++ # add filename ++ if style == 3 and not isdir: ++ saveas = os.path.join(saveas, name) ++ saveincompleteas = os.path.join(saveincompleteas, name) ++ ++ return saveincompleteas, saveas ++ ++ # generate paths appropriate for Torrent.move method ++ def _determine_filename(self, infohash): ++ x = self.torrent_cache[infohash] ++ name = x['name'] ++ savein = self.config['save_in'] ++ saveincompletein = self.config['save_incomplete_in'] ++ style = self.determine_saveas_style(infohash) if style == 1 or style == 3: if savein: -- saveas = os.path.join(savein,x['file'][:-8]) # strip '.torrent' -+ saveas = os.path.join(savein, x['file'][:-8]) # strip '.torrent' + saveas = os.path.join(savein,x['file'][:-8]) # strip '.torrent' else: saveas = x['path'][:-8] # strip '.torrent' +- if style == 3 and not isdir: +- saveas = os.path.join(saveas, name) + if saveincompletein: + saveincompleteas = os.path.join(saveincompletein, x['file'][:-8]) # strip '.torrent' + else: + saveincompleteas = x['path'][:-8] # strip '.torrent' - if style == 3 and not isdir: - saveas = os.path.join(saveas, name) -+ saveincompleteas = os.path.join(saveincompleteas, name) else: if savein: saveas = os.path.join(savein, name) @@ -253,11 +451,11 @@ + else: + saveincompleteas = os.path.join(os.path.split(x['path'])[0], name) + -+ return saveas, saveincompleteas ++ return saveincompleteas, saveas def was_stopped(self, infohash): try: -@@ -221,8 +298,6 @@ +@@ -317,8 +414,6 @@ pass else: del self.hashcheck_store[infohash] @@ -265,12 +463,13 @@ - self.hashcheck_current = None self.check_hashcheck_queue() - def global_error(self, level, text): -@@ -253,7 +328,6 @@ - # rest are callbacks from torrent instances - - def started(self, torrent): -- self.hashcheck_current = None - self.check_hashcheck_queue() - - def failed(self, torrent): + # Exceptions are now reported via loggers.< +@@ -343,7 +438,7 @@ + # the self.failed() callback can run during this loop. + for option, value in newvalues.iteritems(): + self.multitorrent.set_option(option, value) +- for torrent in self.downloads.values(): ++ for torrent in self.multitorrent.get_torrents(): + if torrent is not None: + for option, value in newvalues.iteritems(): + torrent.set_option(option, value) diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__platform.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__platform.py index 34e4cfc..a18c4d6 100644 --- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__platform.py +++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__platform.py @@ -1,11 +1,11 @@ ---- ./BitTorrent/platform.py.orig Mon Jun 12 22:46:01 2006 -+++ ./BitTorrent/platform.py Wed Jun 21 23:57:08 2006 -@@ -131,7 +131,7 @@ +--- ./BitTorrent/platform.py.orig Wed Jul 12 02:18:37 2006 ++++ ./BitTorrent/platform.py Sat Jul 22 17:42:24 2006 +@@ -334,7 +334,7 @@ def calc_unix_dirs(): - appdir = '%s-%s'%(app_name, version) + appdir = '%s'%(app_name) - ip = os.path.join('share', 'pixmaps', appdir) - dp = os.path.join('share', 'doc' , appdir) - lp = os.path.join('share', 'locale') + ip = os.path.join(efs(u'share')[0], efs(u'pixmaps')[0], appdir) + dp = os.path.join(efs(u'share')[0], efs(u'doc')[0], appdir) + lp = os.path.join(efs(u'share')[0], efs(u'locale')[0]) diff --git a/net-p2p/py-bittorrent-devel/files/patch-launchmany-console.py b/net-p2p/py-bittorrent-devel/files/patch-launchmany-console.py index ce739ea..f2c8b8f 100644 --- a/net-p2p/py-bittorrent-devel/files/patch-launchmany-console.py +++ b/net-p2p/py-bittorrent-devel/files/patch-launchmany-console.py @@ -1,16 +1,32 @@ ---- ./launchmany-console.py.orig Mon Jun 12 22:46:19 2006 -+++ ./launchmany-console.py Wed Jun 21 23:57:08 2006 -@@ -34,10 +34,10 @@ - self.message(_("no torrents")) - for x in data: - ( name, status, progress, peers, seeds, seedsmsg, dist, -- uprate, dnrate, upamt, dnamt, size, t, msg ) = x -- print '"%s": "%s" (%s) - %sP%s%s%.3fD u%0.1fK/s-d%0.1fK/s u%dK-d%dK "%s"' % ( -+ uprate, dnrate, upamt, dnamt, size, t ) = x -+ print '"%s": "%s" (%s) - %sP%s%s%.3fD u%0.1fK/s-d%0.1fK/s u%dK-d%dK' % ( - name, status, progress, peers, seeds, seedsmsg, dist, -- uprate/1000, dnrate/1000, upamt/1024, dnamt/1024, msg) -+ uprate/1000, dnrate/1000, upamt/1024, dnamt/1024) +--- ./launchmany-console.py.orig Wed Jul 12 02:18:54 2006 ++++ ./launchmany-console.py Fri Jul 28 23:56:07 2006 +@@ -49,6 +49,10 @@ + uprate/1000, dnrate/1000, upamt/1024, dnamt/1024, msg)) return False - def message(self, s): ++ def exception(self, s): ++ exceptions.append(s) ++ #logging.getLogger('').info(_("SYSTEM ERROR - EXCEPTION GENERATED")) ++ + + if __name__ == '__main__': + uiname = 'launchmany-console' +@@ -76,7 +80,7 @@ + platform.decode_from_filesystem(torrent_dir) + else: + torrent_dir = config['torrent_dir'] +- torrent_dir,bad = platform.encode_from_filesystem(torrent_dir) ++ torrent_dir,bad = platform.encode_for_filesystem(torrent_dir) + if bad: + raise BTFailure(_("Warning: ")+config['torrent_dir']+ + _(" is not a directory")) +@@ -139,4 +143,8 @@ + #logging.getLogger().setLevel(INFO) + logging.getLogger('').setLevel(0) + +- LaunchMany(config, d.display, 'launchmany-console') ++ LaunchMany(config, d, 'launchmany-console') ++ ++ if exceptions: ++ print _("\nEXCEPTION:") ++ print exceptions[0] diff --git a/net-p2p/py-bittorrent-devel/files/patch-launchmany-curses.py b/net-p2p/py-bittorrent-devel/files/patch-launchmany-curses.py index 01d53f7..1a0c612 100644 --- a/net-p2p/py-bittorrent-devel/files/patch-launchmany-curses.py +++ b/net-p2p/py-bittorrent-devel/files/patch-launchmany-curses.py @@ -1,5 +1,5 @@ ---- ./launchmany-curses.py.orig Mon Jun 12 22:46:19 2006 -+++ ./launchmany-curses.py Wed Jun 21 23:57:08 2006 +--- ./launchmany-curses.py.orig Wed Jul 12 02:18:54 2006 ++++ ./launchmany-curses.py Fri Jul 28 23:42:45 2006 @@ -18,6 +18,7 @@ DOWNLOAD_SCROLL_RATE = 1 @@ -8,7 +8,7 @@ import sys, os from threading import Event from time import time, localtime, strftime -@@ -99,7 +100,7 @@ +@@ -101,7 +102,7 @@ def winch_handler(self, signum, stackframe): self.changeflag.set() curses.endwin() @@ -17,7 +17,7 @@ self.scrwin = curses.newwin(0, 0, 0, 0) self._remake_window() self._display_messages() -@@ -118,22 +119,26 @@ +@@ -120,22 +121,26 @@ self.mainpan = curses.panel.new_panel(self.mainwin) self.mainwin.scrollok(0) self.mainwin.nodelay(1) @@ -44,30 +44,22 @@ try: self.scrwin.border(ord('|'),ord('|'),ord('-'),ord('-'),ord(' '),ord(' '),ord(' '),ord(' ')) -@@ -199,7 +204,7 @@ - if self._display_line(''): - break - ( name, status, progress, peers, seeds, seedsmsg, dist, -- uprate, dnrate, upamt, dnamt, size, t, msg ) = data[ii] -+ uprate, dnrate, upamt, dnamt, size, t ) = data[ii] - t = fmttime(t) - if t: - status = t -@@ -216,7 +221,7 @@ - else: - datastr = ' '+status+' ('+progress+')' - self._display_line(datastr) -- self._display_line(' '+ljust(msg,self.mainwinw-4)) -+# self._display_line(' '+ljust(msg,self.mainwinw-4)) - i += 1 +@@ -277,7 +282,8 @@ - def display(self, data): -@@ -236,7 +241,7 @@ - totalup = 0 - totaldn = 0 - for ( name, status, progress, peers, seeds, seedsmsg, dist, -- uprate, dnrate, upamt, dnamt, size, t, msg ) in data: -+ uprate, dnrate, upamt, dnamt, size, t ) in data: - totalup += uprate - totaldn += dnrate + def LaunchManyWrapper(scrwin, config): +- LaunchMany(config, CursesDisplayer(scrwin), 'launchmany-curses') ++ d = CursesDisplayer(scrwin) ++ LaunchMany(config, d, 'launchmany-curses') + + + if __name__ == '__main__': +@@ -306,7 +312,7 @@ + platform.decode_from_filesystem(torrent_dir) + else: + torrent_dir = config['torrent_dir'] +- torrent_dir,bad = platform.encode_from_filesystem(torrent_dir) ++ torrent_dir,bad = platform.encode_for_filesystem(torrent_dir) + if bad: + raise BTFailure(_("Warning: ")+config['torrent_dir']+ + _(" is not a directory")) diff --git a/net-p2p/py-bittorrent-devel/pkg-plist b/net-p2p/py-bittorrent-devel/pkg-plist index 572137a..ab35181 100644 --- a/net-p2p/py-bittorrent-devel/pkg-plist +++ b/net-p2p/py-bittorrent-devel/pkg-plist @@ -90,6 +90,9 @@ bin/torrentinfo-console %%PYTHON_SITELIBDIR%%/BitTorrent/IPC.py %%PYTHON_SITELIBDIR%%/BitTorrent/IPC.pyc %%PYTHON_SITELIBDIR%%/BitTorrent/IPC.pyo +%%PYTHON_SITELIBDIR%%/BitTorrent/InternetWatcher.py +%%PYTHON_SITELIBDIR%%/BitTorrent/InternetWatcher.pyc +%%PYTHON_SITELIBDIR%%/BitTorrent/InternetWatcher.pyo %%PYTHON_SITELIBDIR%%/BitTorrent/LaunchPath.py %%PYTHON_SITELIBDIR%%/BitTorrent/LaunchPath.pyc %%PYTHON_SITELIBDIR%%/BitTorrent/LaunchPath.pyo @@ -105,6 +108,9 @@ bin/torrentinfo-console %%PYTHON_SITELIBDIR%%/BitTorrent/MultiTorrent.py %%PYTHON_SITELIBDIR%%/BitTorrent/MultiTorrent.pyc %%PYTHON_SITELIBDIR%%/BitTorrent/MultiTorrent.pyo +%%PYTHON_SITELIBDIR%%/BitTorrent/NamedMutex.py +%%PYTHON_SITELIBDIR%%/BitTorrent/NamedMutex.pyc +%%PYTHON_SITELIBDIR%%/BitTorrent/NamedMutex.pyo %%PYTHON_SITELIBDIR%%/BitTorrent/NatCheck.py %%PYTHON_SITELIBDIR%%/BitTorrent/NatCheck.pyc %%PYTHON_SITELIBDIR%%/BitTorrent/NatCheck.pyo @@ -216,9 +222,6 @@ bin/torrentinfo-console %%PYTHON_SITELIBDIR%%/BitTorrent/defer.py %%PYTHON_SITELIBDIR%%/BitTorrent/defer.pyc %%PYTHON_SITELIBDIR%%/BitTorrent/defer.pyo -%%PYTHON_SITELIBDIR%%/BitTorrent/flock_mutex.py -%%PYTHON_SITELIBDIR%%/BitTorrent/flock_mutex.pyc -%%PYTHON_SITELIBDIR%%/BitTorrent/flock_mutex.pyo %%PYTHON_SITELIBDIR%%/BitTorrent/hash.py %%PYTHON_SITELIBDIR%%/BitTorrent/hash.pyc %%PYTHON_SITELIBDIR%%/BitTorrent/hash.pyo @@ -252,6 +255,9 @@ bin/torrentinfo-console %%PYTHON_SITELIBDIR%%/BitTorrent/pykill.py %%PYTHON_SITELIBDIR%%/BitTorrent/pykill.pyc %%PYTHON_SITELIBDIR%%/BitTorrent/pykill.pyo +%%PYTHON_SITELIBDIR%%/BitTorrent/shortargs.py +%%PYTHON_SITELIBDIR%%/BitTorrent/shortargs.pyc +%%PYTHON_SITELIBDIR%%/BitTorrent/shortargs.pyo %%PYTHON_SITELIBDIR%%/BitTorrent/sparse_set.py %%PYTHON_SITELIBDIR%%/BitTorrent/sparse_set.pyc %%PYTHON_SITELIBDIR%%/BitTorrent/sparse_set.pyo @@ -342,34 +348,16 @@ bin/torrentinfo-console %%PYTHON_SITELIBDIR%%/khashmir/utkhashmir.py %%PYTHON_SITELIBDIR%%/khashmir/utkhashmir.pyc %%PYTHON_SITELIBDIR%%/khashmir/utkhashmir.pyo -share/locale/af/LC_MESSAGES/bittorrent.mo -share/locale/bg/LC_MESSAGES/bittorrent.mo -share/locale/ca/LC_MESSAGES/bittorrent.mo -share/locale/cs/LC_MESSAGES/bittorrent.mo -share/locale/da/LC_MESSAGES/bittorrent.mo share/locale/de/LC_MESSAGES/bittorrent.mo -share/locale/el/LC_MESSAGES/bittorrent.mo +share/locale/en/LC_MESSAGES/bittorrent.mo share/locale/es/LC_MESSAGES/bittorrent.mo share/locale/es_MX/LC_MESSAGES/bittorrent.mo share/locale/fr/LC_MESSAGES/bittorrent.mo -share/locale/he/LC_MESSAGES/bittorrent.mo -share/locale/hu/LC_MESSAGES/bittorrent.mo -share/locale/is/LC_MESSAGES/bittorrent.mo share/locale/it/LC_MESSAGES/bittorrent.mo share/locale/ja/LC_MESSAGES/bittorrent.mo share/locale/ko/LC_MESSAGES/bittorrent.mo -share/locale/nb_NO/LC_MESSAGES/bittorrent.mo -share/locale/nl/LC_MESSAGES/bittorrent.mo -share/locale/pl/LC_MESSAGES/bittorrent.mo share/locale/pt/LC_MESSAGES/bittorrent.mo share/locale/pt_BR/LC_MESSAGES/bittorrent.mo -share/locale/ro/LC_MESSAGES/bittorrent.mo -share/locale/ru/LC_MESSAGES/bittorrent.mo -share/locale/sk/LC_MESSAGES/bittorrent.mo -share/locale/sl/LC_MESSAGES/bittorrent.mo -share/locale/sv/LC_MESSAGES/bittorrent.mo -share/locale/tr/LC_MESSAGES/bittorrent.mo -share/locale/vi/LC_MESSAGES/bittorrent.mo share/locale/zh_CN/LC_MESSAGES/bittorrent.mo share/locale/zh_TW/LC_MESSAGES/bittorrent.mo %%GUI%%@dirrm share/pixmaps/BitTorrent/themes/default/torrentstate @@ -386,26 +374,10 @@ share/locale/zh_TW/LC_MESSAGES/bittorrent.mo @dirrmtry share/locale/zh_TW @dirrmtry share/locale/zh_CN/LC_MESSAGES @dirrmtry share/locale/zh_CN -@dirrmtry share/locale/sl/LC_MESSAGES -@dirrmtry share/locale/sl -@dirrmtry share/locale/sk/LC_MESSAGES -@dirrmtry share/locale/sk -@dirrmtry share/locale/ro/LC_MESSAGES -@dirrmtry share/locale/ro @dirrmtry share/locale/pt/LC_MESSAGES @dirrmtry share/locale/pt -@dirrmtry share/locale/pl/LC_MESSAGES -@dirrmtry share/locale/pl -@dirrmtry share/locale/nb_NO/LC_MESSAGES -@dirrmtry share/locale/nb_NO @dirrmtry share/locale/ko/LC_MESSAGES @dirrmtry share/locale/ko -@dirrmtry share/locale/el/LC_MESSAGES -@dirrmtry share/locale/el -@dirrmtry share/locale/cs/LC_MESSAGES -@dirrmtry share/locale/cs -@dirrmtry share/locale/ca/LC_MESSAGES -@dirrmtry share/locale/ca @dirrm %%PYTHON_SITELIBDIR%%/khashmir @dirrm %%PYTHON_SITELIBDIR%%/BitTorrent/GUI_wx @dirrm %%PYTHON_SITELIBDIR%%/BitTorrent |