Junio C Hamano 1f7903a371 builtin-apply: prevent non-explicit permission changes
A git patch that does not change the executable bit records the mode bits
on its "index" line.  "git apply" used to interpret this mode exactly the
same way as it interprets the mode recorded on "new mode" line, as the
wish by the patch submitter to set the mode to the one recorded on the
line.

The reason the mode does not agree between the submitter and the receiver
in the first place is because there is _another_ commit that only appears
on one side but not the other since their histories diverged, and that
commit changes the mode.  The patch has "index" line but not "new mode"
line because its change is about updating the contents without affecting
the mode.  The application of such a patch is an explicit wish by the
submitter to only cherry-pick the commit that updates the contents without
cherry-picking the commit that modifies the mode.  Viewed this way, the
current behaviour is problematic, even though the command does warn when
the mode of the path being patched does not match this mode, and a careful
user could detect this inconsistencies between the patch submitter and the
patch receiver.

This changes the semantics of the mode recorded on the "index" line;
instead of interpreting it as the submitter's wish to set the mode to the
recorded value, it merely informs what the mode submitter happened to
have, and the presense of the "index" line is taken as submitter's wish to
keep whatever the mode is on the receiving end.

This is based on the patch originally done by Alexander Potashev with a
minor fix; the tests are mine.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2009-01-02 13:24:12 -08:00
2007-06-07 00:04:01 -07:00
2008-12-16 22:13:36 -08:00
2008-05-26 19:10:43 -07:00
2008-12-16 22:13:36 -08:00
2007-06-07 00:04:01 -07:00
2007-06-07 00:04:01 -07:00
2007-06-07 00:04:01 -07:00
2008-05-25 14:25:02 -07:00
2008-07-20 13:01:26 -07:00
2008-03-14 00:16:42 -07:00
2008-05-25 14:25:02 -07:00
2008-08-01 21:10:40 -07:00
2008-05-26 19:49:01 -07:00
2007-06-07 00:04:01 -07:00
2008-07-16 14:03:24 -07:00
2008-07-16 14:03:24 -07:00
2007-06-07 00:04:01 -07:00
2008-02-05 00:46:49 -08:00
2008-03-05 10:32:01 -08:00
2008-02-25 23:57:35 -08:00
2008-06-08 14:27:46 -07:00
2008-05-27 22:34:19 -07:00
2008-08-06 13:40:53 -07:00
2008-05-25 14:25:02 -07:00
2008-05-06 16:50:17 -07:00
2008-07-25 12:36:16 -07:00
2007-12-13 23:04:26 -08:00
2008-02-09 23:16:51 -08:00
2008-02-25 23:57:35 -08:00
2007-06-07 00:04:01 -07:00
2007-11-02 16:27:37 -07:00
2007-06-07 00:04:01 -07:00
2008-03-08 21:29:56 -08:00
2008-07-08 13:05:11 -07:00
2008-12-16 22:13:36 -08:00
2008-05-25 13:41:37 -07:00
2008-07-07 13:16:33 -07:00
2007-11-09 21:14:10 -08:00
2008-06-26 16:51:23 -07:00
2008-02-25 19:57:06 -08:00
2008-03-02 15:11:07 -08:00
2008-07-16 14:03:24 -07:00
2008-03-02 15:11:07 -08:00
2008-05-25 14:25:02 -07:00
2008-05-25 14:25:02 -07:00
2008-03-14 00:16:42 -07:00

////////////////////////////////////////////////////////////////

	GIT - the stupid content tracker

////////////////////////////////////////////////////////////////

"git" can mean anything, depending on your mood.

 - random three-letter combination that is pronounceable, and not
   actually used by any common UNIX command.  The fact that it is a
   mispronunciation of "get" may or may not be relevant.
 - stupid. contemptible and despicable. simple. Take your pick from the
   dictionary of slang.
 - "global information tracker": you're in a good mood, and it actually
   works for you. Angels sing, and a light suddenly fills the room.
 - "goddamn idiotic truckload of sh*t": when it breaks

Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

Git is an Open Source project covered by the GNU General Public License.
It was originally written by Linus Torvalds with help of a group of
hackers around the net. It is currently maintained by Junio C Hamano.

Please read the file INSTALL for installation instructions.
See Documentation/tutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands,
and "man git-commandname" for documentation of each command.
CVS users may also want to read Documentation/cvs-migration.txt.

Many Git online resources are accessible from http://git.or.cz/
including full documentation and Git related tools.

The user discussion and development of Git take place on the Git
mailing list -- everyone is welcome to post bug reports, feature
requests, comments and patches to git@vger.kernel.org. To subscribe
to the list, send an email with just "subscribe git" in the body to
majordomo@vger.kernel.org. The mailing list archives are available at
http://marc.theaimsgroup.com/?l=git and other archival sites.

The messages titled "A note from the maintainer", "What's in
git.git (stable)" and "What's cooking in git.git (topics)" and
the discussion following them on the mailing list give a good
reference for project status, development direction and
remaining tasks.
Description
No description provided
Readme 235 MiB
Languages
C 50.1%
Shell 38.4%
Perl 5.1%
Tcl 3.3%
Python 0.8%
Other 2%