comparison mercurial/scmutil.py @ 34661:eb586ed5d8ce

transaction-summary: show the range of new revisions upon pull/unbundle (BC) Upon pull or unbundle, we display a message with the range of new revisions fetched. This revision range could readily be used after a pull to look out what's new with 'hg log'. The algorithm takes care of filtering "obsolete" revisions that might be present in transaction's "changes" but should not be displayed to the end user.
author Denis Laxalde <denis.laxalde@logilab.fr>
date Thu, 12 Oct 2017 09:39:50 +0200
parents 75979c8d4572
children 0c06875e7755
comparison
equal deleted inserted replaced
34660:d00ec62d156f 34661:eb586ed5d8ce
1198 'push', 1198 'push',
1199 'serve', 1199 'serve',
1200 'unbundle', 1200 'unbundle',
1201 ] 1201 ]
1202 1202
1203 _reportnewcssource = [
1204 'pull',
1205 'unbundle',
1206 ]
1207
1203 def registersummarycallback(repo, otr, txnname=''): 1208 def registersummarycallback(repo, otr, txnname=''):
1204 """register a callback to issue a summary after the transaction is closed 1209 """register a callback to issue a summary after the transaction is closed
1205 """ 1210 """
1206 def txmatch(sources): 1211 def txmatch(sources):
1207 return any(txnname.startswith(source) for source in sources) 1212 return any(txnname.startswith(source) for source in sources)
1224 def reportobsoleted(repo, tr): 1229 def reportobsoleted(repo, tr):
1225 obsoleted = obsutil.getobsoleted(repo, tr) 1230 obsoleted = obsutil.getobsoleted(repo, tr)
1226 if obsoleted: 1231 if obsoleted:
1227 repo.ui.status(_('obsoleted %i changesets\n') 1232 repo.ui.status(_('obsoleted %i changesets\n')
1228 % len(obsoleted)) 1233 % len(obsoleted))
1234
1235 if txmatch(_reportnewcssource):
1236 @reportsummary
1237 def reportnewcs(repo, tr):
1238 """Report the range of new revisions pulled/unbundled."""
1239 newrevs = list(tr.changes.get('revs', set()))
1240 if not newrevs:
1241 return
1242
1243 # Compute the bounds of new revisions' range, excluding obsoletes.
1244 unfi = repo.unfiltered()
1245 minrev, maxrev = None, None
1246 newrevs.sort()
1247 for r in newrevs:
1248 if not unfi[r].obsolete():
1249 minrev = repo[r]
1250 break
1251 for r in reversed(newrevs):
1252 if not unfi[r].obsolete():
1253 maxrev = repo[r]
1254 break
1255
1256 if minrev is None or maxrev is None:
1257 # Got only obsoletes.
1258 return
1259
1260 if minrev == maxrev:
1261 revrange = minrev
1262 else:
1263 revrange = '%s:%s' % (minrev, maxrev)
1264 repo.ui.status(_('new changesets %s\n') % revrange)