192 for f in d: |
192 for f in d: |
193 to = repo.file(f).read(mmap[f]) |
193 to = repo.file(f).read(mmap[f]) |
194 tn = None |
194 tn = None |
195 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r)) |
195 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r)) |
196 |
196 |
197 def show_changeset(ui, repo, rev=0, changenode=None, filelog=None): |
197 def show_changeset(ui, repo, rev=0, changenode=None, filelog=None, brinfo=None): |
198 """show a single changeset or file revision""" |
198 """show a single changeset or file revision""" |
199 changelog = repo.changelog |
199 changelog = repo.changelog |
200 if filelog: |
200 if filelog: |
201 log = filelog |
201 log = filelog |
202 filerev = rev |
202 filerev = rev |
233 ui.status("tag: %s\n" % tag) |
233 ui.status("tag: %s\n" % tag) |
234 for parent in parents: |
234 for parent in parents: |
235 ui.write("parent: %d:%s\n" % parent) |
235 ui.write("parent: %d:%s\n" % parent) |
236 if filelog: |
236 if filelog: |
237 ui.debug("file rev: %d:%s\n" % (filerev, hg.hex(filenode))) |
237 ui.debug("file rev: %d:%s\n" % (filerev, hg.hex(filenode))) |
|
238 |
|
239 if brinfo and changenode in brinfo: |
|
240 br = brinfo[changenode] |
|
241 ui.write("branch: %s\n" % " ".join(br)) |
238 |
242 |
239 ui.debug("manifest: %d:%s\n" % (repo.manifest.rev(changes[0]), |
243 ui.debug("manifest: %d:%s\n" % (repo.manifest.rev(changes[0]), |
240 hg.hex(changes[0]))) |
244 hg.hex(changes[0]))) |
241 ui.status("user: %s\n" % changes[1]) |
245 ui.status("user: %s\n" % changes[1]) |
242 ui.status("date: %s\n" % time.asctime( |
246 ui.status("date: %s\n" % time.asctime( |
673 if repo.dirstate.state(abs) == 'a': |
677 if repo.dirstate.state(abs) == 'a': |
674 forget.append(abs) |
678 forget.append(abs) |
675 if rel not in q: ui.status('forgetting ', rel, '\n') |
679 if rel not in q: ui.status('forgetting ', rel, '\n') |
676 repo.forget(forget) |
680 repo.forget(forget) |
677 |
681 |
678 def heads(ui, repo): |
682 def heads(ui, repo, **opts): |
679 """show current repository heads""" |
683 """show current repository heads""" |
|
684 heads = repo.changelog.heads() |
|
685 br = None |
|
686 if opts['branches']: |
|
687 br = repo.branchlookup(heads) |
680 for n in repo.changelog.heads(): |
688 for n in repo.changelog.heads(): |
681 show_changeset(ui, repo, changenode=n) |
689 show_changeset(ui, repo, changenode=n, brinfo=br) |
682 |
690 |
683 def identify(ui, repo): |
691 def identify(ui, repo): |
684 """print information about the working copy""" |
692 """print information about the working copy""" |
685 parents = [p for p in repo.dirstate.parents() if p != hg.nullid] |
693 parents = [p for p in repo.dirstate.parents() if p != hg.nullid] |
686 if not parents: |
694 if not parents: |
1148 a change is visible for pull by other users, undoing it locally is |
1156 a change is visible for pull by other users, undoing it locally is |
1149 ineffective. |
1157 ineffective. |
1150 """ |
1158 """ |
1151 repo.undo() |
1159 repo.undo() |
1152 |
1160 |
1153 def update(ui, repo, node=None, merge=False, clean=False): |
1161 def update(ui, repo, node=None, merge=False, clean=False, branch=None): |
1154 '''update or merge working directory |
1162 '''update or merge working directory |
1155 |
1163 |
1156 If there are no outstanding changes in the working directory and |
1164 If there are no outstanding changes in the working directory and |
1157 there is a linear relationship between the current version and the |
1165 there is a linear relationship between the current version and the |
1158 requested version, the result is the requested version. |
1166 requested version, the result is the requested version. |
1161 current working directory and the requested version. Files that |
1169 current working directory and the requested version. Files that |
1162 changed between either parent are marked as changed for the next |
1170 changed between either parent are marked as changed for the next |
1163 commit and a commit must be performed before any further updates |
1171 commit and a commit must be performed before any further updates |
1164 are allowed. |
1172 are allowed. |
1165 ''' |
1173 ''' |
1166 node = node and repo.lookup(node) or repo.changelog.tip() |
1174 if branch: |
|
1175 br = repo.branchlookup(branch=branch) |
|
1176 found = [] |
|
1177 for x in br: |
|
1178 if branch in br[x]: |
|
1179 found.append(x) |
|
1180 if len(found) > 1: |
|
1181 ui.warn("Found multiple heads for %s\n" % branch) |
|
1182 for x in found: |
|
1183 show_changeset(ui, repo, changenode=x, brinfo=br) |
|
1184 return 1 |
|
1185 if len(found) == 1: |
|
1186 node = found[0] |
|
1187 ui.warn("Using head %s for branch %s\n" % (hg.short(node), branch)) |
|
1188 else: |
|
1189 ui.warn("branch %s not found\n" % (branch)) |
|
1190 return 1 |
|
1191 else: |
|
1192 node = node and repo.lookup(node) or repo.changelog.tip() |
1167 return repo.update(node, allow=merge, force=clean) |
1193 return repo.update(node, allow=merge, force=clean) |
1168 |
1194 |
1169 def verify(ui, repo): |
1195 def verify(ui, repo): |
1170 """verify the integrity of the repository""" |
1196 """verify the integrity of the repository""" |
1171 return repo.verify() |
1197 return repo.verify() |
1234 "forget": |
1260 "forget": |
1235 (forget, |
1261 (forget, |
1236 [('I', 'include', [], 'include path in search'), |
1262 [('I', 'include', [], 'include path in search'), |
1237 ('X', 'exclude', [], 'exclude path from search')], |
1263 ('X', 'exclude', [], 'exclude path from search')], |
1238 "hg forget FILE..."), |
1264 "hg forget FILE..."), |
1239 "heads": (heads, [], 'hg heads'), |
1265 "heads": (heads, [('b', 'branches', None, 'find branch info')], 'hg heads'), |
1240 "help": (help_, [], 'hg help [COMMAND]'), |
1266 "help": (help_, [], 'hg help [COMMAND]'), |
1241 "identify|id": (identify, [], 'hg identify'), |
1267 "identify|id": (identify, [], 'hg identify'), |
1242 "import|patch": |
1268 "import|patch": |
1243 (import_, |
1269 (import_, |
1244 [('p', 'strip', 1, 'path strip'), |
1270 [('p', 'strip', 1, 'path strip'), |
1318 "tags": (tags, [], 'hg tags'), |
1344 "tags": (tags, [], 'hg tags'), |
1319 "tip": (tip, [], 'hg tip'), |
1345 "tip": (tip, [], 'hg tip'), |
1320 "undo": (undo, [], 'hg undo'), |
1346 "undo": (undo, [], 'hg undo'), |
1321 "^update|up|checkout|co": |
1347 "^update|up|checkout|co": |
1322 (update, |
1348 (update, |
1323 [('m', 'merge', None, 'allow merging of conflicts'), |
1349 [('b', 'branch', "", 'checkout the head of a specific branch'), |
|
1350 ('m', 'merge', None, 'allow merging of conflicts'), |
1324 ('C', 'clean', None, 'overwrite locally modified files')], |
1351 ('C', 'clean', None, 'overwrite locally modified files')], |
1325 'hg update [-m] [-C] [REV]'), |
1352 'hg update [-m] [-C] [REV]'), |
1326 "verify": (verify, [], 'hg verify'), |
1353 "verify": (verify, [], 'hg verify'), |
1327 "version": (show_version, [], 'hg version'), |
1354 "version": (show_version, [], 'hg version'), |
1328 } |
1355 } |