Commit Graph

49462 Commits

Author SHA1 Message Date
Johannes Schindelin
be311e2381 git-wrapper: Allow git-cmd.exe to add only /cmd/ to the PATH
The idea of having the Git wrapper in the /cmd/ directory is to allow
adding only a *tiny* set of executables to the search path, to allow
minimal interference with other software applications. It is quite
likely, for example, that other software applications require their own
version of zlib1.dll and would not be overly happy to find the version
Git for Windows ships.

The /cmd/ directory also gives us the opportunity to let the Git wrapper
handle the `gitk` script. It is a Tcl/Tk script that is not recognized
by Windows, therefore calling `gitk` in `cmd.exe` would not work, even
if we add all of Git for Windows' bin/ directories.

So let's use the /cmd/ directory instead of adding /mingw??/bin/ and
/usr/bin/ to the PATH when launching Git CMD.

The way we implemented Git CMD is to embed the appropriate command line
as string resource into a copy of the Git wrapper. Therefore we extended
that syntax to allow for configuring a minimal search path.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-28 19:15:57 +01:00
Johannes Schindelin
4766c3db08 git-wrapper: optionally skip cd $HOME when configured via resources
We recently added the ability to configure copies of the Git wrapper to
launch custom command-lines, configured via plain old Windows resources.
The main user is Git for Windows' `git-bash.exe`, of course. When the
user double-clicks the `git bash` icon, it makes sense to start the Bash
in the user's home directory.

Third-party software, such as TortoiseGit or GitHub for Windows, may
want to start the Git Bash in another directory, though.

Now, when third-party software wants to call Git, they already have to
construct a command-line, and can easily pass a command-line option
`--no-cd` (which this commit introduces), and since that option is not
available when the user double-clicks an icon on the Desktop or in the
Explorer, let's keep the default to switch to the home directory if the
`--no-cd` flag was not passed along.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-28 19:04:24 +01:00
Johannes Schindelin
b072d688cf git-wrapper: make command-line argument skipping more robust
When we rewrite the command-line to call the *real* Git, we want to skip
the first command-line parameter. The previous code worked in most
circumstances, but was a bit fragile because it assumed that no fancy
quoting would take place.

In the next commit, we will want to have the option to skip more than
just one command-line parameter, so we have to be much more careful with
the command-line handling.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-28 19:04:21 +01:00
Johannes Schindelin
83553058ba git-wrapper: remove 'gui' and 'citool' handling
In the meantime, Git for Windows learned to handle those subcommands
quite well itself; There is no longer a need to special-case them in the
wrapper.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-28 19:04:19 +01:00
Johannes Schindelin
2ac10bd7c5 Let the Git wrapper replace cmd\gitk.cmd, too
In a push to polish Git for Windows more, we are moving away from
scripts toward proper binaries.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-28 19:04:17 +01:00
Johannes Schindelin
41c1e1f32c Git wrapper: allow overriding what executable is called
The Git wrapper does one thing, and does it well: setting up the
environment required to run Git and its scripts, and then hand off to
another program.

We already do this for the Git executable itself; in Git for Windows'
context, we have exactly the same need also when calling the Git Bash or
Git CMD. However, both are tied to what particular shell environment you
use, though: MSys or MSys2 (or whatever else cunning developers make
work for them). This means that the Git Bash and Git CMD need to be
compiled in the respective context (e.g. when compiling the
mingw-w64-git package in the MSys2 context).

Happily, Windows offers a way to configure compiled executables:
resources. So let's just look whether the current executable has a
string resource and use it as the command-line to execute after the
environment is set up. To support MSys2's Git Bash better (where
`mintty` should, but might not, be available), we verify whether the
specified executable exists, and keep looking for string resources if it
does not.

For even more flexibility, we expand environment variables specified as
`@@<VARIABLE-NAME>@@`, and for convenience `@@EXEPATH@@` expands into
the directory in which the executable resides.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-28 19:04:16 +01:00
Johannes Schindelin
1b1e072595 fixup! git-wrapper: add code to configure command-lines to be launched
The intention of this change was to make it easier for the Git for
Windows installer, or for power Git users, to change the command-line
launched when executing Git Bash. The idea was to allow reconfiguring
the Git Bash to run different terminals than MSys2's default, mintty.

However, the comments this commit got let no room for misunderstanding:
at least three developers who gained trust by being active in the Git
for Windows offered their vetoes.

