Diff/Merge File Identity Confusion (and other)

If you are having a problem using Vault, post a message here.

Moderator: SourceGear

Post Reply
Virgil Smith
Posts: 21
Joined: Thu Sep 14, 2006 9:11 am
Location: FLIR Systems Stillwater Oklahoma

Diff/Merge File Identity Confusion (and other)

Post by Virgil Smith » Thu Sep 14, 2006 12:26 pm

Vault Client/Server version 3.5.0.4741

We just switched from VSS to Vault and have a number of issues to report / resolve.

Most serious:

1. Vault's merge tool (so far used only through VS2005 IDE) has been seen to involve a "second file" in the merge, i.e. other than the local working copy or repository version of the "one" file in question.

Upon check-in under the IDE if Vault determines that a file might need a merge operation a dialog is displayed giving the option to "resolve merge status", or diff or merge the file changes. In at least two instances invoking the Merge option resulted in a dialog with sane left/right pane contents, but an initial merge result that was a copy of a different file on disk of the same name (with contents that do not appear in either of the merge sources).

Less "scary" issues:

2. The web client has bugs in the handling of + characters in file names.

They get ommitted in listings of files/folders under a folder, and attempting to view the history for such an item fails. We had to rename several projects because "Vault doesn't support 'C++'". :wink: The GUI client had no such problems and we could find no other "unusual" characters that resulted in any difficulties.

3. "Show Differences" is disabled if no working copy is present.

Actually there is no way to change the "left side" of the diff to something other than the working copy of the currently selected folder/file. This means that one can't compare two different files/folders in the repository. Also, one can't use Vault's diff tool for items not in the repository. The second is somewhat "out of scope" for Vault, but it's frustrating that after switching our team to Vault I now have to go find a Diff Viewer to use (and we may as well get used to just one and ditch the one in Vault). Is there some other way to access the diff tool (separate executable, command line options to client, etc.)?

4. IDE Integration "Gaps" during Solution open process.

File/Project changes made by the IDE at the time of opening a Solution/Project result in files being marked Checked Out within the IDE, but not within the Vault Client. After this, a "compare" shows the files as different, but a "Get Latest Version" does not change the local file.

A way to reproduce this would be to make a C++/CLI Windows Forms application project and add an XML schema to it. The IDE will happily bulid a class header file from this (for relational database style access to data in this schema) and add a #include to "stdafx.h" to include that file. If you delete that #include from "stdafx.h", check-in the solution, close the solution, and re-open the solution the IDE will "dutifully" re-inject the #include immediately when the solution is opened.

The above setup is also how I ended up experiencing issue #1 as this creates a need to merge the file upon check-in. The "other file" whose contents became the initial merge result was another stdafx.h file in a separate project within the solution.

This "stdafx.h problem" was only mildly confusing, but I wonder how long it will be before the IDE decides to edit something in a Project/Solution file during this "dangerous time window".

GregM
Posts: 485
Joined: Sat Mar 13, 2004 9:00 am

Post by GregM » Thu Sep 14, 2006 3:05 pm

3. Yeah, I've found that annoying too. You have to do a history query first. From there you can do the diff without having a local version.

The diff/merge tool is SGDM.exe.

Virgil Smith
Posts: 21
Joined: Thu Sep 14, 2006 9:11 am
Location: FLIR Systems Stillwater Oklahoma

Follow-up: Status as of 4.0.2

Post by Virgil Smith » Fri Aug 24, 2007 6:19 pm

Given that a new major version is out, I figured I'd give a status update to this old thread. For SourceGear/public reference I tested these out on the public demo server's "Initial Repository" under "$/v3 Bug Survival Test". So you can check them out there until SourceGear cleans up the demo server again. v4.0.4 is the current version of Vault, but I used v4.0.2 because that is what the public demo server is currently running.

1. Merge tool involving files other than the working and repository copies in the merge result.
I gave it a good try, but I cannot reproduce this using VS2005 SP1 and Vault v4.0.2. Hopefully, this has been fixed, but the only way I had to reliably provoke the error doesn't go the same using VS2005 SP1 as it did using a straight-up install of VS2005 (see also item 4).

