本文整理汇总了Python中MoinMoin.PageEditor.PageEditor.get_real_rev方法的典型用法代码示例。如果您正苦于以下问题:Python PageEditor.get_real_rev方法的具体用法?Python PageEditor.get_real_rev怎么用?Python PageEditor.get_real_rev使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MoinMoin.PageEditor.PageEditor
的用法示例。
在下文中一共展示了PageEditor.get_real_rev方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: xmlrpc_mergeDiff
# 需要导入模块: from MoinMoin.PageEditor import PageEditor [as 别名]
# 或者: from MoinMoin.PageEditor.PageEditor import get_real_rev [as 别名]
def xmlrpc_mergeDiff(self, pagename, diff, local_rev, delta_remote_rev, last_remote_rev, interwiki_name, normalised_name):
"""
Merges a diff sent by the remote machine and returns the number of the new revision.
Additionally, this method tags the new revision.
@param pagename: The pagename that is currently dealt with.
@param diff: The diff that can be applied to the version specified by delta_remote_rev.
If it is None, the page is deleted.
@param local_rev: The revno of the page on the other wiki system, used for the tag.
@param delta_remote_rev: The revno that the diff is taken against.
@param last_remote_rev: The last revno of the page `pagename` that is known by the other wiki site.
@param interwiki_name: Used to build the interwiki tag.
@param normalised_name: The normalised pagename that is common to both wikis.
@return: Returns the current revision number after the merge was done. Or one of the following errors:
* "SUCCESS" - the page could be merged and tagged successfully.
* "NOT_EXIST" - item does not exist and there was not any content supplied.
* "LASTREV_INVALID" - the page was changed and the revision got invalid
* "INTERNAL_ERROR" - there was an internal error
* "NOT_ALLOWED" - you are not allowed to do the merge operation on the page
"""
from MoinMoin.util.bdiff import decompress, patch
from MoinMoin.wikisync import TagStore, BOTH
from MoinMoin.packages import unpackLine
LASTREV_INVALID = xmlrpclib.Fault("LASTREV_INVALID", "The page was changed")
pagename = self._instr(pagename)
comment = u"Remote Merge - %r" % unpackLine(interwiki_name)[-1]
# User may read page?
if not self.request.user.may.read(pagename) or not self.request.user.may.write(pagename):
return xmlrpclib.Fault("NOT_ALLOWED", "You are not allowed to write to this page.")
# XXX add locking here!
# current version of the page
currentpage = PageEditor(self.request, pagename, do_editor_backup=0)
if last_remote_rev is not None and currentpage.get_real_rev() != last_remote_rev:
return LASTREV_INVALID
if not currentpage.exists() and diff is None:
return xmlrpclib.Fault("NOT_EXIST", "The page does not exist and no diff was supplied.")
if diff is None: # delete the page
try:
currentpage.deletePage(comment)
except PageEditor.AccessDenied, (msg, ):
return xmlrpclib.Fault("NOT_ALLOWED", msg)
return currentpage.get_real_rev()
示例2: run
# 需要导入模块: from MoinMoin.PageEditor import PageEditor [as 别名]
# 或者: from MoinMoin.PageEditor.PageEditor import get_real_rev [as 别名]
#.........这里部分代码省略.........
and (remote_rev is None or is_remote_conflict)):
self.log_status(ActionClass.WARN, _("Skipped page %s because of a locally or remotely unresolved conflict."), (local_pagename, ))
return
if remote_rev is None and direction == BOTH:
self.log_status(ActionClass.INFO, _("This is the first synchronisation between the local and the remote wiki for the page %s."), (sp.name, ))
# calculate remote page contents from diff
if sp.remote_deleted:
remote_contents = ""
elif diff is None:
remote_contents = old_contents
else:
remote_contents = patch(patch_base_contents, decompress(diff))
if diff is None: # only a local change
if debug:
self.log_status(ActionClass.INFO, raw_suffix="Only local changes for %r" % sp.name)
merged_text_raw = current_page.get_raw_body_str()
if sp.local_mime_type == MIMETYPE_MOIN:
merged_text = merged_text_raw.decode("utf-8")
elif local_rev == sp.local_rev:
if debug:
self.log_status(ActionClass.INFO, raw_suffix="Only remote changes for %r" % sp.name)
merged_text_raw = remote_contents
if sp.local_mime_type == MIMETYPE_MOIN:
merged_text = merged_text_raw.decode("utf-8")
else:
# this is guaranteed by a check above
assert sp.local_mime_type == MIMETYPE_MOIN
remote_contents_unicode = remote_contents.decode("utf-8")
# here, the actual 3-way merge happens
merged_text = diff3.text_merge(old_contents.decode("utf-8"), remote_contents_unicode, current_page.get_raw_body(), 1, *conflict_markers) # YYY direct access
if debug:
self.log_status(ActionClass.INFO, raw_suffix="Merging %r, %r and %r into %r" % (old_contents.decode("utf-8"), remote_contents_unicode, current_page.get_raw_body(), merged_text))
merged_text_raw = merged_text.encode("utf-8")
# generate binary diff
diff = textdiff(remote_contents, merged_text_raw)
if debug:
self.log_status(ActionClass.INFO, raw_suffix="Diff against %r" % remote_contents)
# XXX upgrade to write lock
try:
local_change_done = True
current_page.saveText(merged_text, sp.local_rev or 0, comment=comment) # YYY direct access
except PageEditor.Unchanged:
local_change_done = False
except PageEditor.EditConflict:
local_change_done = False
assert False, "You stumbled on a problem with the current storage system - I cannot lock pages"
new_local_rev = current_page.get_real_rev() # YYY direct access
def rollback_local_change(): # YYY direct local access
comment = u"Wikisync rollback"
rev = new_local_rev - 1
revstr = '%08d' % rev
oldpg = Page(self.request, sp.local_name, rev=rev)
pg = PageEditor(self.request, sp.local_name)
if not oldpg.exists():
pg.deletePage(comment)
else:
try:
savemsg = pg.saveText(oldpg.get_raw_body(), 0, comment=comment, extra=revstr, action="SAVE/REVERT")
except PageEditor.Unchanged:
pass
return sp.local_name
if local_change_done:
self.register_rollback(rollback_local_change)
if direction == BOTH:
yield remote.merge_diff_pre(sp.remote_name, compress(diff), new_local_rev, current_remote_rev, current_remote_rev, local_full_iwid, sp.name)
try:
very_current_remote_rev = remote.merge_diff_post(yielder.fetch_result())
except NotAllowedException:
self.log_status(ActionClass.ERROR, _("The page %s could not be merged because you are not allowed to modify the page in the remote wiki."), (sp.name, ))
return
else:
very_current_remote_rev = current_remote_rev
if local_change_done:
self.remove_rollback(rollback_local_change)
# this is needed at least for direction both and cgi sync to standalone for immutable pages on both
# servers. It is not needed for the opposite direction
try:
tags.add(remote_wiki=remote_full_iwid, remote_rev=very_current_remote_rev, current_rev=new_local_rev, direction=direction, normalised_name=sp.name)
except:
self.log_status(ActionClass.ERROR, _("The page %s could not be merged because you are not allowed to modify the page in the remote wiki."), (sp.name, ))
return
if sp.local_mime_type != MIMETYPE_MOIN or not wikiutil.containsConflictMarker(merged_text):
self.log_status(ActionClass.INFO, _("Page %s successfully merged."), (sp.name, ))
elif is_remote_conflict:
self.log_status(ActionClass.WARN, _("Page %s contains conflicts that were introduced on the remote side."), (sp.name, ))
else:
self.log_status(ActionClass.WARN, _("Page %s merged with conflicts."), (sp.name, ))