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