2. The web client has bugs in the handling of + characters in file names.
Well Vault still doesn't support 'C++', but it gets further before choking.
The web client can now list these files/folders and even display the content of such folders, but attempting to view the history log of an item with a '+' in the path still produces an error.
Checkout $/v3 Bug Survival Test/Folder with C++ in Name and its Readme.txt file.

3. "Show Differences" is disabled if no working copy is present.
No apparent change. It's apparent that SourceGear has never seen the comparison of folders in the repository (such as two branches of the same project) to be a useful feature. To pull this off, you have to do a history on the folder, pick out a version and diff that against something else in the repository. The downside is you may have to label the folder in order to have a "grab spot" for the current version in the history view. And even if you do that, the diff won't work.

Vault "whiffs" comparisons between folders in a repository.
Specifically, it will report identical files within identically named subfolders to be present "only" in the "left side", *AND* to be present "only" in the "right side".

While it's still up you can see this by doing a folder diff between
Repo to Repo Folder Diff A
and
Repo to Repo Folder Diff B
of "$/v3 Bug Survival Test/" on the "Initial Repository" of the public demo server (vaultdemo.sourcegear.com).
To do the diff, do a "Show History..." or "Show Labels..." on "Repo to Repo Folder Diff A" and do a "Diff" on "Grab Label for Diff", then select the "Any repository folder/file" radio button and "Browse..." to "Repo to Repo Folder Diff B".

Provided noone has changed the folders too much you should get a result like the one in the attached screen shot.

4. IDE Integration "Gaps" during Solution open process.
Well, I can't get SP1 of VS2005 to edit files during the open process, so this concern seems to be moot at this point.
Attachments
Heres what it looks like.PNG
Heres what it looks like.PNG (9.58 KiB) Viewed 3232 times

jclausius
Posts: 3706
Joined: Tue Dec 16, 2003 1:17 pm
Location: SourceGear
Contact:

Re: Diff/Merge File Identity Confusion (and other)

Post by jclausius » Mon Aug 27, 2007 9:55 am

Virgil Smith wrote:1. Vault's merge tool (so far used only through VS2005 IDE) has been seen to involve a "second file" in the merge, i.e. other than the local working copy or repository version of the "one" file in question.
It's hard telling what you might have seen. One thing the merge tool does is use a file stored in a _sgvault directory at the time of the GET, the working folder's copy, and the version of the file in the repository. These are copied to temp files, so the merge tool can fold the changes into a new file (the middle view of the tool). Is it possible the file in the _sgvault directory was changed by a disk based find/replace? Is it possible the "different" file of the same present in the working folder? If so, then that would explain the results as the file in the working folder is used as a part of the merge.
Virgil Smith wrote:2. The web client has bugs in the handling of + characters in file names.
We will be addressing this in the upcoming Vault 3.5.3 and Vault 4.0.5 releases.
Virgil Smith wrote:3. "Show Differences" is disabled if no working copy is present.
From the main GUI interface, Diff is keyed from working folders. Otherwise, Diff is keyed from the History Explorer.
Virgil Smith wrote:Actually there is no way to change the "left side" of the diff to something other than the working copy of the currently selected folder/file. This means that one can't compare two different files/folders in the repository.
Is it possible you disabled the Diff Command Dialog? Check the command dialog options to make sure the dialog is brought up during a Diff operation. From this you can Diff from the last time you performed a GET, the version in the repository, version in the working folder, a labeled file/folder, local file/folder or repository file/folder.
Virgil Smith wrote:The second is somewhat "out of scope" for Vault, but it's frustrating that after switching our team to Vault I now have to go find a Diff Viewer to use (and we may as well get used to just one and ditch the one in Vault). Is there some other way to access the diff tool (separate executable, command line options to client, etc.)?
You can change the overall Diff Tool within the Client's options for Diff/Merge. However, that is just one overall Diff Tool for all files. This functionality will be changing in a future release of Vault to allow for Diff Tool by file extenstion.
Virgil Smith wrote:4. IDE Integration "Gaps" during Solution open process.
All GET operations within the MSSCCI client are set to merge in changes from new folders. To actually perform an "overwrite" operation, you need to change the Vault Options within Visual Studio's Advanced Source Control page to always show the Get Dialog. When you change this, a GET on the solution or project will prompt you with the Get to Merge or Overwrite. Choose overwrite.

