Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

History no longer shown for renamed files #5944

Closed
CharonX2003 opened this issue Dec 18, 2018 · 80 comments · May be fixed by #6132
Closed

History no longer shown for renamed files #5944

CharonX2003 opened this issue Dec 18, 2018 · 80 comments · May be fixed by #6132

Comments

@CharonX2003
Copy link

CharonX2003 commented Dec 18, 2018

Do you want to request a feature or report a bug?
Bug

What is the current behavior?
History is not shown for files before their rename (but blame correctly identifies commits)

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem.
Take a file with history, rename it, perform additional commits after changing it.

What is the expected behavior?
History is shown for the file before it got renamed (as it currently works for Blame)

Environment you encounter the issue:

  • Git Extensions 3.00.00.4433
  • Build fca7cf2
  • Git 2.20.0.windows.1
  • Microsoft Windows NT 10.0.17134.0
  • .NET Framework 4.7.3260.0
  • DPI 96dpi (no scaling)

(In settings "Follow renames in History" is enabled, "Follow exact renames and copies only" has been tried as both disabled and enabled - the files have 100% similarity".)

Did this work in previous version of GitExtensions (which)?

I recall the history being shown correctly for the renamed files in Version 2.5x

@RussKie
Copy link
Member

RussKie commented Dec 18, 2018

Are you able provide a demo repo?

@vbjay
Copy link
Contributor

vbjay commented Dec 18, 2018

Notice rename settings
image

@mstv
Copy link
Member

mstv commented Dec 19, 2018

I have never seen it working. Renaming/cloning files is Git's great weakness.
Here is a sample branch with renamed appveyor.yml:
https://github.com/mstv/gitextensions/tree/repro/nre_getbrushforrevision

@gerhardol
Copy link
Member

gerhardol commented Dec 19, 2018

Works for me

Edit:

@gerhardol, do you really see commits from before the file was renamed?!?
@mstv
Many posts since this comment and I had misunderstood the question, your comment made it clear.

@mstv
Copy link
Member

mstv commented Dec 19, 2018

@gerhardol, do you really see commits from before the file was renamed?!?

@CharonX2003
Copy link
Author

CharonX2003 commented Dec 20, 2018

@RussKie I'll try to create a sample repository that I can post (hopefully before the end of the week.)

@mstv I recall it working before too, and - oddly enough - Blame is able to track the orignal commits (i.e. the commits before the files were renamed)

@drewnoakes
Copy link
Member

@mstv what git arguments do you see in the command log for this?

@drewnoakes
Copy link
Member

@CharonX2003 you could also check the command log and let us know what git arguments are being used when you see the problem.

@mstv
Copy link
Member

mstv commented Dec 20, 2018

check-attr -z diff text crlf eol -- "appveyorX.yml"

@mstv
Copy link
Member

mstv commented Dec 20, 2018

and
-c log.showSignature=false log -z --pretty=format:"%H%T%P%n%at%n%ct%n%e%n%aN%n%aE%n%cN%n%cE%n%s%n%n%b" --all --boundary --max-count=100000 --name-only --parents --find-renames --find-copies -- "appveyorX.yml" "fatal: unrecognized argument: --format"
regardless whether Show Full History grafik is on or off
I doubt that "fatal: unrecognized argument: --format" is a correct git argument.
This should have thrown an exception instead in my opinion.

@CharonX2003
Copy link
Author

CharonX2003 commented Dec 20, 2018

I'm also seeing the "fatal: unrecognized argument: --format" string...

File name:   C:\Program Files\Git\bin\git.exe
Arguments:   -c log.showSignature=false log --format="%n" --name-only --format  --find-renames --find-copies -- "src/main.cpp"

File name:   C:\Program Files\Git\bin\git.exe
Arguments:   show-ref --dereference

File name:   C:\Program Files\Git\bin\git.exe
Arguments:   -c log.showSignature=false log -z --pretty=format:"%H%T%P%n%at%n%ct%n%e%n%aN%n%aE%n%cN%n%cE%n%s%n%n%b" --all --boundary --not --glob=notes --not --max-count=100000 --full-history --simplify-merges  --name-only --parents --find-renames --find-copies -- "src/main.cpp" "fatal: unrecognized argument: --format"

File name:   C:\Program Files\Git\bin\git.exe
Arguments:   -c diff.submodule=short -c diff.noprefix=false diff --no-color --ignore-all-space --unified=3 -M -C "14b663c94e0d959622f2d0cb8b5d40875290d58d" "266db14452f69cad00a8636db3d26300249c7f1c" -- "src/main.cpp"

@drewnoakes
Copy link
Member

@mstv @CharonX2003 looks like you found the clue that'll break this.

The string fatal: unrecognized argument: --format looks like it came out of git, suggesting that an earlier command produced that string and we blindly passed it forward to the log command.

Is there an earlier command with a non-zero exit code (5th column)?

@drewnoakes
Copy link
Member

Ok I think I found it. This one's on me...

An obviously bad refactor in a306eb6, adding a duplicate --format argument.

I'll get a PR together now.

@mstv
Copy link
Member

mstv commented Dec 20, 2018

There is only:

21:25:17.652	104ms	27288		0	git	ls-files -z --unmerged	F:\Build\gitextensions\
21:25:23.051	101ms	19028		128	git	-c log.showSignature=false log --format="%n" --name-only --format  --find-renames --find-copies -- "appveyorX.yml"	F:\Build\gitextensions\
21:25:23.164	92ms	14068	UI	0	git	rev-parse HEAD	F:\Build\gitextensions\
21:25:23.259	119ms	21344	UI	0	git	show-ref --dereference	F:\Build\gitextensions\
21:25:23.385	251ms	8536		  	git	-c log.showSignature=false log -z --pretty=format:"%H%T%P%n%at%n%ct%n%e%n%aN%n%aE%n%cN%n%cE%n%s%n%n%b" --all --boundary --not --glob=notes --not --max-count=100000 --name-only --parents --find-renames --find-copies -- "appveyorX.yml" "fatal: unrecognized argument: --format"	F:\Build\gitextensions\
21:25:23.830	100ms	34268	UI	0	git	check-attr -z diff text crlf eol -- "appveyorX.yml"	F:\Build\gitextensions\

The output of git show-ref --dereference F:\Build\gitextensions\ is empty (\ replaced with /).

@drewnoakes
Copy link
Member

It's the line with the 128. That's git telling us it's upset. You can see the --format argument is present twice.

drewnoakes added a commit that referenced this issue Dec 20, 2018
Fixes a but introduced in a306eb6.

Relates to #5944
@mstv
Copy link
Member

mstv commented Dec 20, 2018

Yes, of course.

Does Git return non-zero results that often that GE avoids throwing an exception in this case?

@drewnoakes
Copy link
Member

Ugh, apologies everyone. I accidentally pushed to this repo 00b8daa because I was rushing. Rather than back it out and potentially cause more trouble, if anyone objects I will file a revert PR.

However hopefully that push fixes this issue. Sorry again.

@mstv
Copy link
Member

mstv commented Dec 20, 2018

The return code is 0 now. Though the number of displayed commits has not changed.

2018-12-20T21:45:37.3137927+01:00	85	36904		0	git	ls-files -z --unmerged	F:\Build\gitextensions\
2018-12-20T21:45:40.6227129+01:00	115	18088		0	git	ls-files -z --unmerged	F:\Build\gitextensions\
2018-12-20T21:45:42.9440076+01:00	158	15732		0	git	-c log.showSignature=false log --format="%n" --name-only  --find-renames --find-copies -- "appveyorX.yml"	F:\Build\gitextensions\
2018-12-20T21:45:43.1185298+01:00	79	14212	UI	0	git	rev-parse HEAD	F:\Build\gitextensions\
2018-12-20T21:45:43.2030405+01:00	102	13548	UI	0	git	show-ref --dereference	F:\Build\gitextensions\
2018-12-20T21:45:43.3465587+01:00	367	27344		0	git	-c log.showSignature=false log -z --pretty=format:"%H%T%P%n%at%n%ct%n%e%n%aN%n%aE%n%cN%n%cE%n%s%n%n%b" --all --boundary --max-count=100000 --full-history --simplify-merges  --name-only --parents --find-renames --find-copies -- "appveyorX.yml"	F:\Build\gitextensions\
2018-12-20T21:45:43.9601367+01:00	95	28968	UI	0	git	check-attr -z diff text crlf eol -- "appveyorX.yml"	F:\Build\gitextensions\

In general: Does Git return non-zero results that often that GE avoids throwing an exception in this case?

@RussKie
Copy link
Member

RussKie commented Dec 20, 2018

you've misspelt it Drew, second "t" is missing 🤣
image

@drewnoakes
Copy link
Member

second "t" is missing

Haha. Yet another reason not to rush things....

Does Git return non-zero results that often that GE avoids throwing an exception in this case?

Haven't looked into it. There's a single abstraction over process loading and execution, with different ways of reading out of such processes with different trade offs. It's possible that we can be more strict in at least some of those cases, if not all.

@drewnoakes
Copy link
Member

the number of displayed commits has not changed

I see the next problem, and it should be the last one. Let me try again, without rushing this time :)

