~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to scripts/diffservice

  • Committer: wagrant
  • Date: 2008-07-21 07:03:14 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:922
userdb: Add a migration for the change before we moved to migrations.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
# run from the trampoline by the Diff application.
26
26
 
27
27
from common import cgirequest
28
 
from cgi import parse_qs
 
28
import common.svn
29
29
import cgi
30
 
from os import path
 
30
import os.path
31
31
import pysvn
32
32
import re
33
33
 
34
34
def htmlfy_diff(difftext):
35
35
    """Adds HTML markup to a udiff string"""
36
36
    output = cgi.escape(difftext)
37
 
    match_file = re.compile(r'^([\+\-]{3})\s(\S+)\s\((.+)\)$',re.MULTILINE)
38
 
    match_range = re.compile(r'^\@\@ (.*) \@\@$',re.MULTILINE)
39
 
    match_add = re.compile(r'^\+(.*)$',re.MULTILINE)
40
 
    match_sub = re.compile(r'^\-(.*)$',re.MULTILINE)
41
 
    match_special = re.compile(r'^\\(.*)$',re.MULTILINE)
42
 
    output = match_file.sub(
43
 
        r'<span class="diff-files">\1 \2 <em>(\3)</em></span>', output)
44
 
    output = match_range.sub(
45
 
        r'<span class="diff-range">@@ \1 @@</span>', output)
46
 
    output = match_add.sub(
47
 
        r'<span class="diff-add">+\1</span>', output)
48
 
    output = match_sub.sub(
49
 
        r'<span class="diff-sub">-\1</span>', output)
50
 
    output = match_special.sub(
51
 
        r'<span class="diff-special">\\\1</span>', output)
 
37
    subs = {
 
38
     r'^([\+\-]{3})\s(\S+)\s\((.+)\)$':
 
39
         r'<span class="diff-files">\1 \2 <em>(\3)</em></span>',
 
40
     r'^\@\@ (.*) \@\@$':
 
41
         r'<span class="diff-range">@@ \1 @@</span>',
 
42
     r'^\+(.*)$':
 
43
         r'<span class="diff-add">+\1</span>',
 
44
     r'^\-(.*)$':
 
45
         r'<span class="diff-sub">-\1</span>',
 
46
     r'^\\(.*)$':
 
47
         r'<span class="diff-special">\\\1</span>'
 
48
    }
 
49
 
 
50
    for match in subs:
 
51
        output = re.compile(match, re.MULTILINE).sub(subs[match], output)
 
52
 
52
53
    return output
53
54
 
54
 
def get_revision(r_str):
55
 
    """ Returns a Revison object for pysvn from a r query string """
56
 
    if r_str == "HEAD":
57
 
        return pysvn.Revision( pysvn.opt_revision_kind.head )
58
 
    elif r_str == "WORKING":
59
 
        return pysvn.Revision( pysvn.opt_revision_kind.working )
60
 
    elif r_str == "BASE":
61
 
        return pysvn.Revision( pysvn.opt_revision_kind.base )
62
 
    else:
63
 
        try:
64
 
            r = int(r_str)
65
 
            return pysvn.Revision( pysvn.opt_revision_kind.number, r)
66
 
        except:
67
 
            return None
68
 
        
69
55
# Use a CGIRequest object to make the CGI environment look like the normal
70
56
# IVLE handler environment.
71
57
 
72
58
req = cgirequest.CGIRequest()
 
59
req.install_error_handler()
73
60
req.content_type = "text/html"
74
61
 
75
62
# Beginning of the page
76
63
req.write('<div id="ivle_padding">\n')
77
64
req.write('<h1>Diff</h1>\n')
78
65
 
79
 
# Work out the revisions from query
 
66
# Default revisions
 
67
revs = [pysvn.Revision(x) for x in [pysvn.opt_revision_kind.base,
 
68
                                    pysvn.opt_revision_kind.working]]
 
69
# Override revisions from query string
80
70
fields = req.get_fieldstorage()
81
71
field_r = fields.getlist("r")
82
 
# Default revisions
83
 
rev1=pysvn.Revision( pysvn.opt_revision_kind.base )
84
 
rev2=pysvn.Revision( pysvn.opt_revision_kind.working )
85
 
# Override revisions from query string
86
 
if len(field_r) >= 1:
87
 
    r1 = get_revision(field_r[0])
88
 
    if r1 != None:
89
 
        rev1 = r1
90
 
    if len(field_r) >= 2:
91
 
        r2 = get_revision(field_r[1])
92
 
        if r2 != None:
93
 
            rev2 = r2
 
72
for ri in range(len(field_r)):
 
73
    r = common.svn.revision_from_string(field_r[ri])
 
74
    if r is not None:
 
75
        revs[ri] = r
94
76
 
95
77
# Attempt to get the diff for these revisons
96
78
try:
97
79
    svnclient = pysvn.Client()
98
80
    diff = svnclient.diff
99
81
    diff_text = diff( '/tmp/svndiff',
100
 
        path.join('/home/', req.path),
101
 
        revision1=rev1,
102
 
        #revision1=pysvn.Revision( pysvn.opt_revision_kind.base ),
103
 
        #url_or_path2=url_or_path,
104
 
        revision2=rev2,
105
 
        #revision2=pysvn.Revision( opt_revision_kind.working ),
106
 
        #recurse=True,
107
 
        #ignore_ancestry=False,
108
 
        #diff_deleted=True,
109
 
        #ignore_content_type=False,
110
 
        #header_encoding="",
111
 
        #diff_options=[]
 
82
        os.path.join('/home', req.path),
 
83
        revision1=revs[0],
 
84
        revision2=revs[1]
112
85
    )
113
86
 
114
87
    # Split up the udiff into individual files
127
100
 
128
101
except pysvn._pysvn_2_5.ClientError, e:
129
102
    req.write('<p><b>Error:</b></p>\n')
130
 
    req.write('<pre class="diff">%s</pre>\n' % cgi.escape(e))
 
103
    req.write('<pre class="diff">%s</pre>\n' % cgi.escape(str(e)))
131
104
 
132
105
req.write('</div>\n')