The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,854 other subscribers

Archive for the ‘Source Code Management’ Category

PlasticSCM Workaround for “Can’t perform a checkout in an edited xlink.”

Posted by jpluimers on 2018/11/01

Error message during a commit (checkin) or shelve of some changes:

---------------------------
Error
---------------------------
Can't perform a checkout in an edited xlink.
---------------------------
OK
---------------------------

In this case it is during a shelve:

---------------------------
Wait a moment, please...
---------------------------
In progress...
Shelving pending changes
---------------------------
OK
---------------------------

I cannot show all changes, but the third one is an xlink:

The error did not return any meaningful results when I searched for it, but the developers on the team indicated “Errors like these happen every now and then; there is no information in Google. Sit down, cry a little, then restart with a fresh repository”.

Workaround

The workaround for this undocumented behaviour is tedious, but works:

Read the rest of this entry »

Posted in Development, PlasticSCM, Software Development, Source Code Management | Leave a Comment »

When git fails to `fetch all`

Posted by jpluimers on 2018/10/26

“fetch all”

A SourceTree fetch all actually comes down to this:

git -c diff.mnemonicprefix=false -c core.quotepath=false fetch --tags origin

Despite being such a big command-line, it sometimes doesn’t find new remote branches and you end up with a situation like this:

Read the rest of this entry »

Posted in Development, DVCS - Distributed Version Control, git, Source Code Management, SourceTree | Leave a Comment »

Delphi: uninstalling the ancient CollabNet 1.7.5 version

Posted by jpluimers on 2018/10/24

