Diff doesn't show for files in folders
Asked by Christer Kaivo-oja:

I'm running SourceTree 3.4.10 on Win11, and am having trouble with the internal diff on a mercurial repo of mine. These started roughly at the same time as me moving the origin repo from an old Ubuntu machine to a newer one (the latter having Ubuntu 22.04 LTS and hg version 6.1.1), and with me switching to SourceTree v3.4.10. I am uncertain if the problem I have is related to this or not.

The File Status view (correctly) shows a number of pending files and folders, but clicking on any modified file in a subfolder refuses to show a diff in the preview. To be clear: the diff works as expected on a file in the root of the repository but not for files in subfolders (unless they are added, in which case the whole file is shown in the diff view as per normal).

The modified files are small, and only contain a single changed line (verified with an external diff tool, and through the SourceTree Process Viewer which appears functionally identical for files that work in the root of the repo).

Things I have tried:  
- Remove the bookmark and re-add the repo  
- Reclone the repo from origin  
- Attempted to switch to System hg (which refuses to work)  
- Rename the embedded hg folder trying to force the use of the system one (doesn't work)  
- Reinstall SourceTree, v3.4.10 and v3.4.9

There are no unusual characters or spaces in any of the folders in the path to the file.

The only thing I could possibly think of is that the pending files list shows the folders with windows-style backslashes, while the output from the hg diff command has it with forward slashes. I honestly don't remember if this was different when SourceTree worked fine.

I can commit and push the changes, but not having access to the diff is a huge deal-breaker and if this can't be resolved I will have to find a different solution. It's a major hassle to have to use an external diff for every file.

Another possibly related issue is that I can no longer check the "Push changes immediately to default". It persists to be disabled regardless of what I do, but setting the global option for the same thing does work for some reason.

Any suggestions as to what I could try to restore the diff view would be greatly appreciated.


Answers:
author: Emanuel de K
body: It's the same issue for me; having a medium-sized file of around 800 lines in the root dir works like charm (including the end of the preview at line 500; which is the default setting), but when I put the file in its folder it only displays "Select a file to view the diff".

Using Sourcetree 3.4.11 on Windows 10 for a Mercurial 4.8.1 repository.

comments: author: Christer Kaivo-oja
body: I spent a week or so trying to debug and fix this to no avail. During this debugging, I found other things not working as alluded to in the original post (e.g. using system HG instead of the built-in one) and I ended up losing trust in SourceTree in general.

I ended up migrating away to another frontend that I trust, which also forced me over to git rather than hg. I figured that would be quicker than waiting for a solution from these forums. And here we are, several months later with not even a suggestion for what to look at or try.

So unfortunately, I have no good news for you on how to solve it. I simply gave up and spent the time migrating rather than debugging a tool I no longer trust with the one of the more critical aspects of my dev environment.


author: MrJJ
body: I'm having the same issues using GIT / ST 3.4.10 / win10

except mine don't show any diff for any modified file. even in the "root" folder.

It's placed at a root of a share.

Like

k:\\projectname

All other function seems to work fine. Just not internal diff.

Diff don't even work for a 100% local repro for me.


Tags: server