RIP, resource editor.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-28 19:04:13 +01:00
Johannes Schindelin
c5cdad2f8d fixup! git-wrapper: allow the edit-res.exe copy to change icons, too
Instead of making it possible to change the .exe icon of git-bash.exe or
git-cmd.exe, this change was compared to adding the option to format USB
drives.

Let's get rid of this change, therefore, before real people are harmed.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-28 19:04:12 +01:00
Johannes Schindelin
580472680d git-wrapper: inherit stdin/stdout/stderr even without a console
Otherwise the output of Git commands cannot be caught by, say, Git GUI
(because it is running detached from any console, which would make
`git.exe` inherit the standard handles implicitly).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-28 19:03:31 +01:00
Junio C Hamano
2c97724d5e Prepare for 2.3.5
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-03-28 09:36:30 -07:00
Junio C Hamano
4eea8e3fa0 Merge branch 'sg/completion-gitcomp-nl-for-refs' into maint
Code clean-up.

* sg/completion-gitcomp-nl-for-refs:
  completion: use __gitcomp_nl() for completing refs
2015-03-28 09:33:15 -07:00
Junio C Hamano
a070d621ed Merge branch 'jk/simplify-csum-file-sha1fd-check' into maint
Code simplification.

* jk/simplify-csum-file-sha1fd-check:
  sha1fd_check: die when we cannot open the file
2015-03-28 09:33:15 -07:00
Junio C Hamano
b265061937 Merge branch 'tg/test-index-v4' into maint
A test fix.

* tg/test-index-v4:
  t1700: make test pass with index-v4
2015-03-28 09:33:14 -07:00
Junio C Hamano
2217579cde Merge branch 'nd/doc-git-index-version' into maint
Doc clean-up.

* nd/doc-git-index-version:
  git.txt: list index versions in plain English
2015-03-28 09:33:13 -07:00
Junio C Hamano
245dd15aa9 Merge branch 'ct/prompt-untracked-fix' into maint
The prompt script (in contrib/) did not show the untracked sign
when working in a subdirectory without any untracked files.

* ct/prompt-untracked-fix:
  git prompt: use toplevel to find untracked files
2015-03-28 09:33:12 -07:00
Junio C Hamano
b70cec0a2e Merge branch 'ws/grep-quiet-no-pager' into maint
Even though "git grep --quiet" is run merely to ask for the exit
status, we spawned the pager regardless.  Stop doing that.

* ws/grep-quiet-no-pager:
  grep: fix "--quiet" overwriting current output
2015-03-28 09:33:11 -07:00
Junio C Hamano
a5d3154854 Merge branch 'jc/submitting-patches-mention-send-email' into maint
Recommend format-patch and send-email for those who want to submit
patches to this project.

* jc/submitting-patches-mention-send-email:
  SubmittingPatches: encourage users to use format-patch and send-email
2015-03-28 09:33:10 -07:00
Junio C Hamano
73d8bfde32 Merge branch 'jk/cleanup-failed-clone' into maint
An failure early in the "git clone" that started creating the
working tree and repository could have resulted in some directories
and files left without getting cleaned up.

* jk/cleanup-failed-clone:
  clone: drop period from end of die_errno message
  clone: initialize atexit cleanup handler earlier
2015-03-28 09:33:09 -07:00
Junio C Hamano
591a1daa7c Merge branch 'jk/fetch-pack' into maint
"git fetch" that fetches a commit using the allow-tip-sha1-in-want
extension could have failed to fetch all the requested refs.

* jk/fetch-pack:
  fetch-pack: remove dead assignment to ref->new_sha1
  fetch_refs_via_pack: free extra copy of refs
  filter_ref: make a copy of extra "sought" entries
  filter_ref: avoid overwriting ref->old_sha1 with garbage
2015-03-28 09:33:08 -07:00
Junio C Hamano
07e3f27f48 Merge branch 'tg/fix-check-order-with-split-index' into maint
The split-index mode introduced at v2.3.0-rc0~41 was broken in the
codepath to protect us against a broken reimplementation of Git
that writes an invalid index with duplicated index entries, etc.

* tg/fix-check-order-with-split-index:
  read-cache: fix reading of split index
2015-03-28 09:33:07 -07:00
Junio C Hamano
9f389aa492 Merge branch 'jk/prune-with-corrupt-refs' into maint
"git prune" used to largely ignore broken refs when deciding which
objects are still being used, which could spread an existing small
damage and make it a larger one.

* jk/prune-with-corrupt-refs:
  refs.c: drop curate_packed_refs
  repack: turn on "ref paranoia" when doing a destructive repack
  prune: turn on ref_paranoia flag
  refs: introduce a "ref paranoia" flag
  t5312: test object deletion code paths in a corrupted repository
