v2.11.1 release
[git-osx-installer.git] / README_PATCHES.txt
blob84b3bbce0c14da4be94740c9a12d41f90068ae69
1 Patches Information
2 ===================
4 The various patches, enhancements and downright replacements used to build
5 the version of Git and supplementary software included in the Git OS X
6 Installer are collected here.
8 For the files/patches included herein, some have explicit licenses embedded
9 within them (typically GPLv2).  For the ones that do not explicitly mention
10 a license the standard Git license applies -- this is especially true for
11 any 'Signed-off-by' patches taken from the Git mailing list.  The standard
12 Git license is GPLv2 ONLY.
14 Other files that do not have an explicit license and did not come from the
15 Git mailing list are my own code and where the source file does not say
16 otherwise are licensed under GPLv2 or, at your option, any later version.
19 Git Patches
20 -----------
22 * Use Mac OS X native API to show language translations
24   - `src/build-prefix.h`
25   - `src/gettext.c`
26   - `src/gettext-util.c`
27   - `patches/git-sh-i18n-sh-git_gettext.diff`
28   - `patches/git-gettext-failures.diff`
30 * Use libcurl for imap send
32   - `patches/km/git-imap-send_use_libcurl.txt`
34   This enables using CRAM-MD5 in an imap tunnel without needing OpenSSL.
36 * Use libcurl for send email
38   - `patches/km/git-send-email-libcurl.txt`
40   My own patches to make `git-send-email.perl` use libcurl instead of
41   OpenSSL.  Has not been posted elsewhere.
43 * Use fgetln when getdelim is not available
45   - `patches/km/strbuf_getwholeline-fgetln.txt`
47   My own patches to make `strbuf_getwholeline` use fgetln when called with
48   a delimiter of `\n` if fgetln is available but getdelim is not.
49   Has not been posted elsewhere.
51 * Use a different pack.windowmemory default setting instead of 0
53   - `patches/windowmemory/q/t_util_sys__memsize.diff`
54   - `patches/windowmemory/q/t_gc_default-windowmemory.diff`
56   My own patches to change the pack.windowmemory default from 0 (meaning
57   unlimited) to a sane default that should avoid memory thrashing especially
58   when running gc --aggressive with a 64-bit address space.  Has not been
59   posted elsewhere.
61 * Avoid PERL5LIB etc. variable conflicts
63   - `patches/km/no-perl-vars.txt`
65   My own patch to unset troublesome Perl environment variables before running
66   subcommands.  This prevents incompatible PERL5LIB libraries from being picked
67   up by Git's perl-based utilities.  Has not been posted elsewhere.
69 * Make git-remote-mediawiki work properly:
71   - `patches/mediawiki/q/t_mediawiki_no-dupes.diff`
72   - `patches/mediawiki/q/t_mediawiki_namespaces.diff`
73   - `patches/mediawiki/q/t_mediawiki_max-revision.diff`
74   - `patches/mediawiki/q/t_mediawiki_mediaimport.diff`
75   - `patches/mediawiki/q/t_mediawiki_many-revisions.difff`
76   - `patches/mediawiki/q/t_mediawiki_empty-commit.diff`
77   - `patches/mediawiki/q/t_mediawiki_skip-notfound-media.diff`
79   My own patches to make git-remote-mediawiki work properly.  The no-dupes
80   patch avoids importing more than one copy of the same history (typically it
81   would import two copies).  The max-revision patch allows it to actually find
82   the correct maximum revision so that a fetchStrategy of 'by_rev' can work
83   properly.  The namespaces patch allows a 'by_rev' fetchStrategy to fetch an
84   update regardless of what namespace it's located in when no pages or
85   categories have been set to otherwise limit the import.  The mediaimport
86   patch allows it to actually find the media to import when the mediaimport
87   flag is set to true and the media has a timestamp that does not exactly match
88   the page's down to the last second.  The many-revisions patch allows a
89   fetchStrategy of 'by_rev' to succeed when the number of revisions that need
90   to be fetched is very large.  The empty-commit patch preserves a MediaWiki
91   revision that only has a comment which can happen if the revision data has
92   somehow been obliterated.  And finally the skip-notfound-media patch treats
93   a 404 (and 403) error the same as an imageinfo query that finds nothing when
94   mediaimport has been enabled.  Have not been posted elsewhere.
96 * Improve usability of git-instaweb:
98   - `patches/instaweb/q/t_instaweb_highlight.diff`
99   - `patches/instaweb/q/t_instaweb_mimetypes.diff`
100   - `patches/instaweb/q/t_instaweb_defaults.diff`
101   - `patches/instaweb/q/t_instaweb_git-browser.diff`
102   - `patches/instaweb/q/t_instaweb_ipv6.diff`
103   - `patches/instaweb/q/t_instaweb_fcgi.diff`
104   - `patches/instaweb/q/t_instaweb_readme.diff`
105   - `patches/instaweb/q/t_instaweb_default-to-local.diff`
106   - `patches/instaweb/q/t_instaweb_no-kill-nothing.diff`
107   - `patches/instaweb/q/t_instaweb_auto-port.diff`
108   - `patches/instaweb/q/t_instaweb_restrict-bare.diff`
109   - `patches/instaweb/q/t_instaweb_worktree.diff`
111   My own patches to improve the usability of git instaweb by enabling source
112   highlighting if highlight is available, using the installed copy of
113   mime.types (since there isn't such a file in OS X), enabling pathinfo mode,
114   blame and better rename detection, adding a 'graphiclog' link to the pages
115   that uses git-browser to show a graphic representation of commit ancestry,
116   binding to both IPv4 and IPv6 addresses and browsing to localhost instead of
117   127.0.0.1, enabling readme blob display, defaulting to binding only to the
118   localhost address if `instaweb.local` has not been set at all, avoiding
119   attempting to kill using a process id of "", attempting to automatically
120   select an available port to listen on if one was not specified and the first
121   chosen port is not available and finally set the gitweb configuration item
122   $projects_list_restrict when running in a bare repository.  The ipv6 patch is
123   only effective when using lighttpd as the web server (which is the default).
124   The fcgi patch enables FCGI mode when the needed FCGI perl module is present.
125   The worktree patch makes instaweb work properly when used with `git worktree`
126   instances.  Have not been posted elsewhere.
128 * Add submodule support to gitweb:
130   - `patches/gitweb/q/gitweb-find-project-dirs-with-.git-gitdir-links.diff`
132   My own patch to allow gitweb to find submodules that use gitdir links.  With
133   this patch using git instaweb in a working tree that contains checked-out
134   submodules makes it very easy to browse the submodules -- without the patch
135   they are not listed in the gitweb projects list.  Has not been posted
136   elsewhere.
138 * Add $projects_list_restrict support to gitweb:
140   - `patches/gitweb/q/gitweb-support-projects_list_restrict.diff`
142   My own patch to allow gitweb to restrict the projects found when
143   $projects_list is set to a directory to only those in a single subdirectory
144   or those with a full path that matches a specified regular expression.
145   Has not been posted elsewhere.
147 * Various gitweb bug fixes / enhancements:
149 - `patches/gitweb/q/*.diff`
151   A selection of various patches from Girocco's [1] custom version of
152   gitweb [2] that vastly improves the usability of git instaweb by making
153   gitweb work so much better.
155   [1] <http://repo.or.cz/w/girocco.git>  
156   [2] <http://repo.or.cz/w/git/gitweb.git/blob/girocco:README_FIRST.txt>
158 * contrib/git-log-compact:
160   - `patches/km/contrib-git-log-compact.txt`
162   My own patch that adds contrib/git-log-compact a git log --oneline alternative
163   that includes dates, times and initials.  See the README file in the patch or
164   visit [3] for detailed information and screen shots.
166   [3] <https://mackyle.github.io/git-log-compact/>
169 Curl Patches
170 ------------
172 In order to provide compatibility with Mac OS X 10.4 AND web sites using
173 SHA-256/SHA-384 hashes in their certificates, the version of libcurl that has
174 been included as part of the Git OS X Installer uses the darwinssl backend
175 that relies on Secure Transport instead of OpenSSL.
177 Unfortunately the released version of the darwinssl backend has many
178 deficiencies that make it unsuitable for use as a replacement when users are
179 expecting to be able to provide multiple client certificates possibly combined
180 with an RSA private key all in PEM format.
182 Additionally the as-released darwinssl backend doesn't really work on older
183 Mac OS X versions as-is.  Oh it may compile on Mac OS X 10.5 without complaints
184 but it immediately crashes and burns when one tries to use it.  And it does not
185 support Mac OS X 10.4 at all as released.
187 * Curl darwinssl backend universal Mac OS X compatibility
189   - `patches/curl/curl_darwinssl_macosx.c`
190   - `patches/curl/stcompat.c`
191   - `patches/curl/stcompat.h`
192   - `patches/curl/q/t_ntlm_no-one-shot.diff`
193   - `patches/curl/q/t_securetransport_extra-data.diff`
194   - `patches/curl/q/t_pinning_darwin.diff`
195   - `patches/curl/q/t_pinning_dummy-key.diff`
196   - `patches/curl/q/t_docs_manpage.diff`
198 * Curl mk-ca-bundle script improvements
200   - `patches/curl/q/t_mk-ca-bundle_improvements.diff`
203 PCRE Patches
204 ------------
206 The PCRE library provides a POSIX wrapper that allows the PCRE library to be
207 used in place of the regular POSIX regex routines.  Unfortunately, the standard
208 PCRE wrapper lacks full POSIX compatibility for the REG_NEWLINE option and does
209 not have any BRE (Basic Regular Expression) support at all.
211 These patches provide a fully usable `regex.h` substitute via an enhanced and
212 completely POSIX compatible pcreposix library which allows it to be used with
213 Git so that the Git NO_REGEX compilation option can be avoided.
215 The Git NO_REGEX compilation option causes a Git-provided regular expression
216 library to be used.  Unfortunately, it has some severe problems and is best
217 avoided.  For full details see <https://github.com/mackyle/pcreposix-compat>.
219 With these patches, the PCRE posix wrapper library is used to replace the
220 unwanted Git NO_REGEX compatibility library with a much more robust version
221 that uses the PCRE backend.
223 * PCRE pcreposix improvement patches
225   - `patches/pcreposix/0001-pcre-extended-options.diff`
226   - `patches/pcreposix/0002-posix-reg-newline.diff`
227   - `patches/pcreposix/0003-posix-reg-basic.diff`
228   - `patches/pcreposix/0004-compat-reg-nospec.diff`
229   - `patches/pcreposix/0005-compat-reg-pend.diff`
230   - `patches/pcreposix/0006-posix-reg-extended.diff`
231   - `patches/pcreposix/0007-extras-reg-pcre.diff`
232   - `patches/pcreposix/0008-posix-defines-not-enum.diff`
233   - `patches/pcreposix/0009-posix-regoff-type.diff`
234   - `patches/pcreposix/0010-compat-reg-startend.diff`
235   - `patches/pcreposix/0011-compat-version.diff`
236   - `patches/pcreposix/0012-compat-readme.diff`
239 Lighttpd Patches
240 ----------------
242 * Provide an idle timeout option
244   - `patches/lighttpd/q/t_server_idle-timeout.diff`
246 * A couple of other lighttpd patches are included to
247   avoid having to maintain multiple patch series, but
248   their changes are not relevant to the Git OS X Installer.
251 GnuPG Patches
252 -------------
254 The standard build of gpg does not allow one to create any keys with bit
255 lengths larger than 4096 bits.  (Once created, existing versions of gpg can
256 use such a key without problems.)  However, according to NIST 800-57, an RSA
257 key 3072 bits in length only provides 128 bits of security strength.  In order
258 to comply with NIST policy on the use of AES to protect national information
259 and meet the TOP SECRET requirements a security strength of at least 192 bits
260 is required.  That necessitates an RSA key of 7680 bits (see NIST 800-57).
261 Hence the gpg patch to permit creation of such keys.
263 * Always allow larger RSA keys up to 16384 bits to be created
265   - `patches/gnupg/q/t_gnupg_longer-keys.diff`
267 * Make trailing ":pid:protocol" part of GPG_AGENT_INFO optional (launchd)
269   - `patches/gnupg/q/t_launchd_agent-compat.diff`
272 Compatibility Patches
273 ---------------------
275 Other than the giant Curl darwinssl backend patch, some other compatibility
276 patches are needed in order to build for Mac OS X 10.4 without losing any
277 functionality.
279 These consist of the remaining files in the include and src subdirectories
280 and provide the following compatibility fixes:
282 * Curl support for NTLM on Mac OS X 10.4
284   Special thanks to Libtomcrypt <http://libtom.org/> for providing a public
285   domain version of DES needed to make this work.
287 * Git support CRAM-MD5 when `git-imap-send` is using a tunnel
289   This is really just some glue and an implementation of HMAC MD5 based
290   on RFC 2104 that uses the OS X Common Crypto MD5 hash implementation.
292 * GnuPG support using libedit instead of libreadline
294   This is just some simplistic linker glue (`src/gnupgcompat.c`) and a clever
295   compiler prefix file (`src/gnupg-prefix.h`).
298 Other Stuff
299 -----------
301 For the neophyte using gpg the first time can be rather intimidating.  To this
302 end a copy of the GNU Privacy Handbook has been included here in doc/gnupg.  It
303 has not been modified and was simply copied from the original location at
304 <https://www.gnupg.org/gph/en/manual.html>.