paul@17 | 1 | #!/usr/bin/env python |
paul@17 | 2 | |
paul@17 | 3 | import sys, os |
paul@17 | 4 | |
paul@17 | 5 | wiki_dir, archive_dir = sys.argv[1:3] |
paul@17 | 6 | dry_run = ("-n" in sys.argv) |
paul@17 | 7 | |
paul@17 | 8 | pages = os.path.join(wiki_dir, "wiki", "data", "pages") |
paul@17 | 9 | users = os.path.join(wiki_dir, "wiki", "data", "user") |
paul@17 | 10 | |
paul@17 | 11 | # Make the archive's page directory. |
paul@17 | 12 | |
paul@17 | 13 | archive_pages = os.path.join(archive_dir, "wiki", "data", "pages") |
paul@17 | 14 | if not dry_run and not os.path.exists(archive_pages): |
paul@17 | 15 | os.makedirs(archive_pages) |
paul@17 | 16 | |
paul@17 | 17 | archive_users = os.path.join(archive_dir, "wiki", "data", "user") |
paul@17 | 18 | if not dry_run and not os.path.exists(archive_users): |
paul@17 | 19 | os.makedirs(archive_users) |
paul@17 | 20 | |
paul@17 | 21 | # Copy user details. |
paul@17 | 22 | |
paul@17 | 23 | print "Copying users..." |
paul@17 | 24 | if not dry_run: |
paul@17 | 25 | cmd = "cp %s %s" % (os.path.join(users, "*"), archive_users) |
paul@17 | 26 | print cmd |
paul@17 | 27 | os.system(cmd) |
paul@17 | 28 | |
paul@17 | 29 | # Find active Wiki pages. |
paul@17 | 30 | |
paul@17 | 31 | for page in os.listdir(pages): |
paul@17 | 32 | page_dir = os.path.join(pages, page) |
paul@17 | 33 | |
paul@17 | 34 | if os.path.isdir(page_dir) and "current" in os.listdir(page_dir): |
paul@17 | 35 | |
paul@17 | 36 | f = open(os.path.join(page_dir, "current")) |
paul@17 | 37 | try: |
paul@17 | 38 | current = f.read().strip() |
paul@17 | 39 | finally: |
paul@17 | 40 | f.close() |
paul@17 | 41 | |
paul@17 | 42 | archive_page_dir = os.path.join(archive_pages, page) |
paul@17 | 43 | archive_page_revisions = os.path.join(archive_page_dir, "revisions") |
paul@17 | 44 | page_revisions = os.path.join(page_dir, "revisions") |
paul@17 | 45 | |
paul@17 | 46 | if current not in os.listdir(page_revisions): |
paul@17 | 47 | continue |
paul@17 | 48 | |
paul@17 | 49 | print "Archiving", page |
paul@17 | 50 | print "Revision", current |
paul@17 | 51 | |
paul@17 | 52 | if not dry_run: |
paul@17 | 53 | if not os.path.exists(archive_page_revisions): |
paul@17 | 54 | os.makedirs(archive_page_revisions) |
paul@17 | 55 | |
paul@17 | 56 | f = open(os.path.join(archive_page_dir, "current"), "w") |
paul@17 | 57 | try: |
paul@17 | 58 | f.write("00000001") |
paul@17 | 59 | finally: |
paul@17 | 60 | f.close() |
paul@17 | 61 | |
paul@17 | 62 | cmd = "cp %s %s" % (os.path.join(page_revisions, current), os.path.join(archive_page_revisions, "00000001")) |
paul@17 | 63 | print cmd |
paul@17 | 64 | if not dry_run: |
paul@17 | 65 | os.system(cmd) |
paul@17 | 66 | |
paul@17 | 67 | attachments_dir = os.path.join(page_dir, "attachments") |
paul@17 | 68 | if os.path.exists(attachments_dir): |
paul@17 | 69 | print "Archiving attachments..." |
paul@17 | 70 | |
paul@17 | 71 | archive_attachments_dir = os.path.join(archive_page_dir, "attachments") |
paul@17 | 72 | if not dry_run and not os.path.exists(archive_attachments_dir): |
paul@17 | 73 | os.mkdir(archive_attachments_dir) |
paul@17 | 74 | |
paul@17 | 75 | cmd = "cp %s %s" % (os.path.join(attachments_dir, "*"), archive_attachments_dir) |
paul@17 | 76 | print cmd |
paul@17 | 77 | if not dry_run: |
paul@17 | 78 | os.system(cmd) |
paul@17 | 79 | |
paul@17 | 80 | print |
paul@17 | 81 | |
paul@17 | 82 | print "Now run the following, if adding to a live Wiki:" |
paul@17 | 83 | print "chown -R www-data: %s/www %s/wiki" % (archive_dir, archive_dir) |
paul@17 | 84 | |
paul@17 | 85 | # vim: tabstop=4 expandtab shiftwidth=4 |