Added scanning of other directories for cached packages.
authorCameron Dale <camrdale@gmail.com>
Tue, 15 Jan 2008 06:28:26 +0000 (22:28 -0800)
committerCameron Dale <camrdale@gmail.com>
Tue, 15 Jan 2008 06:28:26 +0000 (22:28 -0800)
apt_dht/CacheManager.py
apt_dht/apt_dht.py
apt_dht/apt_dht_conf.py

index 4fdcf40c0a1069ec548d48bffa8b5bac7fe89ca2..c6aae89c416091fcceb1d32fba52c7f510a74b5f 100644 (file)
@@ -147,14 +147,17 @@ class ProxyFileStream(stream.SimpleStream):
 class CacheManager:
     """Manages all requests for cached objects."""
     
-    def __init__(self, cache_dir, db, manager = None):
+    def __init__(self, cache_dir, db, other_dirs = [], manager = None):
         self.cache_dir = cache_dir
+        self.other_dirs = other_dirs
+        self.all_dirs = self.other_dirs[:]
+        self.all_dirs.insert(0, self.cache_dir)
         self.db = db
         self.manager = manager
         self.scanning = []
         
         # Init the database, remove old files, init the HTTP dirs
-        self.db.removeUntrackedFiles([self.cache_dir])
+        self.db.removeUntrackedFiles(self.all_dirs)
         self.db.reconcileDirectories()
         self.manager.setDirectories(self.db.getAllDirectories())
         
@@ -162,7 +165,7 @@ class CacheManager:
     def scanDirectories(self):
         """Scan the cache directories, hashing new and rehashing changed files."""
         assert not self.scanning, "a directory scan is already under way"
-        self.scanning.append(self.cache_dir)
+        self.scanning = self.all_dirs[:]
         self._scanDirectories()
 
     def _scanDirectories(self, walker = None):
index 2211c1dfacd4dd64d4fe4ffcb2d6d8805ebeb39a..9504f8a854683b7196c556f83edf9565f64d6272 100644 (file)
@@ -34,7 +34,8 @@ class AptDHT:
         self.http_site = server.Site(self.http_server)
         self.peers = PeerManager()
         self.mirrors = MirrorManager(self.cache_dir)
-        self.cache = CacheManager(self.cache_dir.child(download_dir), self.db, self)
+        other_dirs = [FilePath(f) for f in config.getstringlist('DEFAULT', 'OTHER_DIRS')]
+        self.cache = CacheManager(self.cache_dir.child(download_dir), self.db, other_dirs, self)
         self.my_addr = None
     
     def getSite(self):
index 98bbd884358bbd1b09ae69945e500d8fd9b06b68..621ef367e9e999a440ea82a278aa57e4ef077fcd 100644 (file)
@@ -25,6 +25,11 @@ DEFAULTS = {
     # Directory to store the downloaded files in
     'CACHE_DIR': home + '/.apt-dht/cache',
     
+    # Other directories containing packages to share with others
+    # WARNING: all files in these directories will be hashed and available
+    #          for everybody to download
+    'OTHER_DIRS': """""",
+    
     # User name to try and run as
     'USERNAME': '',