summaryrefslogtreecommitdiff
path: root/git-am.sh
Commit message (Collapse)AuthorAgeFilesLines
* Use diff* with --exit-code in git-am, git-rebase and git-merge-oursAlex Riesen2007-03-241-11/+7
| | | | | | | | | This simplifies the shell code, reduces its memory footprint, and speeds things up. The performance improvements should be noticable when git-rebase works on big commits. Signed-off-by: Alex Riesen <raa.lkml@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
* builtin-mailinfo.c infrastrcture changesDon Zickus2007-03-121-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I am working on a project that required parsing through regular mboxes that didn't necessarily have patches embedded in them. I started by creating my own modified copy of git-am and working from there. Very quickly, I noticed git-mailinfo wasn't able to handle a big chunk of my email. After hacking up numerous solutions and running into more limitations, I decided it was just easier to rewrite a big chunk of it. The following patch has a bunch of fixes and features that I needed in order for me do what I wanted. Note: I'm didn't follow any email rfc papers but I don't think any of the changes I did required much knowledge (besides the boundary stuff). List of major changes/fixes: - can't create empty patch files fix - empty patch files don't fail, this failure will come inside git-am - multipart boundaries are now handled - only output inbody headers if a patch exists otherwise assume those headers are part of the reply and instead output the original headers - decode and filter base64 patches correctly - various other accidental fixes I believe I didn't break any existing functionality or compatibility (other than what I describe above, which is really only the empty patch file). I tested this through various mailing list archives and everything seemed to parse correctly (a couple thousand emails). [jc: squashed in another patch from Don's five patch series to fix the test case, as this patch exposes the bug in the test.] Signed-off-by: Don Zickus <dzickus@redhat.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Reword git-am 3-way fallback failure message.Junio C Hamano2007-02-241-1/+1
| | | | | | | | | | | | When the blobs recorded on the index lines in the patch as pre-image blobs are not found in the repository, "git-am" punted saying that the index line does not record anything useful. This was not clear enough -- the index line does have something useful but the problem was that it was not useful in _that_ repository. Reword the message as Francis Moreau suggests. Signed-off-by: Junio C Hamano <junkio@cox.net>
* Teach git-am to pass -p option down to git-applyJunio C Hamano2007-02-111-5/+2
| | | | | | | This is originally from Andy Parkins whose patch used --patchdepth; let's use -p which is more in line with the underlying git-apply. Signed-off-by: Junio C Hamano <junkio@cox.net>
* add -C[NUM] to git-amMichael S. Tsirkin2007-02-081-4/+8
| | | | | | | | Add -C[NUM] to git-am and git-rebase so that patches can be applied even if context has changed a bit. Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Merge branch 'jc/bare'Junio C Hamano2007-01-111-0/+1
|\ | | | | | | | | | | | | | | * jc/bare: Disallow working directory commands in a bare repository. git-fetch: allow updating the current branch in a bare repository. Introduce is_bare_repository() and core.bare configuration variable Move initialization of log_all_ref_updates
| * Disallow working directory commands in a bare repository.Shawn O. Pearce2007-01-101-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the user tries to run a porcelainish command which requires a working directory in a bare repository they may get unexpected results which are difficult to predict and may differ from command to command. Instead we should detect that the current repository is a bare repository and refuse to run the command there, as there is no working directory associated with it. [jc: updated Shawn's original somewhat -- bugs are mine.] Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
* | -u is now default for 'git-mailinfo'.Junio C Hamano2007-01-091-0/+2
| | | | | | | | | | | | | | Originally from David Woodhouse, but also adjusts the callers of mailinfo to the new default. Signed-off-by: Junio C Hamano <junkio@cox.net>
* | git-am: should work when "--no-utf8 --utf8" is givenJunio C Hamano2007-01-091-1/+1
| | | | | | | | Signed-off-by: Junio C Hamano <junkio@cox.net>
* | --utf8 is now default for 'git-am'Junio C Hamano2007-01-081-3/+5
|/ | | | | | | | | | | Since we are talking about allowing potentially incompatible UI changes in v1.5.0 iff the change improves the general situation, I would say why not. There is --no-utf8 flag to avoid re-coding from botching the log message just in case, but we may not even need it. Signed-off-by: Junio C Hamano <junkio@cox.net>
* Use merge-recursive in git-am -3.Shawn O. Pearce2006-12-281-2/+5
| | | | | | | | | | | | By switching from merge-resolve to merge-recursive in the 3-way fallback behavior of git-am we gain a few benefits: * renames are automatically handled, like in rebase -m; * conflict hunks can reference the patch name; * its faster on Cygwin (less forks). Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Use GIT_REFLOG_ACTION environment variable instead.Shawn O. Pearce2006-12-281-5/+2
| | | | | | | | | | | | | | | | | Junio rightly pointed out that the --reflog-action parameter was starting to get out of control, as most porcelain code needed to hand it to other porcelain and plumbing alike to ensure the reflog contained the top-level user action and not the lower-level actions it invoked. At Junio's suggestion we are introducing the new set_reflog_action function to all shell scripts, allowing them to declare early on what their default reflog name should be, but this setting only takes effect if the caller has not already set the GIT_REFLOG_ACTION environment variable. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Suggest 'add' in am/revert/cherry-pick.Shawn O. Pearce2006-12-211-2/+2
| | | | | | | | | | | Now that we have decided to make 'add' behave like 'update-index' (and therefore fully classify update-index as strictly plumbing) the am/revert/cherry-pick family of commands should not steer the user towards update-index. Instead send them to the command they probably already know, 'add'. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
* rerere: record (or avoid misrecording) resolved, skipped or aborted rebase/amEric Wong2006-12-091-0/+8
| | | | | | | | | | | | | | | | Data in rr-cache isn't valid after a patch application is skipped or and aborted, so our next commit could be misrecorded as a resolution of that skipped/failed commit, which is wrong. git-am --skip, git-rebase --skip/--abort will automatically invoke git-rerere clear to avoid this. Also, since git-am --resolved indicates a resolution was succesful, remember to run git-rerere to record the resolution (and not surprise the user when the next commit is made). Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Fix git-am safety checksJunio C Hamano2006-09-161-4/+19
| | | | | | | | | | | | | | | | | | | | | | | An earlier commit cbd64af added a check that prevents "git-am" to run without its standard input connected to a terminal while resuming operation. This was to catch a user error to try feeding a new patch from its standard input while recovery. The assumption of the check was that it is an indication that a new patch is being fed if the standard input is not connected to a terminal. It is however not quite correct (the standard input can be /dev/null if the user knows the operation does not need any input, for example). This broke t3403 when the test was run with its standard input connected to /dev/null. When git-am is given an explicit command such as --skip, there is no reason to insist that the standard input is a terminal; we are not going to read a new patch anyway. Credit goes to Gerrit Pape for noticing and reporting the problem with t3403-rebase-skip test. Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-am: give better diagnostics when the patch does not apply during --3wayJunio C Hamano2006-08-121-9/+19
| | | | | | | | | If the user tries to apply a patch that was hand-edited in such a way that it does not apply to the original file recorded on its "index" line anymore, we did detect the situation but did not issue an error message that is specific enough. Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-am: Don't accept an mbox on stdin of we already have a .dotest directoryLukas Sandström2006-07-231-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It makes no sense to accept an mbox via stdin when we won't accept it on the commandline. The patch helps the following scenario: # git init-db "add file1 with content" # git checkout -b apply "edit file1 && commit" # git checkout -b conflict master "edit file1 && commit" # git checkout -b ok master "add file2" # git checkout apply # git format-patch -k -3 master..conflict | git am -k -3 => git-am fails with a conflict message # git reset --hard # git format-patch -k -3 master..ok | git am -k -3 => git am fails with the same conflict message as above, => since it's trying to apply the old .dotest directory With the patch it complains about an old .dotest directory instead. Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Record rebase changes as 'rebase' in the reflog.Shawn Pearce2006-07-131-1/+5
| | | | | Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Fix more typos, primarily in the codePavel Roskin2006-07-101-1/+1
| | | | | | | | | The only visible change is that git-blame doesn't understand "--compability" anymore, but it does accept "--compatibility" instead, which is already documented. Signed-off-by: Pavel Roskin <proski@gnu.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Fix expr usage for FreeBSDDennis Stosberg2006-06-271-1/+1
| | | | | | | | Some implementations of "expr" (e.g. FreeBSD's) fail, if an argument starts with a dash. Signed-off-by: Dennis Stosberg <dennis@stosberg.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Merge branch 'sp/reflog' into nextJunio C Hamano2006-05-231-1/+1
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * sp/reflog: Enable ref log creation in git checkout -b. Create/delete branch ref logs. Include ref log detail in commit, reset, etc. Change order of -m option to update-ref. Correct force_write bug in refs.c Change 'master@noon' syntax to 'master@{noon}'. Log ref updates made by fetch. Force writing ref if it doesn't exist. Added logs/ directory to repository layout. General ref log reading improvements. Fix ref log parsing so it works properly. Support 'master@2 hours ago' syntax Log ref updates to logs/refs/<ref> Convert update-ref to use ref_lock API. Improve abstraction of ref lock/write.
| * Include ref log detail in commit, reset, etc.Shawn Pearce2006-05-191-1/+1
| | | | | | | | | | | | | | | | When updating a ref at the direction of the user include a reason why head was changed as part of the ref log (assuming it was enabled). Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
* | Merge branch 'jc/apply' into nextJunio C Hamano2006-05-151-36/+2
|\ \ | |/ |/| | | | | | | * jc/apply: git-am: use apply --cached apply --cached: apply a patch without using working tree.
| * git-am: use apply --cachedJunio C Hamano2006-05-151-36/+2
| | | | | | | | | | | | | | | | Now 'git apply' can apply patch without working tree, preparation of pristine preimage and postimage trees that are done when falling back on 3-way merge by "git am" can do so without temporary files. Signed-off-by: Junio C Hamano <junkio@cox.net>
* | Make git rebase interactive help match documentation.Sean2006-05-141-2/+9
|/ | | | | Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Give the user a hint for how to continue in the case that git-am fails ↵Robert Shearman2006-05-021-3/+23
| | | | | | | | | | because it requires user intervention Give the user a hint for how to continue in the case that git-am fails because it requires user intervention. Signed-off-by: Robert Shearman <rob@codeweaves.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-am --resolved: more usable error message.Junio C Hamano2006-04-281-0/+7
| | | | | | | | | | | | | After doing the hard work of hand resolving the conflicts in the working tree, if the user forgets to run update-index to mark the paths that have been resolved, the command gave an unfriendly "fatal: git-write-tree: not able to write tree" error message. Catch the situation early and give more meaningful message and suggestion. Noticed and suggested by Len Brown. Signed-off-by: Junio C Hamano <junkio@cox.net>
* war on whitespaces: documentation.Junio C Hamano2006-03-021-1/+2
| | | | | | | We were missing the --whitespace option in the usage string for git-apply and git-am, so this commit adds them. Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-am: --whitespace=x option.Junio C Hamano2006-02-281-4/+9
| | | | | | | This is passed down to git-apply to override the built-in default and per-repository configuration at runtime. Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-am: do not allow empty commits by mistake.Junio C Hamano2006-02-231-2/+8
| | | | | | | | | Running "git-am --resolved" without doing anything can create an empty commit. Prevent it. Thanks for Eric W. Biederman for spotting this. Signed-off-by: Junio C Hamano <junkio@cox.net>
* Keep Porcelainish from failing by broken ident after making changes.Junio C Hamano2006-02-221-1/+3
| | | | | | | | | | | | | | | | | "empty ident not allowed" error makes commit-tree fail, so we are already safer in that we would not end up with commit objects that have bogus names on the author or committer fields. However, before commit-tree is called there are already changes made to the index file and the working tree. The operation can be resumed after fixing the environment problem, but when this triggers to a newcomer with unusable gecos, the first question becomes "what did I lose and how would I recover". This patch modifies some Porcelainish commands to verify GIT_COMMITTER_IDENT as soon as we know we are going to make some commits before doing much damage to prevent confusion. Signed-off-by: Junio C Hamano <junkio@cox.net>
* Only call git-rerere if $GIT_DIR/rr-cache exists.Junio C Hamano2006-02-111-1/+4
| | | | | | | Johannes noticed that git-rerere depends on Digest.pm, and if one does not use the command, one can live without it. Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-rerere: reuse recorded resolve.Junio C Hamano2006-02-061-0/+1
| | | | | | | | | | | | | | | In a workflow that employs relatively long lived topic branches, the developer sometimes needs to resolve the same conflict over and over again until the topic branches are done (either merged to the "release" branch, or sent out and accepted upstream). This commit introduces a new command, "git rerere", to help this process by recording the conflicted automerge results and corresponding hand-resolve results on the initial manual merge, and later by noticing the same conflicted automerge and applying the previously recorded hand resolution using three-way merge. Signed-off-by: Junio C Hamano <junkio@cox.net>
* Fix git-am --skipJan Harkes2005-12-161-0/+2
| | | | | | | | | | | | | | | | | | | git-am --skip does not unpack the next patch and ends up reapplying the old patch, believing that it is the new patch in the sequence. If the old patch applied successfully it will commit it with the supposedly skipped log message and ends up dropping the following patch. If the patch did not apply the user is left with the conflict he tried to skip and has to unpack the next patch in the sequence by hand to get git-am back on track. By clearing the resume variable whenever skips bumps the sequence counter we correctly unpack the next patch. I also added another resume= in the case a patch file is missing from the sequence to avoid the same problem when a file in the sequence was removed. Signed-off-by: Jan Harkes <jaharkes@cs.cmu.edu> Signed-off-by: Junio C Hamano <junkio@cox.net>
* mailinfo and git-am: allow "John Doe <johndoe>"Junio C Hamano2005-12-141-0/+7
| | | | | | | | | | An isolated developer could have a local-only e-mail, which will be stripped out by mailinfo because it lacks '@'. Define a fallback parser to accomodate that. At the same time, reject authorless patch in git-am. Signed-off-by: Junio C Hamano <junkio@cox.net>
* Merge branch 'hold/am'Junio C Hamano2005-12-141-4/+1
|\
| * git-am support for naked email messages (take 2)H. Peter Anvin2005-12-141-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows git-am to accept single-message files as well as mboxes. Unlike the previous version, this one doesn't need to be explicitly told which one it is; rather, it looks to see if the first line is a From line and uses it to select mbox mode or not. I moved the logic to do all this into git-mailsplit, which got a new user interface as result, although the old interface is still available for backwards compatibility. [jc: applied with two obvious fixes.] Signed-off-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
* | git-am: Usage string clean-upfreku045@student.liu.se2005-12-141-7/+3
|/ | | | | Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Use printf rather than echo -n.Jason Riedy2005-12-061-1/+1
| | | | | | | | | | | | | | | | | | On AIX, there is no -n option to the system's echo. Instead, it needs the '\c' control character. We could replace echo -n "foo" with echo -e "foo\c" but printf is recommended by most man pages. Tested on AIX 5.3, Solaris 8, and Debian. [jc: futureproofed two instances that uses variable with '%s' so later feeding different messages would not break things too easily; others are emitting literal so whoever changes the literal ought to notice more easily so they are safe.] Signed-off-by: E. Jason Riedy <ejr@cs.berkeley.edu> Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-sh-setup: die if outside git repository.Junio C Hamano2005-11-251-1/+1
| | | | | | | | Now all the users of this script detect its exit status and die, complaining that it is outside git repository. So move the code that dies from all callers to git-sh-setup script. Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-am: --binary; document --resume and --binary.Junio C Hamano2005-11-171-6/+14
| | | | | | | | | | | Now git-apply can grok binary replacement patches, give --binary flag to git-am. As a safety measure, this is not by default enabled, so that you do not let malicious e-mailed patch to replace an arbitrary path with just a couple of lines (diff index lines, the filename and string "Binary files "...) by accident. Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-am: --resolved.Junio C Hamano2005-11-161-12/+53
| | | | | | | | | | | | After failed patch application, you can manually apply the patch (this includes resolving the conflicted merge after git-am falls back to 3-way merge) and run git-update-index on necessary paths to prepare the index file in a shape a successful patch application should have produced. Then re-running git-am --resolved would record the resulting index file along with the commit log information taken from the patch e-mail. Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-am: do not lose already edited final-commit when resuming.Junio C Hamano2005-11-081-12/+19
| | | | | | | The last round stopped munging the patch when resuming, but failed to preserve final-commit. Signed-off-by: Junio C Hamano <junkio@cox.net>
* Add [v]iew patch in git-am interactive.Junio C Hamano2005-10-251-5/+8
| | | | Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-am: make it easier after fixing up an unapplicable patch.Junio C Hamano2005-10-251-4/+10
| | | | | | | Instead of having the user to edit the mail message, let the hand merge result stored in .dotest/patch and continue, which is easier to manage. Signed-off-by: Junio C Hamano <junkio@cox.net>
* Fix missing exports in git-amJunio C Hamano2005-10-201-0/+1
| | | | Signed-off-by: Junio C Hamano <junkio@cox.net>
* Update git-apply to use C-style quoting for funny pathnames.Junio C Hamano2005-10-171-2/+2
| | | | Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-am: do not fail if 3-way fallback succeeds.Junio C Hamano2005-10-131-8/+12
| | | | | | The current one incorrectly stops there without committing. Signed-off-by: Junio C Hamano <junkio@cox.net>
* git-am: interactive should fail gracefully.Junio C Hamano2005-10-121-2/+2
| | | | | | | | When feeding patches from standard input, and --interactive is specified, quit, so that the user can re-run the command, instead of infinitely looping. Signed-off-by: Junio C Hamano <junkio@cox.net>
* Add git-am, applymbox replacement.Junio C Hamano2005-10-071-0/+337
It reorganizes the code and also has saner command line options syntax. Unlike git-applymbox, it can take more than one mailbox file from the command line, as well as reading from the standard input when '-' is specified. Signed-off-by: Junio C Hamano <junkio@cox.net>