Changeset 103 in tailor
- Timestamp:
- 07/17/04 03:04:43 (9 years ago)
- Hash name:
- 20040717010443-de980-014ad4d864952411584d8404bb31f04e36cf7e11
- Location:
- vcpx
- Files:
-
- 1 added
- 2 edited
-
darcs.py (modified) (3 diffs)
-
tests/__init__.py (modified) (1 diff)
-
tests/darcs.py (added)
Legend:
- Unmodified
- Added
- Removed
-
vcpx/darcs.py
r102 r103 81 81 82 82 83 def changesets_from_darcschanges(changes): 84 from xml.sax import parseString 85 from xml.sax.handler import ContentHandler 86 from changes import ChangesetEntry, Changeset 87 from datetime import datetime 88 89 class DarcsXMLChangesHandler(ContentHandler): 90 def __init__(self): 91 self.changesets = [] 92 self.current = None 93 self.current_field = [] 94 95 def startElement(self, name, attributes): 96 if name == 'patch': 97 self.current = {} 98 self.current['author'] = attributes['author'] 99 date = attributes['date'] 100 # 20040619130027 101 y = int(date[:4]) 102 m = int(date[4:6]) 103 d = int(date[6:8]) 104 hh = int(date[8:10]) 105 mm = int(date[10:12]) 106 ss = int(date[12:14]) 107 timestamp = datetime(y, m, d, hh, mm, ss) 108 self.current['date'] = timestamp 109 self.current['comment'] = '' 110 self.current['entries'] = [] 111 elif name in ['name', 'comment', 112 'add_file', 'add_directory', 113 'modify_file', 'remove_file']: 114 self.current_field = [] 115 elif name == 'move': 116 self.old_name = attributes['from'] 117 self.new_name = attributes['to'] 118 119 def endElement(self, name): 120 if name == 'patch': 121 # Sort the paths to make tests easier 122 self.current['entries'].sort() 123 self.changesets.append(Changeset(self.current['name'], 124 self.current['date'], 125 self.current['author'], 126 self.current['comment'], 127 self.current['entries'])) 128 self.current = None 129 elif name in ['name', 'comment']: 130 self.current[name] = ''.join(self.current_field) 131 elif name == 'move': 132 entry = ChangesetEntry(self.new_name) 133 entry.action_kind = entry.RENAMED 134 entry.old_name = self.old_name 135 self.current['entries'].append(entry) 136 elif name in ['add_file', 'add_directory', 137 'modify_file', 'remove_file']: 138 entry = ChangesetEntry(''.join(self.current_field)) 139 entry.action_kind = { 'add_file': entry.ADDED, 140 'add_directory': entry.ADDED, 141 'modify_file': entry.UPDATED, 142 'remove_file': entry.DELETED, 143 'rename_file': entry.RENAMED 144 }[name] 145 146 self.current['entries'].append(entry) 147 148 def characters(self, data): 149 self.current_field.append(data) 150 151 handler = DarcsXMLChangesHandler() 152 parseString(changes.getvalue(), handler) 153 154 changesets = handler.changesets 155 156 # sort changeset by date 157 changesets.sort(lambda x, y: cmp(x.date, y.date)) 158 159 return changesets 160 161 83 162 class DarcsWorkingDir(UpdatableSourceWorkingDir,SyncronizableTargetWorkingDir): 84 163 """ … … 109 188 changes = c(output=True, patch=sincerev) 110 189 111 changesets = self.__parseDarcsChanges(changes) 112 113 # sort changeset by date 114 changesets.sort(lambda x, y: cmp(x.date, y.date)) 190 changesets = changesets_from_darcschanges(changes) 115 191 116 192 return changesets 117 118 def __parseDarcsChanges(self, changes): 119 from xml.sax import parseString 120 from xml.sax.handler import ContentHandler 121 from changes import ChangesetEntry, Changeset 122 from datetime import datetime 123 124 class DarcsXMLChangesHandler(ContentHandler): 125 def __init__(self): 126 self.changesets = [] 127 self.current = None 128 self.current_field = [] 129 130 def startElement(self, name, attributes): 131 if name == 'patch': 132 self.current = {} 133 self.current['author'] = attributes['author'] 134 date = attributes['date'] 135 # 20040619130027 136 y = int(date[:4]) 137 m = int(date[4:6]) 138 d = int(date[6:8]) 139 hh = int(date[8:10]) 140 mm = int(date[10:12]) 141 ss = int(date[12:14]) 142 timestamp = datetime(y, m, d, hh, mm, ss) 143 self.current['date'] = timestamp 144 self.current['comment'] = '' 145 self.current['entries'] = [] 146 elif name in ['name', 'comment', 147 'add_file', 'add_directory', 148 'modify_file', 'remove_file']: 149 self.current_field = [] 150 elif name == 'path': 151 self.current_field = [] 152 if attributes.has_key('copyfrom-path'): 153 self.current_path_action = ( 154 attributes['action'], 155 attributes['copyfrom-path'][1:], # make it relative 156 attributes['copyfrom-rev']) 157 else: 158 self.current_path_action = attributes['action'] 159 elif name == 'move': 160 self.old_name = attributes['from'] 161 self.new_name = attributes['to'] 162 163 def endElement(self, name): 164 if name == 'patch': 165 # Sort the paths to make tests easier 166 self.current['entries'].sort() 167 self.changesets.append(Changeset(self.current['name'], 168 self.current['date'], 169 self.current['author'], 170 self.current['comment'], 171 self.current['entries'])) 172 self.current = None 173 elif name in ['name', 'comment']: 174 self.current[name] = ''.join(self.current_field) 175 elif name == 'move': 176 entry = ChangesetEntry(self.new_name) 177 entry.action_kind = entry.RENAMED 178 entry.old_name = self.old_name 179 self.current['entries'].append(entry) 180 elif name in ['add_file', 'add_directory', 181 'modify_file', 'remove_file']: 182 entry = ChangesetEntry(''.join(self.current_field)) 183 entry.action_kind = { 'add_file': entry.ADDED, 184 'add_directory': entry.ADDED, 185 'modify_file': entry.UPDATED, 186 'remove_file': entry.DELETED, 187 'rename_file': entry.RENAMED 188 }[name] 189 190 self.current['entries'].append(entry) 191 192 def characters(self, data): 193 self.current_field.append(data) 194 195 handler = DarcsXMLChangesHandler() 196 parseString(changes.getvalue(), handler) 197 return handler.changesets 198 193 199 194 def _applyChangeset(self, root, changeset, logger=None): 200 195 """ … … 225 220 c = DarcsLastChange(working_dir=wdir) 226 221 changes = c(output=True) 227 last = self.__parseDarcsChanges(c(output=True))222 last = changesets_from_darcschanges(c(output=True)) 228 223 229 224 return last[0].revision -
vcpx/tests/__init__.py
r73 r103 8 8 from cvsps import * 9 9 from cvs import * 10 from darcs import * 10 11 11 12 SystemCommand.VERBOSE = False
Note: See TracChangeset
for help on using the changeset viewer.
