RE: Re: Diffing directories with external diff
"Oliver Giesen" <[email protected]> Thu, 23 Feb 2006 14:13:49 +0100
| Newsgroups | gmane.comp.version-control.cvs.gui.devel |
|---|---|
| Message-ID | <[email protected]> |
> [Timestamp comparison] I guess it is a good idea to make this > optimization an option as Jens suggested. I can do diffs between > sandbox and HEAD of the repository just by selecting the modified > files , what I cannot do easily is diffing the sandbox against a > specific tag/date or diffing two tags/dates. Since the server-based > approach is more generic, I'll do that first and implement the > timestamp approach as an optimization for the case "diff sandbox > against HEAD". Be careful with your terminology. What you mean is diffing the current sandbox contents to their respective BASE revisions (aka "Local copy against same remote revision" as WinCvs' Diff dialog currently calls it). While HEAD might be the most common case it is by no means a given. The BASE revision could just as well be on a branch or an outdated revision. > [Replicate folder] Yes, I'm using Araxis Merge -- it displays panes > for each file in one main window. Araxis Merge also detects when > there is an open instance, and opens a new comparison in that > instance. WinMerge 2.4 has an MDI interface, but I've found no way to > reuse instances. I don't think I would like that behaviour all too much either. I'd prefer an overview of files before actually drilling down to the individual diffs. Also remember that not all files are necessarily diffable with your default differ (e.g. they could be binary). This might lead to ugly error messages or even crash some simple-minded differs. If the different files were first shown in an overview (where difference is typically calculated by timestamp and/or checksum only) the actual text diffing would be postponed and I could explicitly choose not to drill down into the diffs for those files. > There is an option to start WinMerge with a project file (XML format) > that describes what files need to be compared. We could implement the > desired behavior as follows: > > - In "Preferences/WinCvs", add a new executable path for "multi-file > diff" > - This multi-file diff application would get all files to be diffed > either in one (huge) command line, from stdin or from a temporary file > - A wrapper for WinMerge would generate a project file from this > command line/stdin input/temp file and start WinMerge with this > project file That's a truly intriguing idea. :) > Since the WinCVS/WinMerge combination may be a really frequent case, > WinCVS also could output a WinMerge project file by itself. While I do love WinMerge and currently see no reason to switch to another tool but I really dislike hardcoded dependencies. I'd vote for keeping this out of the core app and making it a standalone tool. I'll have a look when I've got some time. I've already got my ProxyDiff tool so this one would fit right in. > [OT: Diff performance] Currently, external diff is implemented by > issung an update command for every single file and capturing CVS's > stdout to a temporary file. This means reconnecting to the server for > every file and really slows down multi-file diff. I'll try and see if > I can change this to one checkout command for each distinct CVSROOT. > IMO this means reading the CVS/cvsroot file for every parent folder > involved. > > Another option would be to keep the current diff approach but issue > one update command for all files to be diffed and capture CVS's > stderr output as well -- when a new file begins, CVS writes its name > to stderr, and WinCvs would open a new target temporary file then. TBH I have not missed multi-file diff'ing so far (though being able to diff entire modules between tags would be neat indeed) and I could not really see me using it if it resulted in all the diffs opening up at once. Your ideas for implementing it sound good from a purely technical POV, though. Keep the ideas flowing! :) ... While proofreading my post, actually here's an idea of mine: How about if WinCvs itself supplied the overview view I was talking about as a launch pad for the (external) diff? I.e. instead of launching the External Diff directly after determining the files to be diffed, first display them in a list box and only invoke the Diff on double-click (this could happen in the regular way using the current single-file functionality). You could even make that intermittent list dialog suppressable so you could still get your desired functionality of opening all diffs at once. ;) While we're at it, we could use that same dialog as an improved version of the current "Preview file changes" option that is integrated with the Commit dialog. That latter option currently has the drawback that it does not allow you to preview changes when committing at the directory level. In that case we could just invoke the new directory diff with my diff overview dialog. :] Cheers, Oliver ---- ------------------ MSN: [email protected] ICQ: 18777742 (http://wwp.icq.com/18777742) Y!: ogiesen Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/cvsgui-dev/ <*> To unsubscribe from this group, send an email to: [email protected] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/