Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 2400:2e90024e1471
import: allow to import stdin with file name "-"
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Sun, 04 Jun 2006 16:47:46 -0700 |
parents | e9d402506514 |
children | 4593d09e534d |
comparison
equal
deleted
inserted
replaced
2399:cc90dcbdf053 | 2400:2e90024e1471 |
---|---|
1678 If a patch looks like a mail message (its first line starts with | 1678 If a patch looks like a mail message (its first line starts with |
1679 "From " or looks like an RFC822 header), it will not be applied | 1679 "From " or looks like an RFC822 header), it will not be applied |
1680 unless the -f option is used. The importer neither parses nor | 1680 unless the -f option is used. The importer neither parses nor |
1681 discards mail headers, so use -f only to override the "mailness" | 1681 discards mail headers, so use -f only to override the "mailness" |
1682 safety check, not to import a real mail message. | 1682 safety check, not to import a real mail message. |
1683 | |
1684 To read a patch from standard input, use patch name "-". | |
1683 """ | 1685 """ |
1684 patches = (patch1,) + patches | 1686 patches = (patch1,) + patches |
1685 | 1687 |
1686 if not opts['force']: | 1688 if not opts['force']: |
1687 bail_if_changed(repo) | 1689 bail_if_changed(repo) |
1696 diffre = re.compile(r'(?:Index:[ \t]|diff[ \t]|RCS file: |' + | 1698 diffre = re.compile(r'(?:Index:[ \t]|diff[ \t]|RCS file: |' + |
1697 'retrieving revision [0-9]+(\.[0-9]+)*$|' + | 1699 'retrieving revision [0-9]+(\.[0-9]+)*$|' + |
1698 '(---|\*\*\*)[ \t])') | 1700 '(---|\*\*\*)[ \t])') |
1699 | 1701 |
1700 for patch in patches: | 1702 for patch in patches: |
1701 ui.status(_("applying %s\n") % patch) | |
1702 pf = os.path.join(d, patch) | 1703 pf = os.path.join(d, patch) |
1703 | 1704 |
1704 message = [] | 1705 message = [] |
1705 user = None | 1706 user = None |
1706 date = None | 1707 date = None |
1707 hgpatch = False | 1708 hgpatch = False |
1708 for line in file(pf): | 1709 if pf == '-': |
1709 line = line.rstrip() | 1710 f = sys.stdin |
1710 if (not message and not hgpatch and | 1711 fd, tmpname = tempfile.mkstemp(prefix='hg-patch-') |
1711 mailre.match(line) and not opts['force']): | 1712 pf = tmpname |
1712 if len(line) > 35: | 1713 tmpfp = os.fdopen(fd, 'w') |
1713 line = line[:32] + '...' | 1714 ui.status(_("applying patch from stdin\n")) |
1714 raise util.Abort(_('first line looks like a ' | 1715 else: |
1715 'mail header: ') + line) | 1716 f = open(pf) |
1716 if diffre.match(line): | 1717 tmpfp, tmpname = None, None |
1717 break | 1718 ui.status(_("applying %s\n") % patch) |
1718 elif hgpatch: | 1719 try: |
1719 # parse values when importing the result of an hg export | 1720 while True: |
1720 if line.startswith("# User "): | 1721 line = f.readline() |
1721 user = line[7:] | 1722 if not line: break |
1722 ui.debug(_('User: %s\n') % user) | 1723 if tmpfp: tmpfp.write(line) |
1723 elif line.startswith("# Date "): | 1724 line = line.rstrip() |
1724 date = line[7:] | 1725 if (not message and not hgpatch and |
1725 elif not line.startswith("# ") and line: | 1726 mailre.match(line) and not opts['force']): |
1727 if len(line) > 35: | |
1728 line = line[:32] + '...' | |
1729 raise util.Abort(_('first line looks like a ' | |
1730 'mail header: ') + line) | |
1731 if diffre.match(line): | |
1732 if tmpfp: | |
1733 for chunk in util.filechunkiter(f): | |
1734 tmpfp.write(chunk) | |
1735 break | |
1736 elif hgpatch: | |
1737 # parse values when importing the result of an hg export | |
1738 if line.startswith("# User "): | |
1739 user = line[7:] | |
1740 ui.debug(_('User: %s\n') % user) | |
1741 elif line.startswith("# Date "): | |
1742 date = line[7:] | |
1743 elif not line.startswith("# ") and line: | |
1744 message.append(line) | |
1745 hgpatch = False | |
1746 elif line == '# HG changeset patch': | |
1747 hgpatch = True | |
1748 message = [] # We may have collected garbage | |
1749 elif message or line: | |
1726 message.append(line) | 1750 message.append(line) |
1727 hgpatch = False | 1751 |
1728 elif line == '# HG changeset patch': | 1752 # make sure message isn't empty |
1729 hgpatch = True | 1753 if not message: |
1730 message = [] # We may have collected garbage | 1754 message = _("imported patch %s\n") % patch |
1731 elif message or line: | 1755 else: |
1732 message.append(line) | 1756 message = '\n'.join(message).rstrip() |
1733 | 1757 ui.debug(_('message:\n%s\n') % message) |
1734 # make sure message isn't empty | 1758 |
1735 if not message: | 1759 if tmpfp: tmpfp.close() |
1736 message = _("imported patch %s\n") % patch | 1760 files = util.patch(strip, pf, ui) |
1737 else: | 1761 |
1738 message = '\n'.join(message).rstrip() | 1762 if len(files) > 0: |
1739 ui.debug(_('message:\n%s\n') % message) | 1763 addremove_lock(ui, repo, files, {}) |
1740 | 1764 repo.commit(files, message, user, date) |
1741 files = util.patch(strip, pf, ui) | 1765 finally: |
1742 | 1766 if tmpname: os.unlink(tmpname) |
1743 if len(files) > 0: | |
1744 addremove_lock(ui, repo, files, {}) | |
1745 repo.commit(files, message, user, date) | |
1746 | 1767 |
1747 def incoming(ui, repo, source="default", **opts): | 1768 def incoming(ui, repo, source="default", **opts): |
1748 """show new changesets found in source | 1769 """show new changesets found in source |
1749 | 1770 |
1750 Show new changesets found in the specified path/URL or the default | 1771 Show new changesets found in the specified path/URL or the default |