|
@@ -0,0 +1,82 @@
|
|
|
+#!/usr/bin/python3
|
|
|
+
|
|
|
+""" Maintenance up the database used by dirnotes and c_dirnotes
|
|
|
+- view the history of file comments
|
|
|
+- delete the history of file comments
|
|
|
+"""
|
|
|
+
|
|
|
+import sqlite3, os, sys
|
|
|
+import logging
|
|
|
+VERSION = "0.1"
|
|
|
+
|
|
|
+dbname = "~/.dirnotes.db"
|
|
|
+dbname = os.path.expanduser(dbname)
|
|
|
+
|
|
|
+def main(summary, view, delete):
|
|
|
+ try:
|
|
|
+ d = sqlite3.connect(dbname)
|
|
|
+ except sqlite3.OperationalError:
|
|
|
+ print("database not found, or permission-locked; cleanup aborted")
|
|
|
+ return
|
|
|
+ c = d.cursor()
|
|
|
+ if summary:
|
|
|
+ c = d.cursor()
|
|
|
+ total,distinct = c.execute("select count(name),count(distinct name) from dirnotes;").fetchone()
|
|
|
+ print(f"this database has entries for {distinct} files, and {total-distinct} history entries")
|
|
|
+
|
|
|
+ if view or delete:
|
|
|
+ c.execute("select distinct name from dirnotes;")
|
|
|
+ for f in c:
|
|
|
+ # note, f is a tuple of (name,)
|
|
|
+ c1 = d.cursor()
|
|
|
+ if view:
|
|
|
+ history = c1.execute("select comment_date,author,comment from dirnotes where name=? order by comment_date desc",f).fetchall()
|
|
|
+ if len(history)>1:
|
|
|
+ print(f"filename: {f[0]} has a history of comments:")
|
|
|
+ first = True
|
|
|
+ for lin in history:
|
|
|
+ print(f"{'->' if first else ' '} date: {lin[0]} author: {lin[1]}\n comment: {lin[2]}")
|
|
|
+ first = False
|
|
|
+
|
|
|
+ if delete:
|
|
|
+ most_recent = c1.execute("select comment_date from dirnotes where name=? order by comment_date desc",f).fetchone()[0]
|
|
|
+ logging.info(f"working on file: {f} with most-recent-date of {most_recent}")
|
|
|
+ c1.execute("delete from dirnotes where name=? and comment_date <> ?",(f[0],most_recent))
|
|
|
+
|
|
|
+ if delete:
|
|
|
+ total,distinct = c.execute("select count(name),count(distinct name) from dirnotes;").fetchone()
|
|
|
+ print(f"this database has been cleaned to {distinct} files, and {total-distinct} history entries")
|
|
|
+ d.commit()
|
|
|
+ d.close()
|
|
|
+
|
|
|
+
|
|
|
+view = False
|
|
|
+delete = False
|
|
|
+summary = True # default
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ logging.basicConfig(filename="/tmp/dirnotes_clear.log", level=logging.DEBUG)
|
|
|
+ logging.info("starting the db mainenance tool")
|
|
|
+ if len(sys.argv)>1:
|
|
|
+ if "-h" in sys.argv or "--help" in sys.argv:
|
|
|
+ print(f"Usage: {sys.argv[0]} maintenance for the database used by dirnotes & c_dirnotes")
|
|
|
+ print(" -d delete comment history")
|
|
|
+ print(" -s view comment summary")
|
|
|
+ print(" -v view comment history")
|
|
|
+ sys.exit(1)
|
|
|
+ if "-v" in sys.argv:
|
|
|
+ view = True
|
|
|
+ if "-s" in sys.argv:
|
|
|
+ summary = True
|
|
|
+ if "-d" in sys.argv:
|
|
|
+ delete = True
|
|
|
+ if delete:
|
|
|
+ print("Cleanup of the dirnotes database located at ~/.dirnotes.db")
|
|
|
+ c = input("Proceed? (Y/N)")
|
|
|
+ if c in ("yY"):
|
|
|
+ main(summary, view, delete)
|
|
|
+ else:
|
|
|
+ print("nothing done")
|
|
|
+ else:
|
|
|
+ main(summary, view, delete)
|
|
|
+
|