Ticket #8861: t8861-trac_admin_wiki_replace-r8865.diff
| File t8861-trac_admin_wiki_replace-r8865.diff, 4.8 KB (added by mrenzmann@…, 2 years ago) |
|---|
-
trac/admin/console.py
689 689 ('wiki remove <page>', 'Remove wiki page'), 690 690 ('wiki export <page> [file]', 691 691 'Export wiki page to file or stdout'), 692 ('wiki import <page> [file]', 693 'Import wiki page from file or stdin'), 692 ('wiki import <page> [file] [replace]', 693 'Import wiki page from file or stdin, ' 694 'optionally replacing the current version'), 694 695 ('wiki dump <directory>', 695 696 'Export all wiki pages to files named by title'), 696 ('wiki load <directory>', 697 'Import all wiki pages from directory'), 697 ('wiki load <directory> [replace]', 698 'Import all wiki pages from directory, optionally ' 699 'replacing the current version'), 698 700 ('wiki upgrade', 699 701 'Upgrade default wiki pages to current version')] 700 702 … … 725 727 elif arg[0] == 'remove' and len(arg)==2: 726 728 name = arg[1] 727 729 self._do_wiki_remove(name) 728 elif arg[0] == 'import' and len(arg) == 3:730 elif arg[0] == 'import' and len(arg) in [3,4]: 729 731 title = arg[1] 730 732 file = arg[2] 731 self._do_wiki_import(file, title) 733 replace = (len(arg) == 4 and arg[3] == "replace") or False 734 self._do_wiki_import(file, title, replace=replace) 732 735 elif arg[0] == 'export' and len(arg) in [2,3]: 733 736 page = arg[1] 734 737 file = (len(arg) == 3 and arg[2]) or None … … 736 739 elif arg[0] == 'dump' and len(arg) in [1,2]: 737 740 dir = (len(arg) == 2 and arg[1]) or '' 738 741 self._do_wiki_dump(dir) 739 elif arg[0] == 'load' and len(arg) in [1,2]: 740 dir = (len(arg) == 2 and arg[1]) or '' 741 self._do_wiki_load(dir) 742 elif arg[0] == 'load' and len(arg) in [1,2,3]: 743 dir = (len(arg) >= 2 and arg[1]) or '' 744 replace = (len(arg) == 3 and arg[2] == "replace") or False 745 self._do_wiki_load(dir, replace=replace) 742 746 elif arg[0] == 'upgrade' and len(arg) == 1: 743 747 self._do_wiki_load(pkg_resources.resource_filename('trac.wiki', 744 748 'default-pages'), … … 768 772 page.delete() 769 773 770 774 def _do_wiki_import(self, filename, title, cursor=None, 771 create_only=[] ):775 create_only=[], replace=False): 772 776 if not os.path.isfile(filename): 773 777 raise Exception, '%s is not a file' % filename 774 778 … … 788 792 return False 789 793 f.close() 790 794 791 self.db_update("INSERT INTO wiki(version,name,time,author,ipnr,text) " 792 " SELECT 1+COALESCE(max(version),0),%s,%s," 793 " 'trac','127.0.0.1',%s FROM wiki " 794 " WHERE name=%s", 795 cursor, (title, int(time.time()), data, title)) 795 if replace: 796 self.db_update("UPDATE wiki SET text=%s " 797 " WHERE name=%s AND " 798 " version=(SELECT version FROM wiki WHERE name=%s" 799 " ORDER BY version DESC LIMIT 1)", 800 cursor, (data, title, title)) 801 else: 802 self.db_update("INSERT INTO wiki(version,name,time,author,ipnr,text) " 803 " SELECT 1+COALESCE(max(version),0),%s,%s," 804 " 'trac','127.0.0.1',%s FROM wiki " 805 " WHERE name=%s", 806 cursor, (title, int(time.time()), data, title)) 796 807 return True 797 808 798 809 def _do_wiki_export(self, page, filename=''): … … 820 831 printout(_(" %(src)s => %(dst)s", src=p, dst=dst)) 821 832 self._do_wiki_export(p, dst) 822 833 823 def _do_wiki_load(self, dir, cursor=None, ignore=[], create_only=[] ):834 def _do_wiki_load(self, dir, cursor=None, ignore=[], create_only=[], replace=False): 824 835 cons_charset = getattr(sys.stdout, 'encoding', None) or 'utf-8' 825 836 for page in os.listdir(dir): 826 837 if page in ignore: … … 828 839 filename = os.path.join(dir, page) 829 840 page = unicode_unquote(page.encode('utf-8')) 830 841 if os.path.isfile(filename): 831 if self._do_wiki_import(filename, page, cursor, create_only ):842 if self._do_wiki_import(filename, page, cursor, create_only, replace): 832 843 printout(_(" %(page)s imported from %(filename)s", 833 844 filename=filename, page=page)) 834 845
