Mercurial > hg-stable
comparison hgext/histedit.py @ 48213:8ac61257c807
chistedit: move rendercommit() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11637
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Mon, 11 Oct 2021 22:51:58 -0700 |
parents | b6fc7d188f68 |
children | 9006eafa0942 |
comparison
equal
deleted
inserted
replaced
48212:b6fc7d188f68 | 48213:8ac61257c807 |
---|---|
1422 MODE_PATCH: { | 1422 MODE_PATCH: { |
1423 b'line_offset': 0, | 1423 b'line_offset': 0, |
1424 }, | 1424 }, |
1425 } | 1425 } |
1426 | 1426 |
1427 def render_commit(self, win): | |
1428 """Renders the commit window that shows the log of the current selected | |
1429 commit""" | |
1430 pos = self.pos | |
1431 rules = self.rules | |
1432 rule = rules[pos] | |
1433 | |
1434 ctx = rule.ctx | |
1435 win.box() | |
1436 | |
1437 maxy, maxx = win.getmaxyx() | |
1438 length = maxx - 3 | |
1439 | |
1440 line = b"changeset: %d:%s" % (ctx.rev(), ctx.hex()[:12]) | |
1441 win.addstr(1, 1, line[:length]) | |
1442 | |
1443 line = b"user: %s" % ctx.user() | |
1444 win.addstr(2, 1, line[:length]) | |
1445 | |
1446 bms = self.repo.nodebookmarks(ctx.node()) | |
1447 line = b"bookmark: %s" % b' '.join(bms) | |
1448 win.addstr(3, 1, line[:length]) | |
1449 | |
1450 line = b"summary: %s" % (ctx.description().splitlines()[0]) | |
1451 win.addstr(4, 1, line[:length]) | |
1452 | |
1453 line = b"files: " | |
1454 win.addstr(5, 1, line) | |
1455 fnx = 1 + len(line) | |
1456 fnmaxx = length - fnx + 1 | |
1457 y = 5 | |
1458 fnmaxn = maxy - (1 + y) - 1 | |
1459 files = ctx.files() | |
1460 for i, line1 in enumerate(files): | |
1461 if len(files) > fnmaxn and i == fnmaxn - 1: | |
1462 win.addstr(y, fnx, _trunc_tail(b','.join(files[i:]), fnmaxx)) | |
1463 y = y + 1 | |
1464 break | |
1465 win.addstr(y, fnx, _trunc_head(line1, fnmaxx)) | |
1466 y = y + 1 | |
1467 | |
1468 conflicts = rule.conflicts | |
1469 if len(conflicts) > 0: | |
1470 conflictstr = b','.join(map(lambda r: r.ctx.hex()[:12], conflicts)) | |
1471 conflictstr = b"changed files overlap with %s" % conflictstr | |
1472 else: | |
1473 conflictstr = b'no overlap' | |
1474 | |
1475 win.addstr(y, 1, conflictstr[:length]) | |
1476 win.noutrefresh() | |
1477 | |
1427 | 1478 |
1428 def _chisteditmain(repo, rules, stdscr): | 1479 def _chisteditmain(repo, rules, stdscr): |
1429 try: | 1480 try: |
1430 curses.use_default_colors() | 1481 curses.use_default_colors() |
1431 except curses.error: | 1482 except curses.error: |
1449 # don't display the cursor | 1500 # don't display the cursor |
1450 try: | 1501 try: |
1451 curses.curs_set(0) | 1502 curses.curs_set(0) |
1452 except curses.error: | 1503 except curses.error: |
1453 pass | 1504 pass |
1454 | |
1455 def rendercommit(win, state): | |
1456 """Renders the commit window that shows the log of the current selected | |
1457 commit""" | |
1458 pos = state.pos | |
1459 rules = state.rules | |
1460 rule = rules[pos] | |
1461 | |
1462 ctx = rule.ctx | |
1463 win.box() | |
1464 | |
1465 maxy, maxx = win.getmaxyx() | |
1466 length = maxx - 3 | |
1467 | |
1468 line = b"changeset: %d:%s" % (ctx.rev(), ctx.hex()[:12]) | |
1469 win.addstr(1, 1, line[:length]) | |
1470 | |
1471 line = b"user: %s" % ctx.user() | |
1472 win.addstr(2, 1, line[:length]) | |
1473 | |
1474 bms = repo.nodebookmarks(ctx.node()) | |
1475 line = b"bookmark: %s" % b' '.join(bms) | |
1476 win.addstr(3, 1, line[:length]) | |
1477 | |
1478 line = b"summary: %s" % (ctx.description().splitlines()[0]) | |
1479 win.addstr(4, 1, line[:length]) | |
1480 | |
1481 line = b"files: " | |
1482 win.addstr(5, 1, line) | |
1483 fnx = 1 + len(line) | |
1484 fnmaxx = length - fnx + 1 | |
1485 y = 5 | |
1486 fnmaxn = maxy - (1 + y) - 1 | |
1487 files = ctx.files() | |
1488 for i, line1 in enumerate(files): | |
1489 if len(files) > fnmaxn and i == fnmaxn - 1: | |
1490 win.addstr(y, fnx, _trunc_tail(b','.join(files[i:]), fnmaxx)) | |
1491 y = y + 1 | |
1492 break | |
1493 win.addstr(y, fnx, _trunc_head(line1, fnmaxx)) | |
1494 y = y + 1 | |
1495 | |
1496 conflicts = rule.conflicts | |
1497 if len(conflicts) > 0: | |
1498 conflictstr = b','.join(map(lambda r: r.ctx.hex()[:12], conflicts)) | |
1499 conflictstr = b"changed files overlap with %s" % conflictstr | |
1500 else: | |
1501 conflictstr = b'no overlap' | |
1502 | |
1503 win.addstr(y, 1, conflictstr[:length]) | |
1504 win.noutrefresh() | |
1505 | 1505 |
1506 def helplines(mode): | 1506 def helplines(mode): |
1507 if mode == MODE_PATCH: | 1507 if mode == MODE_PATCH: |
1508 help = b"""\ | 1508 help = b"""\ |
1509 ?: help, k/up: line up, j/down: line down, v: stop viewing patch | 1509 ?: help, k/up: line up, j/down: line down, v: stop viewing patch |
1677 renderpatch(mainwin, state) | 1677 renderpatch(mainwin, state) |
1678 elif curmode == MODE_HELP: | 1678 elif curmode == MODE_HELP: |
1679 renderstring(mainwin, state, __doc__.strip().splitlines()) | 1679 renderstring(mainwin, state, __doc__.strip().splitlines()) |
1680 else: | 1680 else: |
1681 renderrules(mainwin, state) | 1681 renderrules(mainwin, state) |
1682 rendercommit(commitwin, state) | 1682 state.render_commit(commitwin) |
1683 renderhelp(helpwin, state) | 1683 renderhelp(helpwin, state) |
1684 curses.doupdate() | 1684 curses.doupdate() |
1685 # done rendering | 1685 # done rendering |
1686 ch = encoding.strtolocal(stdscr.getkey()) | 1686 ch = encoding.strtolocal(stdscr.getkey()) |
1687 | 1687 |