Note, changing this is a hassle when performing a GET on a large group of files as the dialog is displayed for each and every file.
Jeff Clausius
SourceGear

jclausius
Posts: 3706
Joined: Tue Dec 16, 2003 1:17 pm
Location: SourceGear
Contact:

Re: Follow-up: Status as of 4.0.2

Post by jclausius » Mon Aug 27, 2007 10:04 am

Virgil Smith wrote:1. Merge tool involving files other than the working and repository copies in the merge result.
I gave it a good try, but I cannot reproduce this using VS2005 SP1 and Vault v4.0.2. Hopefully, this has been fixed, but the only way I had to reliably provoke the error doesn't go the same using VS2005 SP1 as it did using a straight-up install of VS2005 (see also item 4).
There have been no changes in Vault 3.5.x and Vault 4.0.x in regards to how Merging has handled by a Merge tool. I refer to some possible problems in my previous post.
Virgil Smith wrote:3. "Show Differences" is disabled if no working copy is present.
This is a useful feature, but the handling of this is done from the History Explorer. Also, if you need a specific version of a Folder, try invoking history and change the option to show History by Folder version.
Virgil Smith wrote:Vault "whiffs" comparisons between folders in a repository.
Specifically, it will report identical files within identically named subfolders to be present "only" in the "left side", *AND* to be present "only" in the "right side".
This will also be fixed in Vault 3.5.3 and Vault 4.0.5.
Virgil Smith wrote:4. IDE Integration "Gaps" during Solution open process.
Also see my previous post.
Jeff Clausius
SourceGear

Virgil Smith
Posts: 21
Joined: Thu Sep 14, 2006 9:11 am
Location: FLIR Systems Stillwater Oklahoma

Re: Diff/Merge File Identity Confusion (and other)

Post by Virgil Smith » Mon Aug 27, 2007 11:45 am

jclausius wrote:
Virgil Smith wrote:1. Vault's merge tool (so far used only through VS2005 IDE) has been seen to involve a "second file" in the merge, i.e. other than the local working copy or repository version of the "one" file in question.
It's hard telling what you might have seen. One thing the merge tool does is use a file stored in a _sgvault directory at the time of the GET, the working folder's copy, and the version of the file in the repository. These are copied to temp files, so the merge tool can fold the changes into a new file (the middle view of the tool). Is it possible the file in the _sgvault directory was changed by a disk based find/replace? Is it possible the "different" file of the same present in the working folder? If so, then that would explain the results as the file in the working folder is used as a part of the merge.
In the cases that we saw this, if anything changed files in the _sgvault folder it was the vault client or the IDE integration. Personally, I'm more suspicious of a fault in determining the working folder for the file during some step leading up to the merge. However, unless we see it again and can reproduce the problem its a moot point.
jclausius wrote:
Virgil Smith wrote:2. The web client has bugs in the handling of + characters in file names.
We will be addressing this in the upcoming Vault 3.5.3 and Vault 4.0.5 releases.
:D Thanks!!
jclausius wrote:
Virgil Smith wrote:3. "Show Differences" is disabled if no working copy is present.
From the main GUI interface, Diff is keyed from working folders. Otherwise, Diff is keyed from the History Explorer.
Yep, that's how to get to the functionality. It seems rather counterintuitive, however, to have to invoke the history dialog to perform an operation on the current repository version.
jclausius wrote:
Virgil Smith wrote:]Actually there is no way to change the "left side" of the diff to something other than the working copy of the currently selected folder/file. This means that one can't compare two different files/folders in the repository.
Is it possible you disabled the Diff Command Dialog? Check the command dialog options to make sure the dialog is brought up during a Diff operation.
Sorry, I shouldn't have referenced "left side" or "right side" in this discussion as Vault doesn't necessarily place "this" on the left side and "that" on the right side when comparing "this to that".
jclausius wrote:Also, if you need a specific version of a Folder, try invoking history and change the option to show History by Folder version.
Doh! "Stupid user, read the screen." :oops: Thanks!
jclausius wrote:
Virgil Smith wrote:]Vault "whiffs" comparisons between folders in a repository.
Specifically, it will report identical files within identically named subfolders to be present "only" in the "left side", *AND* to be present "only" in the "right side".
This will also be fixed in Vault 3.5.3 and Vault 4.0.5
:D Thanks!!

Post Reply