1150 median = len(allpclusters[nbcluster//2][1]) |
1150 median = len(allpclusters[nbcluster//2][1]) |
1151 ui.write(' median length: %9i\n' % median) |
1151 ui.write(' median length: %9i\n' % median) |
1152 mean = sum(len(x[1]) for x in allpclusters) // nbcluster |
1152 mean = sum(len(x[1]) for x in allpclusters) // nbcluster |
1153 ui.write(' mean length: %9i\n' % mean) |
1153 ui.write(' mean length: %9i\n' % mean) |
1154 |
1154 |
|
1155 def handlenotrouble(ui, repo, startnode, dryrunopt): |
|
1156 if repo['.'].obsolete(): |
|
1157 displayer = cmdutil.show_changeset( |
|
1158 ui, repo, {'template': shorttemplate}) |
|
1159 successors = set() |
|
1160 |
|
1161 for successorsset in obsolete.successorssets(repo, repo['.'].node()): |
|
1162 for nodeid in successorsset: |
|
1163 successors.add(repo[nodeid]) |
|
1164 |
|
1165 if not successors: |
|
1166 ui.warn(_('parent is obsolete without successors; ' + |
|
1167 'likely killed\n')) |
|
1168 return 2 |
|
1169 |
|
1170 elif len(successors) > 1: |
|
1171 ui.warn(_('parent is obsolete with multiple successors:\n')) |
|
1172 |
|
1173 for ctx in sorted(successors, key=lambda ctx: ctx.rev()): |
|
1174 displayer.show(ctx) |
|
1175 |
|
1176 return 2 |
|
1177 |
|
1178 else: |
|
1179 ctx = successors.pop() |
|
1180 |
|
1181 ui.status(_('update:')) |
|
1182 if not ui.quiet: |
|
1183 displayer.show(ctx) |
|
1184 |
|
1185 if dryrunopt: |
|
1186 return 0 |
|
1187 else: |
|
1188 res = hg.update(repo, ctx.rev()) |
|
1189 if ctx != startnode: |
|
1190 ui.status(_('working directory is now at %s\n') % ctx) |
|
1191 return res |
|
1192 |
|
1193 troubled = repo.revs('troubled()') |
|
1194 if troubled: |
|
1195 ui.write_err(_('nothing to evolve here\n')) |
|
1196 ui.status(_('(%i troubled changesets, do you want --any ?)\n') |
|
1197 % len(troubled)) |
|
1198 return 2 |
|
1199 else: |
|
1200 ui.write_err(_('no troubled changesets\n')) |
|
1201 return 1 |
1155 @command('^evolve|stabilize|solve', |
1202 @command('^evolve|stabilize|solve', |
1156 [('n', 'dry-run', False, |
1203 [('n', 'dry-run', False, |
1157 'do not perform actions, just print what would be done'), |
1204 'do not perform actions, just print what would be done'), |
1158 ('', 'confirm', False, |
1205 ('', 'confirm', False, |
1159 'ask for confirmation before performing the action'), |
1206 'ask for confirmation before performing the action'), |
1205 graftcmd = commands.table['graft'][0] |
1252 graftcmd = commands.table['graft'][0] |
1206 return graftcmd(ui, repo, old_obsolete=True, **{'continue': True}) |
1253 return graftcmd(ui, repo, old_obsolete=True, **{'continue': True}) |
1207 |
1254 |
1208 tro = _picknexttroubled(ui, repo, anyopt or allopt) |
1255 tro = _picknexttroubled(ui, repo, anyopt or allopt) |
1209 if tro is None: |
1256 if tro is None: |
1210 if repo['.'].obsolete(): |
1257 return handlenotrouble(ui, repo, startnode, dryrunopt) |
1211 displayer = cmdutil.show_changeset( |
|
1212 ui, repo, {'template': shorttemplate}) |
|
1213 successors = set() |
|
1214 |
|
1215 for successorsset in obsolete.successorssets(repo, repo['.'].node()): |
|
1216 for nodeid in successorsset: |
|
1217 successors.add(repo[nodeid]) |
|
1218 |
|
1219 if not successors: |
|
1220 ui.warn(_('parent is obsolete without successors; ' + |
|
1221 'likely killed\n')) |
|
1222 return 2 |
|
1223 |
|
1224 elif len(successors) > 1: |
|
1225 ui.warn(_('parent is obsolete with multiple successors:\n')) |
|
1226 |
|
1227 for ctx in sorted(successors, key=lambda ctx: ctx.rev()): |
|
1228 displayer.show(ctx) |
|
1229 |
|
1230 return 2 |
|
1231 |
|
1232 else: |
|
1233 ctx = successors.pop() |
|
1234 |
|
1235 ui.status(_('update:')) |
|
1236 if not ui.quiet: |
|
1237 displayer.show(ctx) |
|
1238 |
|
1239 if dryrunopt: |
|
1240 return 0 |
|
1241 else: |
|
1242 res = hg.update(repo, ctx.rev()) |
|
1243 if ctx != startnode: |
|
1244 ui.status(_('working directory is now at %s\n') % ctx) |
|
1245 return res |
|
1246 |
|
1247 troubled = repo.revs('troubled()') |
|
1248 if troubled: |
|
1249 ui.write_err(_('nothing to evolve here\n')) |
|
1250 ui.status(_('(%i troubled changesets, do you want --any ?)\n') |
|
1251 % len(troubled)) |
|
1252 return 2 |
|
1253 else: |
|
1254 ui.write_err(_('no troubled changesets\n')) |
|
1255 return 1 |
|
1256 |
1258 |
1257 def progresscb(): |
1259 def progresscb(): |
1258 if allopt: |
1260 if allopt: |
1259 ui.progress('evolve', seen, unit='changesets', total=count) |
1261 ui.progress('evolve', seen, unit='changesets', total=count) |
|
1262 |
1260 seen = 1 |
1263 seen = 1 |
1261 count = allopt and _counttroubled(ui, repo) or 1 |
1264 count = allopt and _counttroubled(ui, repo) or 1 |
1262 |
1265 |
1263 while tro is not None: |
1266 while tro is not None: |
1264 progresscb() |
1267 progresscb() |