]> git.phdru.name Git - bookmarks_db.git/blob - check_dups.py
Log dups either to the logfile or to stdout but not to both.
[bookmarks_db.git] / check_dups.py
1 #! /usr/bin/env python
2 """
3    Check duplicate URLs in the bookmarks database
4
5    Written by BroytMann. Copyright (C) 2000-2007 PhiloSoft Design
6 """
7
8 import sys
9
10
11 log_file = None
12
13 def report_dup(href, object_no):
14    s = "Duplicate URL: %s (first at rec. %d)" % (href, object_no)
15
16    if log_file:
17       log_file.write("%s\n" % s)
18    else:
19       print s
20
21
22 def run():
23    from getopt import getopt
24    optlist, args = getopt(sys.argv[1:], "sl:")
25
26    report_stats = 1
27    global log_file
28    log_filename = None
29
30    for _opt, _arg in optlist:
31       if _opt == '-s':
32          report_stats = 0
33       if _opt == '-l':
34          log_filename = _arg
35    try:
36       del _opt, _arg
37    except NameError:
38       pass
39
40    if report_stats:
41       print "BroytMann check_dups, Copyright (C) 2000-2007 PhiloSoft Design"
42
43    if args:
44       sys.stderr.write("check_urls: too many arguments\n")
45       sys.stderr.write("Usage: check_urls [-s] [-l logfile]\n")
46       sys.exit(1)
47
48    if log_filename:
49       log_file = open(log_filename, 'w')
50
51    from storage import storage
52    storage = storage()
53
54    if report_stats:
55       sys.stdout.write("Loading %s: " % storage.filename)
56       sys.stdout.flush()
57
58    root_folder = storage.load()
59    from bkmk_objects import make_linear
60    make_linear(root_folder)
61    objects = len(root_folder.linear)
62
63    if report_stats:
64       print "Ok"
65
66
67    dup_dict = {}
68
69    for object_no in range(objects):
70       object = root_folder.linear[object_no]
71
72       if object.isBookmark:
73          href = object.href
74          if dup_dict.has_key(href):
75             report_dup(href, dup_dict[href])
76          else:
77             dup_dict[href] = object_no
78
79
80    if log_filename:
81       log_file.close()
82
83    if report_stats:
84       print "Ok"
85       print objects, "objects passed"
86
87
88 if __name__ == '__main__':
89    run()