Somehow the integration team at Embarcadero still hasn’t discovered there are [WayBack] newer CollabNet SVN Client versions than 1.7.5 which has been shipped since Delphi XE3 until Delphi XE6. The newer version (currently 1.8.8 when writing this, now 1.10.2 in 2018) have plenty [WayBack1/WayBack2SVN security issues fixed.

The easiest way to uninstall the CollabNet SVN Client is running this small script:


call :start %ProgramFiles%
call :start %ProgramFiles(x86)%
goto :end
:start
startlocal
set CollabNet="%*\CollabNet\uninst.exe"
echo %CollabNet%
if exist %CollabNet% start "CollabNet uninstall" %CollabNet%
endlocal
goto :end
:end

Then install the [WayBackSlik SVN client. Like [WayBackЈοеу, I’ve switched to [WayBackSlik SVN a long ago. Here is [WayBackhis reasoning:

I have long since stopped using the CollabNet-branded version because it’s behind a registration wall. I found Slik SVN as a good alternative. It’s exactly the same command-line client you get from CollabNet, sans the hassle in downloading it.

I hope someone at Embarcadero enters this in QC^w QualityPortal as I’m awaiting Embarcadero response about a security issue there.

–jeroen

Posted in Delphi, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Development, QC, Software Development, Source Code Management, Subversion/SVN | 2 Comments »

git 2.19.1 on Windows: NullReferenceException during https pull/push/fetch

Posted by jpluimers on 2018/10/19

When using git 2.19.1 on Windows, you will likely get a NullReferenceException during pull/push/fetch operations on https connections.

Easiest workaround is to downgrade to 2.19.0: [WayBack] git pull fatal: NullReferenceException encountered. On an local instance of Bitbucket · Issue #1868 · git-for-windows/git · GitHub

I am seeing the same thing using 2.19.1 against our internal Bitbucket server. Reverting back to 2.19.0 the problem no longer occurs.

Harder workaround is to install the Git Credential Manager 1.18.1: [WayBack] git pull fatal: NullReferenceException encountered. On an local instance of Bitbucket · Issue #1868 · git-for-windows/git · GitHub.

[WayBack] Release Git Credential Manager for Windows v1.18.1 · Microsoft/Git-Credential-Manager-for-Windows · GitHub

Bug Fixes:

  • Fixes Null Reference exceptions when parameters or contentType are not populated

To install the Git Credential Manager, download and double-click the GCMW-1.18.1.exe installer. It is that easy, it will even install Git for Windows 2.17.0 and the Microsoft .Net Framework for you if necessary.

Hopefully that one will integrated in a minor update to git for Windows soon: [WayBack] git pull fatal: NullReferenceException encountered. On an local instance of Bitbucket · Issue #1868 · git-for-windows/git · GitHub

moderately soon, hopefully, there will be a minor version release of Git for Windows that will include the updated GCM v1.18.1. [just need more volunteer time for the PR and tests ;-)
That should eliminate the `Fatal: NullReferenceException” but appears not to fix the #1874https://github.com/git-for-windows/git/issues/1874 delays. (still to hear from the OP if the issue is definitely the AV, or something elese)

If you really dare, you can try the nightly snapshot which already includes GCMW-1.18.1: [WayBack] git pull fatal: NullReferenceException encountered. On an local instance of Bitbucket · Issue #1868 · git-for-windows/git · GitHub

the next official Git for Windows version will have a new Git Credential Manager version. Also, the current snapshot at https://wingit.blob.core.windows.net/files/index.html should have it already.

–jeroen

Posted in Development, DVCS - Distributed Version Control, git, Software Development, Source Code Management | Leave a Comment »

Conference idea: re-do my git based version control session with a good set of examples and screenshots backing it

Posted by jpluimers on 2018/09/27

An interesting thread that starts as a gitlab / Delphi IDE integration question, resulting into a nice discussion of tooling to use: [Archive.is] Are there any videos (not written stuff, but actual videos) that show how you’d set up and use the built-in versioning in Tokyo IDE with a gitlab repo? … – David Schwartz – Google+

If I find time, I will try to re-work my git conference session to be much more practical.

–jeroen

Posted in Conference Topics, Conferences, Development, DVCS - Distributed Version Control, Event, git, GitHub, GitLab, Software Development, Source Code Management | Leave a Comment »

SVN Git Mirror – cloning SVN into git and keeping them in sync

Posted by jpluimers on 2018/09/20

Based on

More references and ideas:

jeroen

Read the rest of this entry »

Posted in Development, DVCS - Distributed Version Control, git, Software Development, Source Code Management, Subversion/SVN | Leave a Comment »

Plastic SCM command-line for merge and diff

Posted by jpluimers on 2018/09/03

Just in case I have Plastic SCM without Beyond Compare:

Merge

"C:\Program Files\PlasticSCM5\client\mergetool" -b="%TEMP%\baseFile-guid.pas" -bn="baseSymbolicName" -bh="baseHash" -s="%TEMP%\sourceFile-guid.pas" -sn="srcSymbolicName" -sh="srcHash" -d="...\destinationPath\destinationFile.pas" -dh="destinationHash" -a -r="%TEMP%\resultFile.pas" -t="text" -i="NotIgnore" -e="NONE" -m="forced" -re="NONE" --progress="progressDescription" --extrainfofile="%TEMP%\extraInfoFile.tmp"

Diff

To be done

aa

Merge help (takes about 10 seconds to start):

"C:\Program Files\PlasticSCM5\client\mergetool.exe" --help

---------------------------
Mergetool usage
---------------------------
Usage: mergetool [ | ]

    diffOptions:  []

    mergeOptions:   [] [[] [] ] [] []

        baseFile:            {-b | --base}= 
        baseSymbolicName:    {-bn | --basesymbolicname}=
        automatic:           -a | --automatic
        silent:              --silent
        resultFile:          {-r | --result}=
        mergeType:           {-m | --mergeresolutiontype}={onlyone | onlysrc | onlydst | try | forced}

    generalFiles:  []  []

        sourceFile:          {-s | --source}=
        srcSymbolicName:     {-sn | --srcsymbolicname}=
        destinationFile:     {-d | --destination}= 
        dstSymbolicName:     {-dn | --dstsymbolicname}=

    generalOptions: [] [] [] []

        defaultEncoding:     {-e | --encoding}={none |ascii | unicode | bigendian | utf7 | utf8}
        comparisonMethod:    {-i | --ignore}={none | eol | whitespaces | eol&whitespaces}
        fileType:            {-t | --filestype}={text/csharp | text/XML | text}
        resultEncoding:      {-re | --resultencoding}={none |ascii | unicode | bigendian | utf7 | utf8}
        progress:            {--progress}=progress string indicating the current progress, for example: Merging file 1/8
        extraInfoFile:       {--extrainfofile}=path to a file that contains extra info about the merge

    Remarks:
          
        -a | --automatic:    Tries to resolve the merge automatically.
                             If the merge can't be resolved automatically (requires user interaction), the merge tool is shown.
        --silent:            This option must be used combined with the --automatic option.
                             When a merge can't be resolved automatically, this option causes the tool to return immediately
                             with a non-zero exit code (no merge tool is shown).
                             If the tool was able to resolve the merge automatically, the program returns exit code 0.

    Examples:

        mergetool
        mergetool -s=file1.txt -d=file2.txt
        mergetool -s=file1.txt -b=file0.txt --destination=file2.txt
        mergetool --base=file0.txt -d=file2.txt --source=file1.txt --automatic --result=result.txt
        mergetool -b=file0.txt -s=file1.txt -d=file2.txt -a -r=result.txt -e=utf7 -i=eol -t=text/csharp -m=onlyone
---------------------------
OK   
---------------------------

The merge extraInfoFile.tmp has a syntax like this:

Source (cs:-#)
    relative-sourceFile from cs:-# created by userName on timeStamp
    Comments: Source changeset description

Base (cs:#)
    relative-baseFile from cs:#@/baseBranch by userName on timeStamp
    Comments: BO's + CRUDS 

Destination (cs:#)
    relative-destinationFile from cs@/destinationBranch created by userName on timeStamp
    Comments: Destination changeset description

Where each cs is a change set number.

–jeroen

Posted in Beyond Compare, Development, Encoding, PlasticSCM, Power User, Software Development, Source Code Management | Leave a Comment »

Plastic SCM compare versus Beyond Compare; guess which screenshot I like most

Posted by jpluimers on 2018/08/20

Same difference; two tools.

Plastic SCM compare: lots of clutter

Beyond Compare: just the things that are different.

–jeroen

Posted in Beyond Compare, Development, PlasticSCM, Power User, Source Code Management | 3 Comments »

Diffing binary files in PlasticSCM through Beyond Compare

Posted by jpluimers on 2018/08/02

The diff engine in PlasticSCM is nice in appearance, but it lacks a lot of features for file types that Beyond Compare handles out of the box.

For instance, .RES files cannot be diffed:

---------------------------
Error
---------------------------
Unsupported file types for binary diff. Only images are supported (JPEG, PNG, GIF, BMP)
---------------------------
OK   
---------------------------

Read the rest of this entry »

Posted in Beyond Compare, Development, PlasticSCM, Power User, Source Code Management | 2 Comments »

The Plastic equivalent of .gitignore is ignore.conf

Posted by jpluimers on 2018/07/26

A while ago, I landed a place using Plastic SCM, so I had to adopt some idiom from the git world.

The [WayBack] .gitignore equivalent in Pastic SCM is ignore.conf. Here are some links to documentation on it:

There is another file with a similar, but deceptively different name and behaviour: hidden_changes.conf. There ignore.conf ignores changes, hidden_changes.conf completely hides them. I am still not sure what subtleties are involved in the difference between “ignore” and “hide”, as the documentation is confusing and hidden_changes.conf can also appear in the root of a repository:

hidden_changes.conf Contains the paths of the controlled files to hide from the Pending changes view. The hidden changes are controlled items that can be changed but the user doesn’t want them to appear by default on the Pending changes view.

This config file is located in the plastic4 directory (under $HOME/.plastic4 on Linux/Mac systems or C:\Users\user\AppData\Local\plastic4 on Windows), in the root directory of the workspace, or in the plastic-global-config repository so that all clients have the same settings by default.

Learn about how to configure the hidden changes list.

ignore.conf Contains the paths of the private files to be ignored in the Pending changes view. The ignored files are files that you have no intention of placing under source control.

This config file is placed at the root directory of the workspace, or in the plastic-global-config repository so that all clients have the same settings by default.

Learn about how to configure the ignored list.

These configuration files are supported:

Important: These are the files that can be globally configured:

So I based mine on Tortoise SVN Global Ignore Pattern for Delphi and Visual Studio containing at least these:

*.identcache
*.local
*.dcu
*.rsm
*.bak
*.~*
*.tvsconfig
__history
__recovery
ModelSupport_*

–jeroen

Posted in Development, DVCS - Distributed Version Control, git, PlasticSCM, Software Development, Source Code Management | Leave a Comment »