On 26 Mar 2015, at 00:30, "Charles" <
mv...@forallx.net> wrote:
> I don't know any C, or anything about Vim's code, but if there's a way I
> can help keep on top of things, please let me know. Perhaps if there's a
> section on the wiki that explains which sections of the code are free of
> Vim/MacVim conflict, I and others could make github PRs for most Vim
> patches. Or perhaps @douglasdrumond can post the workflow involved in
> doing this.
I also don't know anything about C or Vim's code but a few months ago I figured out how to update MacVim's patchlevel. Here are the raw notes I made at the time:
----8<----
[1] b4winckler/macvim - 7.4.383
[2] b4winckler/vim - 7.4.430
[3] vim - 7.4.542
we want to bring [1] up to date with [3].
ideally we'd merge [3] directly into [1] but i can't see how to do that without losing macvim-specific stuff.
instead:
A: diff [2] and [1] and apply to [1]
B: diff [3] and [2] and apply to [1']
## Clone vim's repo [3] as a git repo
we don't do this the way recommended on b4winckler/vim/wiki (using mercurial and the hg-git mercurial extension).
instead we use git with the "semi-official" git-remote-hg remote helper.
Install git-remote-hg as per instructions (
https://github.com/felipec/git-remote-hg)
$ git clone hg::
https://code.google.com/p/vim/
$ git gc --aggressive
$ git remote add github
https://github.com/airblade/vim.git (new, empty repo)
$ git push github master
## Clone macvim's repo [1] and add [2] and [3] as remotes
$ git clone
https://github.com/b4winckler/macvim.git
$ cd macvim
$ git remote add b4winckler-vim
https://github.com/b4winckler/vim.git
$ git remote add airblade-vim
https://github.com/airblade/vim.git
$ git fetch
## A
method 1 (this method squashes all the individual commits together)
$ git diff HEAD...b4winckler-vim/master > a.diff
$ git apply --reject a.diff
mostly applies but a few rejects (mostly perl stuff - see 7.4.409)
$ find . -name '*.rej' -print
./runtime/doc/tags.rej
./src/auto/configure.rej
./src/config.mk.in.rej
./src/configure.in.rej
./src/Makefile.rej
./src/option.c.rej
./src/structs.h.rej
fix up by hand, remove the *.rej files, then generate a new clean diff
$ git add -A
$ git diff --staged > a-clean.diff
$ git commit -m "Patchlevel 430"
method 2 (probably better)
$ git merge b4winckler-vim/master
a few merge conflicts (mostly perl stuff)
for each conflicted file:
fix conflict
git add the fixed file
when all conflicts fixed, finish merge with
$ git commit
generate patch with
$ git diff HEAD^ > a-clean.diff
## B
method 1 (this method squashes all the individual commits together)
$ git diff b4winckler-vim/master...airblade-vim/master > b.diff
$ git apply --reject b.diff
mostly applies but a few rejects
$ find . -name '*.rej' -print
./runtime/doc/tags.rej
./src/ex_cmds.h.rej
./src/if_ruby.c.rej
./src/misc2.c.rej
./src/vim.h.rej
fix up by hand, remove the *.rej files, then generate a new clean diff
$ git add -A
$ git diff --staged > b-clean.diff
$ git commit -m "Patchlevel 542"
method 2 (probably better)
[i can't figure out how to make this work without losing all the macvim-specific stuff]
$ git co -b foo b4winckler-vim/master
$ git merge airblade-vim/master
leads to 150 add-add merge conflicts...i don't understand why
## Upload {a,b}-clean.diff somewhere and `brew edit macvim` adding
head do
patch do
url 'file:///Users/andy/code/buildingvim/a-clean.diff'
sha1 '2086b634bb7a2d3c5a079830e66d50184a1c7eb3'
end
patch do
url 'file:///Users/andy/code/buildingvim/b-clean.diff'
sha1 '8c696f81903ed910db637fd30a25dea00b95438f'
end
end
i also had to remove `--enable-perlinterp` from compile args around line 55
presumably i messed up the perl stuff when cleaning the rejected patches
## voila
$ brew uninstall macvim
$ brew intall macvim --custom-icons --HEAD
$ brew linkapps
## When vim is updated
we could do B all over again but it takes a while to fix the rejected patches
(either automate this or) better to diff B and let's call it C
$ cd /path/to/vim-clone
$ git pull
$ git push github master
[erm]
$ git diff e62677eac > c.diff
$ cd /path/to/macvim-clone
$ git apply --reject /path/to/c.diff
etc
----8<----
I'd like to hear of better ways to do this! Or even see MacVim merged into main Vim as someone else suggested.
Yours,
Andy Stewart