]> git.decadent.org.uk Git - dak.git/commitdiff
new check files-not-symlinks.
authorJames Troup <james@nocrew.org>
Wed, 24 Sep 2003 00:13:46 +0000 (00:13 +0000)
committerJames Troup <james@nocrew.org>
Wed, 24 Sep 2003 00:13:46 +0000 (00:13 +0000)
tea

diff --git a/tea b/tea
index 5aaae8895990805c135b73665ca282499bc0a608..7a0b4c461a56fd78205914e53d5499461a65124c 100755 (executable)
--- a/tea
+++ b/tea
@@ -1,8 +1,8 @@
 #!/usr/bin/env python
 
-# Sanity check the database
+# Various different sanity checks
 # Copyright (C) 2000, 2001, 2002, 2003  James Troup <james@nocrew.org>
-# $Id: tea,v 1.23 2003-09-07 13:52:17 troup Exp $
+# $Id: tea,v 1.24 2003-09-24 00:13:46 troup Exp $
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -60,6 +60,7 @@ The following MODEs are available:
   timestamps         - check for future timestamps in .deb's
   tar-gz-in-dsc      - ensure each .dsc lists a .tar.gz file
   validate-indices   - ensure files mentioned in Packages & Sources exist
+  files-not-symlinks - check files in the database aren't symlinks
 """
     sys.exit(exit_code)
 
@@ -346,6 +347,49 @@ def check_indices_files_exist():
 
 ################################################################################
 
+def check_files_not_symlinks():
+    print "Building list of database files... ",;
+    before = time.time();
+    q = projectB.query("SELECT l.path, f.filename, f.id FROM files f, location l WHERE f.location = l.id")
+    print "done. (%d seconds)" % (int(time.time()-before));
+    q_files = q.getresult();
+
+#      locations = {};
+#      q = projectB.query("SELECT l.path, c.name, l.id FROM location l, component c WHERE l.component = c.id");
+#      for i in q.getresult():
+#          path = os.path.normpath(i[0] + i[1]);
+#          locations[path] = (i[0], i[2]);
+
+#      q = projectB.query("BEGIN WORK");
+    for i in q_files:
+       filename = os.path.normpath(i[0] + i[1]);
+        file_id = i[2];
+        if os.access(filename, os.R_OK) == 0:
+            utils.warn("%s: doesn't exist." % (filename));
+        else:
+            if os.path.islink(filename):
+                utils.warn("%s: is a symlink." % (filename));
+                # You probably don't want to use the rest of this...
+#                  print "%s: is a symlink." % (filename);
+#                  dest = os.readlink(filename);
+#                  if not os.path.isabs(dest):
+#                      dest = os.path.normpath(os.path.join(os.path.dirname(filename), dest));
+#                  print "--> %s" % (dest);
+#                  # Determine suitable location ID
+#                  # [in what must be the suckiest way possible?]
+#                  location_id = None;
+#                  for path in locations.keys():
+#                      if dest.find(path) == 0:
+#                          (location, location_id) = locations[path];
+#                          break;
+#                  if not location_id:
+#                      utils.fubar("Can't find location for %s (%s)." % (dest, filename));
+#                  new_filename = dest.replace(location, "");
+#                  q = projectB.query("UPDATE files SET filename = '%s', location = %s WHERE id = %s" % (new_filename, location_id, file_id));
+#      q = projectB.query("COMMIT WORK");
+
+################################################################################
+
 def main ():
     global Cnf, projectB, db_files, waste, excluded;
 
@@ -388,6 +432,8 @@ def main ():
         check_missing_tar_gz_in_dsc();
     elif mode == "validate-indices":
         check_indices_files_exist();
+    elif mode == "files-not-symlinks":
+        check_files_not_symlinks();
     else:
         utils.warn("unknown mode '%s'" % (mode));
         usage(1);