@drewnoakes
Copy link
Member

The code in FormFileHistory has some logic to try and work around a bug it references, with a now-dead URL about the --follow argument.

For the log command:

-c log.showSignature=false log -z --pretty=format:"%H%T%P%n%at%n%ct%n%e%n%aN%n%aE%n%cN%n%cE%n%s%n%n%b" --all --boundary --max-count=100000 --full-history --simplify-merges --name-only --parents --find-renames --find-copies -- "my-file.ext"

Adding --follow to the list of arguments produces a lot more output. However in #2363 a few years back it seems there was a problem with too much stuff appearing in that output.

This needs a more careful review than I have the time for right now as it's late here.

@drauch
Copy link

drauch commented Jan 16, 2019

Is there any update on this? This makes 3.x really unusable for us. We use Git foremost for viewing the history of files... this should be a showstopper bug :(

@RussKie
Copy link
Member

RussKie commented Jan 17, 2019

@drauch what version are you running?
@drewnoakes has pushed a fix into master about a month ago, have you tried the latest canary build?

@RussKie
Copy link
Member

RussKie commented Jan 17, 2019

this should be a showstopper bug :(

Whilst this bug can certainly be annoying and cause discomfort, I can't classify it as a "blocker" or a "showstopper", I am afraid.
Showing history for renamed files isn't the primary or the only function of the app.

We also appreciate help and accept pull requests with corrections.

@vbjay
Copy link
Contributor

vbjay commented Jan 17, 2019

Not to mention, git doesn't really track filenames per se. This should explain it. http://thisbythem.com/blog/preserving-history-when-renaming-files-in-git/. Yes they have trees so git knows that filex is in directory y because the blob is linked in that tree.

Let's look at an example.

I create a file in pets folder called currentPet.txt. It contains

cat

in the file. I commit this file which creates a blob( let's call it bCat). A tree is created( let's call it TPets. and it knows it is Pets). TPets points to bCat. The commit called cCat points to tCat and has other data.

Work is done. You now move currentPet.txt from Pets folder and move it to Household folder. You commit this which creates cCat1 with THouseHold with bCat. Notice I didn't change the name of the blob that contains the contents of the file. That's because git reused the same blob. A different tree is pointing to the blob but it is still using the same blob.

Git doesn't track filepathX has contentx. It just builds a tree of the file paths that are changed. The cool thing is that trees can point to other trees and blobs. So you have a repo with 100 files in it. You commit with one file changed. So the new root tree (the one the commit points to) will point to a hierarchy of trees representing the structure of the folders/files currently committed. The blob that you just committed will be pointed to by a new tree which will be pointed to by another tree and so on till you get to the root tree that the commit points to.

So this is why renames in git are tricky. Context of what head is pointing to, whether you want renames or not and other factors play a role in getting history.

A rename in git internally is really remove all content from old file and add it to new file.

image
image
image
image

@vbjay
Copy link
Contributor

vbjay commented Jan 17, 2019

We also have settings that affect how we follow renames.
image

@RussKie
Copy link
Member

RussKie commented Jun 3, 2019

Great to hear, though I don't think we've done anything in this area... 😕
Unless, of course, Jay snuck in his fix while I was asleep.

@h0lg
Copy link
Contributor

h0lg commented Jun 4, 2019

Nope, still broken for me in 3.1.1.6049 :(

@StepKie
Copy link

StepKie commented Jun 5, 2019

Nope, still broken for me in 3.1.1.6049 :(

Do you have [log] follow = true in your .gitconfig? Otherwise it does not work ...

@fschmied
Copy link
Contributor

fschmied commented Jun 6, 2019

@Hottemax Nice idea, but the point of this issue is that GitExtensions should follow renames (if the feature is turned on within GitExtensions) independently from whether [log] follow = true is configured or not.

If you try to work around the bug using the git config, you'll likely see the behavior described in #5944 (comment) - the history list view will follow the renames, but the tabs below won't know what to do with the corresponding commits.

@StepKie
Copy link

StepKie commented Jun 6, 2019

@fschmied You are right of course, it should work independent of your gitconfig.
I was merely remarking that it works in the current version when this option is set, as opposed to before.

@fschmied
Copy link
Contributor

fschmied commented Jun 7, 2019

@Hottemax Can you also click on all the history entries (before the move) and see something in the tabs below (Commit, Diff, ...)?

@StepKie
Copy link

StepKie commented Jun 7, 2019

@Hottemax Can you also click on all the history entries (before the move) and see something in the tabs below (Commit, Diff, ...)?

Yes.

fschmied added a commit to fschmied/gitextensions that referenced this issue Jun 16, 2019
a306eb6 by mistake removed the "--follow" option when getting the git
log for history. This is reverted by this commit.
1f6b0ca by mistake removed parsing of the file name data into
GitRevision.Name. This is also reverted by this commit.
Together, these should fix rename tracking in the file history.

# Conflicts:
#	GitCommands/RevisionReader.cs
@fschmied
Copy link
Contributor

@Hottemax I finally found the time to test the workaround, but unfortunately, it works only half-way for me. While [log] follow=true will cause all the commits to be shown for a file (yes!), three of the tabs below don't work for commits prior to the rename.

grafik

@fschmied
Copy link
Contributor

fschmied commented Jun 16, 2019

I've followed @mstv's advice and have created a WIP PR for my quickfix to get an automatic build based on 3.1.1: #6807.

The latest artifacts are here: https://ci.appveyor.com/project/gitextensions/gitextensions/builds/25312244/artifacts.

gerhardol pushed a commit to gerhardol/gitextensions that referenced this issue Jun 29, 2019
a306eb6 by mistake removed the "--follow" option when getting the git
log for history. This is reverted by this commit.
1f6b0ca by mistake removed parsing of the file name data into
GitRevision.Name. This is also reverted by this commit.
Together, these should fix rename tracking in the file history.

# Conflicts:
#	GitCommands/RevisionReader.cs
gerhardol pushed a commit to gerhardol/gitextensions that referenced this issue Jun 29, 2019
a306eb6 by mistake removed the "--follow" option when getting the git
log for history. This is reverted by this commit.
1f6b0ca by mistake removed parsing of the file name data into
GitRevision.Name. This is also reverted by this commit.
Together, these should fix rename tracking in the file history.
gerhardol added a commit that referenced this issue Jul 5, 2019
Fix #5944 by fixing --follow and revision reading
@gbburkhardt
Copy link

Excellent.

@jrfnl
Copy link

jrfnl commented Aug 5, 2019

Looks like this is still not completely fixed.

See: #6807 (comment)

Let me know if you need more info.

@gerhardol
Copy link
Member

@jfrnl
The fix in master should be the same functionality as in 2.x
Renames are not finished - #6132 is a wip for a more complete solution
See @vbjay explanation and links to why renames are not trivial, it is not tracked in Git and has to be calculated.

@IanKemp
Copy link

IanKemp commented Aug 29, 2019

When can we expect a 3.2 release including the fix from #6879? It's not perfect but it's far better than no history at all...

@pmiossec
Copy link
Member

@IanKemp We hope to release a version in a not so long time even if we release when we are confident enough.

But if you can't wait, you could try the development version that is working quite well: https://github.com/gitextensions/gitextensions#downloads

@IanKemp
Copy link

IanKemp commented Aug 30, 2019

@IanKemp We hope to release a version in a not so long time even if we release when we are confident enough.

But if you can't wait, you could try the development version that is working quite well: https://github.com/gitextensions/gitextensions#downloads

Thanks for that - is it safe to download the latest Portable.zip and overwrite the contents of my current Git Extensions install? In other words, would that break my install? (Not talking about potential breakage of config files etc. - that is an accepted and understood risk by me.)

@RussKie
Copy link
Member

RussKie commented Aug 30, 2019 via email

@fschmied
Copy link
Contributor

Is this fix in 3.2 and 3.2.1? (3.2 doesn't have any release notes, and the notes for 3.2.1 don't seem to mention this issue.)

@pmiossec
Copy link
Member

Yes.

@h0lg
Copy link
Contributor

h0lg commented Sep 23, 2019

Works like a charm again <3 This issue has been a major drag for me over the last months. Thanks to all involved in solving it!

Fabman08 added a commit to Fabman08/gitextensions that referenced this issue Oct 7, 2019
* Path must be well formatted for Path.GetDirectoryName()

* Update namespace

* Fix i8n strings in GitUICommands

* GitHubHostedRemote: the underneath repository should be initialized with the GitProtocol already used

* Fix Clone Url when using https for parent repository

like what have been done in gitextensions#6515 (07acef9)

* Add menu entry to add the GitHub "upstream" remote

and fetch from it once added

* refactor: remove `IGitModule` from `IRepositoryHostPlugin`

to have a consistent api.
Following comment: gitextensions#6328 (review)

* Update translations

* Move UI-only strings to GitUI project

* Remove obsolete UI from TranslationApp

* Add script options c/sRemoteBranchName and RepoName

* Restore title of AppearanceSettingsPage

* Check for empty language selection

* Update/cleanup appveyor.yml

* Enforce update to translations as part of a PR

* stage *.xlf files - this way we ignore EOL issues,
* check if there are any xlf files are modified, and if so:
    - capture and publish the diff for the xlf files as git-diff-xlf.txt
    - break the build with a meaningful error

* Update translations

* Deprecate and remove InvokeAsyncDoNotUseInNewCode

Rewrite the callsite to use `InvokeAsync` instead, that switches
the execution context to the UI thread.

Closes gitextensions#6799

* RevisionLinks: Add templates for GitHub and AzureDevOps

+ Creation of GitHubRemoteParser & AzureDevOpsRemoteParser

* Check that directory (still) exists

before renabling the the FileWatcher for GitStatusMonitor

* Show changed images in all diff tabs

Previously, images were displayed as binary diffs, except some in
FormCommit:  .png and new worktree images

Other:
* FormCommit always show the worktree commit for index .png
* Show all images in FormCommit
(i.e. show index images and changed other than .png)
* Regression from a94a30a (ObjectId)
where blob guid were ignored and diff not shown
* Combined guid should never be used to get file blob guid
* openWithDiffTool action were not called from stash and RevisionDiff

* StatusMonitor: CancelToken to limit multiple commands

* Use CheckBox.Text instead of separate Label

in order to indicate focus and to make hotkey work directly

* Centralise the common logic

* fix: Ensure configured merge tool is present

KDiff3 was unbundled few versions ago, and some users no longer
have a diff/merge tool installed.

Until now the "resolve conflicts" dialog did not check whether a configured tool
physically existed in the system.

An error dialog is shown to the user if the tool is absent.

Closes gitextensions#6687

* Enhance error messages

* Rename to EnsureCommitMessageSecondLineEmpty

* Do not skip empty lines

fix regression introduced by commit template handling

* Factor out method and add tests

* Reposition buttons and add tooltips

* Update the layout for scaling

* Require repro steps before submission

Ask a user to provide more information before a report can be submitted.

Closes gitextensions#6607

* Update translations

* SettingsCache: Tempfile in temp dir

* Hide Watermark, too, if FilterComboBox invisible

make appearance the same as "There are no unstaged changes"

* refactor: Move email settings from General to Detailed

* Fix TryParseAsciiHex bytes bounds check

* Fix "Blame to previous revision"

to select the first commit before the revision selected (so the previous, no!?!)

Partly fix gitextensions#6605

* Blame: Add a context menu item to blame selected revision

to make explicit what could be done by double-clicking

* Refactoring & fixes following reviews...

* feature: Add setup telemetry dialog

Add a dialog to the setup that asks user's permission to capture telemetry information.

The setup will execute a script that will update user's configuration that is stored in
C:\Users\<user>\AppData\Roaming\GitExtensions\GitExtensions\GitExtensions.setting
with the user's selection.

* Disable blame menu items if revision is not in the revision grid

* feature: Add ApplicationInsights telemetry

Relates to gitextensions#6021

* Capture (selected) application telemetry information
* Prompt user to allow telemetry upon start up, if it isn't configured
* Allow telemetry information capture be toggled via a About menu
* Allow telemetry information capture be toggled via the settings dialog

The following information is captured:

Application-Level includes:
* Exception information
* Version number (e.g. 2.0.x.x)
* Is portable version
* Build type (whether the application is an official release build or not)
* Selected layout settings (such as visibility of the left panel, commit info position etc)
* Change of selected layout settings
* Git version (e.g. 2.19.0)
* SSH client (e.g. OpenSSH or PuTTY)

Operating System-Level includes:
* Version (e.g. Windows 10.0.17763.0)
* Machine Name (e.g. MyFastPC)
* .NET CLR version (e.g. 4.0.30319.42000)
* .NET SDK version (e.g. dotnet:2.10.0-24102)
* Current culture
* Current UI culture
* Number of monitors
* Resolution of all monitors
* Primary monitor DPI / scale factor

* feature: Add ApplicationInsights telemetry

Relates to gitextensions#6021

* Capture (selected) application telemetry information
* Prompt user to allow telemetry upon start up, if it isn't configured
* Allow telemetry information capture be toggled via a About menu
* Allow telemetry information capture be toggled via the settings dialog

The following information is captured:

Application-Level includes:
* Exception information
* Version number (e.g. 2.0.x.x)
* Is portable version
* Build type (whether the application is an official release build or not)
* Selected layout settings (such as visibility of the left panel, commit info position etc)
* Change of selected layout settings
* Git version (e.g. 2.19.0)
* SSH client (e.g. OpenSSH or PuTTY)

Operating System-Level includes:
* Version (e.g. Windows 10.0.17763.0)
* Machine Name (e.g. MyFastPC)
* .NET CLR version (e.g. 4.0.30319.42000)
* .NET SDK version (e.g. dotnet:2.10.0-24102)
* Current culture
* Current UI culture
* Number of monitors
* Resolution of all monitors
* Primary monitor DPI / scale factor

* Fix gitextensions#5944 by fixing --follow and revision reading

a306eb6 by mistake removed the "--follow" option when getting the git
log for history. This is reverted by this commit.
1f6b0ca by mistake removed parsing of the file name data into
GitRevision.Name. This is also reverted by this commit.
Together, these should fix rename tracking in the file history.

* Set recommended Git version to 2.22.0

* Fix FileHistory/Blame for files not existing in the working directory

The bad behavior comes from the fact that `TryGetExactPath()`
changes the path to the file system path (if not existing, the path is cleared)

Alternative for gitextensions#6893

* Redesign form "Commit template Settings"

* Commit designer changes due to /noscale
* Better menu item label in form commit
* Commit validation: better use of space for RegEx field
* Use a tab control to split "template" & "Validation"
* Left align controls

* Improve test readability on `TryGetExactPathName()`

* Stash: Add cherry pick of the currently selected file changes

Fixes gitextensions#6902

* fix: Commit message incorrect height at 150% scale factor

Closes gitextensions#6898

* Add support for "--rebase-merges" for newest version of git

now that we recommend v2.22 (gitextensions#6769) that deprecate "--preserve-merges"

See:
* for option deprection: git/git@fa1b86e#diff-c7361e406139e8cd3a300b80b8f8cc8dR1220
* for some doc: https://stackoverflow.com/questions/15915430/what-exactly-does-gits-rebase-preserve-merges-do-and-why/50555740#50555740

* fixup! fix: Commit message incorrect height at 150% scale factor

* Fix: Build error due to duplicate NSubstitue entry in csproj

it's already in the proj as a package reference

* Sign contributors.txt

* signed contributors.txt

* ReleaseNotesGenerator plugin To field defaults to "HEAD" (gitextensions#4444)

* fix Delete tag not working

Fixes gitextensions#6281

* improved validation on create new repository dialog (fixes gitextensions#6955)

* Add an option to sort commits by author date in the revision graph.

* Adding myself to contributors.txt

* fix: Illegal characters in path

Do not crash the app if a repository contains illegal characters.

Closes gitextensions#6982

* fix tests

* fix: Remote Repositories List Empty

Restore saving a successfully cloned repository to the list of recent remotes.

Fixes gitextensions#6983

* Add option for default pull action in setting page

This change adds a dropdown for choosing default pull action
on the general tab in main setting dialog.

* Delete obsolete branches plugin - fix gitextensions#6813

* Add codescene.io analysis results (gitextensions#6272)

Codescene.io doesn't require any build programming, just a free account and an integration button click at codescene.io.
This may be a perfect fit for codecov analysis already in place.

* Replace git-diff patience with histogram

* Fix: Commit Dialog Spell Checker

* TortoiseGitMerge.exe old default name

* Adding myself to contributors.txt

* Fix: Proper spacing (gitextensions#7002)

Fix: Proper spacing

* Updated changed github id

* Fix: Keep push dialog open on failure (gitextensions#6367)

* The GroupBox items contained in the form need to… (gitextensions#7021)

* Fix for issue gitextensions#7020. The GroupBox items contained in the form need to have their AutoSize properties set to true, so they can resize when their contained controls do.

* Added my name to the contributors

* Settings: Display label to the top to make UI more readable on multiline controls

* should fix: [NBug] Sequence contains no elements gitextensions#7011

* fix: Crash when suggest merge/diff tool paths

If merge/diff tool paths enclosed in quotes, clicking on "Suggest" button
would crash the app.

Strip quotes from paths before attempting to suggest.

Fixes gitextensions#7000

* Display icons in commit templates menu items

* Fix potential bad end of line replacement

If the value contains a `\r\n`, the result will contain `\r\r\n`
which duplicate blank lines at the loading and each time a settings is changed and saved...

* JiraCommitHintPlugin: fix bad condition

* JiraCommitHintPlugin: Open the settings when not enabled

* Add scripts for BeforeFetch and AfterFetch (gitextensions#7026)

Additional scripts that should be executed before/after fetch can be added.

Fixes gitextensions#4909

* Fix: Add "Force push with lease" to the push dialog (gitextensions#3934)

* Generate GitHub OAuth token with github api

* Settings: Ensure that `CustomControl` is set

if we let the Setting(s) classes create the controls.
Otherwise, it could will trow a NRE if we access it to get the current value

* Add me (KvanTTT) to contributors.txt

* fix: Overflow error in Commit Dialog

DiffViewerLineNumberControl did not handle when MaxLineNumber was 0. Either an empty file can cause this (in this case _diffLines is empty so no problem) or a file where diff hunks were lost due to encoding errors.

Fixes gitextensions#7023

* Add a `PseudoSetting` to display controls that are not settings

i.e. that don't save a value in the settings files.
It is used to easily display a control that is not a setting (linklabel, text,...)

PS: Solve problem linklabels truncated horizontally of vertically if the good size is not set
(because the size no more have to be set)

* JiraCommitHintPlugin: Simplify settings definition by using`PseudoSetting`

Solve LinkLabel slightly truncated vertically

* Plugins: Being able to change CredentialsControl labels

to specify other things than the currently "User name" / "Password".

For example: "email" / "Token"

* Add me (palver123) to contributors.txt

* Update the GitExtensionsDoc submodule to 3.2

* Allow multi-select of files in FormStash

* Clarify Settings-Stash label

* File suffix incorrectly detected

If the file has no extension but the directory path has a period

* Ignore difftool for CombinedDiff

* fix installer for Win7

* Fix scrolling for committers label in statistics plugin (gitextensions#7092)

* Fix scrolling for committers label in statistics plugin

* Fix opencover not submiting reports

Looks like a regression on Appveyor side after they updated the VS2017
image.
The opencover now needs to be run as admin (?)

* Reintegration of PluginManager.

* Fix duplicate ignored tests

* Remove test assuming local file paths

* correctly call hMSBuild batch file

* Update version

* Add dummy item for the menu entry to appear expandable (7046)

Add dummy item for the menu entry to appear expandable (7046)

* JiraPlugin: Fix way to define TranslationString that prevent translation

+ remove TranslationString redundant with settings caption
(which is translated when defined in a private field!)

* Remove KDiff3 hardcoding

* Update README.md

* Update ChangeLog.md

* Update README.md

* Set repo workingdir from env only if cmd line arguments

This will allow starting with the dashboard in the debugger

* Set recommended Git version to 2.23.0

* PathUtil.GetDirectoryName did not accept root dirs

* Avoid exception when starting from commandline with rooted dir

* fix incorrect user-agent

Fixes gitextensions#7157

* Add hotkeys for middle of rebase etc.

* exename not set for tortoisemerge

* Consider the end-of-body marker everywhere

in the detection of single-line commit messages
(completes 53ebf95)

* Add more test cases for empty lines in commit msgs

addendum to PR gitextensions#6877

* Allow 'Amend Commit' for any CommitKind

reverts 82f125d partially

* Improve some mnemonics of commit dialog

* ConEmu 19.7.14

* Refactor: argument always null; positive logic

* correctly detect script options starting with "s"

resolves regression from commit 1b8bb93

* FormBrowse: provide RevisionGrid to ScriptRunner

* Add NUnit tests for ScriptRunner; handle nulls

* Settings: Prevent the multiple creation of controls

because `GetSettings()` (where controls are created) is call 3 times
that ends with that the controls displayed are not the one
that are the ones set in `CustomControl` property.

And that can cause problems if we manipulate `CustomControl`in the setting page
to get (until the setting is saved) or set a value.

We **must** keep the strategy that `GetSettings()` return every time new controls
because the previous instances of the controls are disposed when the settings form is closed.

These changes ensure that the `GetSettings()` method is called only **1** time.

The 2 other times (use of `.Any()`) has been replaced by a `HasSettings` property.

* Add modifyCommitMessageButton

* GitStatusMonitor: Timer wraps after 25 days

 * Always compare timer diff (to handle timer wraparound after 25 days)
 to avoid missing updates while command is running
 * Increase min update time 3s -> 5s at changes in the file system
 * Use locks consistently
 * Start interactive update only once to avoid race where two commands started

* Gerrit Plugin fixes/improvements

Fix syntax for gerrit push command
Fix Gerrit Publish dialog layout
Add CC and Hashtag to Gerrit Push
See: https://gerrit-review.googlesource.com/Documentation/user-upload.html#_git_push

* Try fix gitextensions#7205, gitextensions#7193

* Branch list could contain '+'

Seen in CommitInfo
Added test

* Popup when error staring mergetool

* Catch ConEmu exception for Done()

* Support older Gerrit API

Close gitextensions#7200

* Update contributors.txt (gitextensions#7220)

* Update contributors.txt

* Blame: Fix missing commit metadata on some commits

due to "orphan" filename lines that has for effect to overwrite good commit data
by incomplete ones when "Detect move and copy in all files" is enabled.

For example, command:

`git blame --porcelain -M -C -w -l "18fcca6d89c2d38ac1830697b5da3f78630b226e" -- "GitUI/Translation/English.Plugins.xlf"`

returns (part of the file):

`8f8393c283e7ad60c02805182d6778e5fc0c8b28 180 13
	      <trans-unit id="MsBuildEnabled.Caption">
b1d567e 7506 14 3
filename GitUI/Translation/English.xlf       <= orphan line that breaks the blame
	        <source>Enabled</source>
b1d567e 7507 15
	        <target />
b1d567e 7508 16
	      </trans-unit>
8f8393c 184 17 12
	      <trans-unit id="MsBuildPath.Caption">`

* Update contributors.txt

Fix emails

* Update readme

* Exclude "fixup!" and "squash!" prefixes from commit message RegEx validation

That prevent a boring question to be asked to the user
because the commit message doesn't follow the regex when
"fixup!" or "squash!" prefixes are used.

* Dont confirm switch worktree option (gitextensions#6864)

Dont confirm switch worktree option (gitextensions#6864)

Dont confirm switch worktree option (gitextensions#6864)

* GitIndexWatcher: check that directory exists before enabling

* Settings: Regenerate the Controls when previous instance was disposed

because we don't control the controls lifecycle
and the settings controls are disposed when settings are closed.

It depends on how the settings control is defined but could prevent exceptions
(and make plugins easier to write)

* Ordering of options

Ordering of options

* Add support for command line commit message when committing

close gitextensions#7219

* sort fields

* Add tests for `ArgumentBuilder`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.