2015-03-28 09:33:06 -07:00
Thomas Ackermann
b37996e251 2.3.2 release notes: typofix
Signed-off-by: Thomas Ackermann <th.acker@arcor.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-03-28 09:29:29 -07:00
Junio C Hamano
d8279c7d85 Merge branch 'jk/tag-h-column-is-a-listing-option' into maint
"git tag -h" used to show the "--column" and "--sort" options
that are about listing in a wrong section.

* jk/tag-h-column-is-a-listing-option:
  tag: fix some mis-organized options in "-h" listing
2015-03-27 13:00:23 -07:00
Junio C Hamano
a730ea3c3a Merge branch 'jk/smart-http-hide-refs' into maint
The transfer.hiderefs support did not quite work for smart-http
transport.

* jk/smart-http-hide-refs:
  upload-pack: do not check NULL return of lookup_unknown_object
  upload-pack: fix transfer.hiderefs over smart-http
2015-03-27 13:00:21 -07:00
Junio C Hamano
792c57273f Merge branch 'js/completion-ctags-pattern-substitution-fix' into maint
The code that reads from the ctags file in the completion script
(in contrib/) did not spell ${param/pattern/string} substitution
correctly, which happened to work with bash but not with zsh.

* js/completion-ctags-pattern-substitution-fix:
  contrib/completion: escape the forward slash in __git_match_ctag
2015-03-27 13:00:18 -07:00
Junio C Hamano
90329592b9 Update mailmap to spell out "Alexander Kuleshov"
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-03-27 12:58:18 -07:00
Sebastian Schuberth
129260cbd4 docs: clarify "preserve" option wording for git-pull
The "also" sounds as if "preserve" does a rebase as an additional
step that "true" would not do, but that is not the case.  Clarify
this by omitting "also", and rewording the sentence a bit.

Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-03-26 13:19:26 -07:00
Phil Hord
fddfaf8a22 git-push.txt: clean up force-with-lease wording
The help text for the --force-with-lease option to git-push
does not parse cleanly.  Clean up the wording and syntax to
be more sensible.  Also remove redundant information in the
"--force-with-lease alone" description.

Signed-off-by: Phil Hord <hordp@cisco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-03-26 11:41:24 -07:00
dscho
521863b6ee Merge pull request #42 from dscho/msys2-wrapper
git-wrapper: support MSys2
2015-03-26 08:19:41 +00:00
Johannes Schindelin
35e219dff2 git-wrapper: allow the edit-res.exe copy to change icons, too
As we already allow changing text resources, it is a very small step to
allow changing the `.exe` icon, too.

So let's just do it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-26 09:05:14 +01:00
Johannes Schindelin
304d297463 git-wrapper: add code to configure command-lines to be launched
To allow the Git wrapper to replace the `git-bash.bat` script (which
would always open the Win32 console, even if the user wants to use a
different terminal emulator), we need to offer a way to configure
*which* command-line to run.

We need to recompile the git-wrapper with the `-mwindows` flag to
declare that this is a GUI program (not a console program). Having to
recompile it anyway, let's put the new code in a conditionally compiled
section so that the builtins (for which we use the git-wrapper, too) do
not need to carry around that code.

To configure the command-line, we use a way that is very typical for
Windows: resources. Windows resources are data that are stored inside
.exe files, but can be changed *after* compilation. Therefore, this
facility is *exactly* what we want: we can easily copy the .exe to the
new name `git-bash.exe`, configure that executable to run the Bash, and
then copy it again to the new name `git-cmd.exe` and configure that
executable to run `cmd.exe` instead.

For even more flexibility, we expand environment variables specified as
`@@<VARIABLE-NAME>@@`, and for convenience `@@EXEPATH@@` expands into
the directory in which the executable resides.

Sadly, an executable cannot configure itself: the `.exe` file is locked
while the process is running. This means we have to have a separate
executable to edit the resources anyway, so let's just enhance the Git
wrapper *itself*: when copied to the new name `edit-res.exe`, it can
edit other copies of the Git wrapper like so:

	edit-res.exe git-cmd.exe command '@@COMSPEC@@ /K'

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-26 09:05:12 +01:00
Johannes Schindelin
d7ff2b2b16 git-wrapper: prepare for executing configurable command-lines
We are about to use the Git wrapper to call the Git Bash of Git for
Windows. All the wrapper needs to do for that is to set up the
environment variables, use the home directory as working directory and
then hand off to a user-specified command-line.

