3683 _('skip check for outstanding uncommitted changes (DEPRECATED)')), |
3683 _('skip check for outstanding uncommitted changes (DEPRECATED)')), |
3684 ('', 'no-commit', None, |
3684 ('', 'no-commit', None, |
3685 _("don't commit, just update the working directory")), |
3685 _("don't commit, just update the working directory")), |
3686 ('', 'bypass', None, |
3686 ('', 'bypass', None, |
3687 _("apply patch without touching the working directory")), |
3687 _("apply patch without touching the working directory")), |
|
3688 ('', 'partial', None, |
|
3689 _('commit even if some hunks fail')), |
3688 ('', 'exact', None, |
3690 ('', 'exact', None, |
3689 _('apply patch to the nodes from which it was generated')), |
3691 _('apply patch to the nodes from which it was generated')), |
3690 ('', 'import-branch', None, |
3692 ('', 'import-branch', None, |
3691 _('use any branch information in patch (implied by --exact)'))] + |
3693 _('use any branch information in patch (implied by --exact)'))] + |
3692 commitopts + commitopts2 + similarityopts, |
3694 commitopts + commitopts2 + similarityopts, |
3724 revision. |
3726 revision. |
3725 |
3727 |
3726 With -s/--similarity, hg will attempt to discover renames and |
3728 With -s/--similarity, hg will attempt to discover renames and |
3727 copies in the patch in the same way as :hg:`addremove`. |
3729 copies in the patch in the same way as :hg:`addremove`. |
3728 |
3730 |
|
3731 Use --partial to ensure a changeset will be created from the patch |
|
3732 even if some hunks fail to apply. Hunks that fail to apply will be |
|
3733 written to a <target-file>.rej file. Conflicts can then be resolved |
|
3734 by hand before :hg:`commit --amend` is run to update the created |
|
3735 changeset. This flag exists to let people import patches that |
|
3736 partially apply without losing the associated metadata (author, |
|
3737 date, description, ...), Note that when none of the hunk applies |
|
3738 cleanly, :hg:`import --partial` will create an empty changeset, |
|
3739 importing only the patch metadata. |
|
3740 |
3729 To read a patch from standard input, use "-" as the patch name. If |
3741 To read a patch from standard input, use "-" as the patch name. If |
3730 a URL is specified, the patch will be downloaded from it. |
3742 a URL is specified, the patch will be downloaded from it. |
3731 See :hg:`help dates` for a list of formats valid for -d/--date. |
3743 See :hg:`help dates` for a list of formats valid for -d/--date. |
3732 |
3744 |
3733 .. container:: verbose |
3745 .. container:: verbose |
3802 ui.status(_('applying %s\n') % patchurl) |
3815 ui.status(_('applying %s\n') % patchurl) |
3803 patchfile = hg.openpath(ui, patchurl) |
3816 patchfile = hg.openpath(ui, patchurl) |
3804 |
3817 |
3805 haspatch = False |
3818 haspatch = False |
3806 for hunk in patch.split(patchfile): |
3819 for hunk in patch.split(patchfile): |
3807 (msg, node) = cmdutil.tryimportone(ui, repo, hunk, parents, |
3820 (msg, node, rej) = cmdutil.tryimportone(ui, repo, hunk, |
3808 opts, msgs, hg.clean) |
3821 parents, opts, |
|
3822 msgs, hg.clean) |
3809 if msg: |
3823 if msg: |
3810 haspatch = True |
3824 haspatch = True |
3811 ui.note(msg + '\n') |
3825 ui.note(msg + '\n') |
3812 if update or opts.get('exact'): |
3826 if update or opts.get('exact'): |
3813 parents = repo.parents() |
3827 parents = repo.parents() |
3814 else: |
3828 else: |
3815 parents = [repo[node]] |
3829 parents = [repo[node]] |
|
3830 if rej: |
|
3831 ui.write_err(_("patch applied partially\n")) |
|
3832 ui.write_err(("(fix the .rej files and run " |
|
3833 "`hg commit --amend`)\n")) |
|
3834 ret = 1 |
|
3835 break |
3816 |
3836 |
3817 if not haspatch: |
3837 if not haspatch: |
3818 raise util.Abort(_('%s: no diffs found') % patchurl) |
3838 raise util.Abort(_('%s: no diffs found') % patchurl) |
3819 |
3839 |
3820 if tr: |
3840 if tr: |
3821 tr.close() |
3841 tr.close() |
3822 if msgs: |
3842 if msgs: |
3823 repo.savecommitmessage('\n* * *\n'.join(msgs)) |
3843 repo.savecommitmessage('\n* * *\n'.join(msgs)) |
|
3844 return ret |
3824 except: # re-raises |
3845 except: # re-raises |
3825 # wlock.release() indirectly calls dirstate.write(): since |
3846 # wlock.release() indirectly calls dirstate.write(): since |
3826 # we're crashing, we do not want to change the working dir |
3847 # we're crashing, we do not want to change the working dir |
3827 # parent after all, so make sure it writes nothing |
3848 # parent after all, so make sure it writes nothing |
3828 repo.dirstate.invalidate() |
3849 repo.dirstate.invalidate() |