We prepare the existing code for this change by introducing flags to set
up the environment variables, to launch a non-Git program, and to use
the home directory as working directory.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-26 09:05:11 +01:00
Johannes Schindelin
9dbe2649f7 git-wrapper: support MSys2
The original purpose of the Git wrapper is to run from inside Git for
Windows' /cmd/ directory, to allow setting up some environment variables
before Git is allowed to take over.

Due to differences in the file system layout, MSys2 requires some
changes for that to work.

In addition, we must take care to set the `MSYSTEM` environment variable
to `MINGW32` or `MINGW64`, respectively, to allow MSys2 to be configured
correctly in case Git launches a shell or Perl script.

We also need to change the `TERM` variable to `cygwin` instead of
`msys`, otherwise the pager `less.exe` (spawned e.g. by `git log`) will
simply crash with a message similar to this one:

	1 [main] less 9832 cygwin_exception::open_stackdumpfile:
	Dumping stack trace to less.exe.stackdump

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-26 09:00:18 +01:00
Johannes Schindelin
4f5f8566a8 fixup! Let the Git wrapper serve as a drop-in replacement for builtins
Prepare to prefix the command-line with non-builtins. We are now using
the Git wrapper to call non-Git programs, too.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-25 20:22:22 +01:00
Junio C Hamano
777c55a616 report_path_error(): move to dir.c
The expected call sequence is for the caller to use match_pathspec()
repeatedly on a set of pathspecs, accumulating the "hits" in a
separate array, and then call this function to diagnose a pathspec
that never matched anything, as that can indicate a typo from the
command line, e.g. "git commit Maekfile".

Many builtin commands use this function from builtin/ls-files.c,
which is not a very healthy arrangement.  ls-files might have been
the first command to feel the need for such a helper, but the need
is shared by everybody who uses the "match and then report" pattern.

Move it to dir.c where match_pathspec() is defined.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-03-24 14:12:10 -07:00
Nguyễn Thái Ngọc Duy
70320541ec git.txt: list index versions in plain English
At the first look, a user may think the default version is "23". Even
with UNIX background, there's no reference anywhere close that may
indicate this is glob or regex.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-03-24 08:06:00 -07:00
Johannes Schindelin
a938a03450 fixup! mingw: Fix git-svn tests 2015-03-24 16:03:41 +01:00
nalla
1a5e8bdaba Merge pull request #38 from dscho/mingw-environment
Fix access violations when cloning/fetching via HTTPS
2015-03-24 11:25:18 +01:00
nalla
3595b7c304 Merge pull request #40 from nalla/git-terminal-prompt
mingw: Proper `git_terminal_prompt` with `xterm`
2015-03-24 11:25:17 +01:00
nalla
73a6656b63 Merge 'poll_inftim' into HEAD
This was originally 'pull request #330 from ethomson/poll_inftim' in
msysgit/git.

poll: honor the timeout on Win32

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-24 11:25:16 +01:00
nalla
c862c02042 Merge pull request #34 from dscho/git-wrapper
Use msysGit's `git-wrapper` instead of the builtins
2015-03-24 11:25:15 +01:00
nalla
d8efbc0c0d Merge 'non-win-fixes' into HEAD 2015-03-24 11:25:14 +01:00
nalla
caf2670ac8 Merge pull request #239 from sschuberth/taskkill
git-gui/gitk: Do not use a Cygwin-specific kill flag on Windows
2015-03-24 11:25:13 +01:00
nalla
bb4d5734e1 Merge pull request #122 from kblees/kb/long-paths-v2
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-24 11:25:13 +01:00
nalla
db8cbf020b Merge remote-tracking branch 'kblees/kb/fscache-v4-tentative-1.8.5' into thicket-1.8.5.2 2015-03-24 11:25:12 +01:00
nalla
c18adde009 Merge remote-tracking branch 't-b/sideband-bug'
This will allow us to work around the push issues pointed out in
https://github.com/msysgit/git/issues/101.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2015-03-24 11:25:11 +01:00
nalla
a6920995b9 Merge pull request #24 from gitter-badger/gitter-badge
Add a Gitter chat badge to README.md
2015-03-24 11:25:10 +01:00
nalla
7c08957c9f Merge pull request #14 from dscho/readme
Add a README.md for GitHub goodness.
2015-03-24 11:25:09 +01:00
nalla
d4519e9ba3 Merge 'fix-is-exe' into HEAD 2015-03-24 11:25:08 +01:00
nalla
d4c0906811 Merge 'fix-externals' into HEAD 2015-03-24 11:25:08 +01:00