Showing posts with label cm. Show all posts
Showing posts with label cm. Show all posts

Tuesday, November 24, 2015

Serena Dimensions: open Files with correct Filename

At work we use Serena Dimensions for Version Control.
Double-clicking a sourcefile opens the code in the editor of your choice, but unfortunately Dimensions doesn't provide a meaningful filename as the clicked element is downloaded to a temporary file and the editor shows just the name of the temporary file.

After requesting an improvement in the Dimensions community i got some great hints from Paul Caruana and finally implemented the following workaround:

  • Create a batch file
    echo off 
    set dimexe="c:\program files (x86)\serena\dimensions 12.2\cm\prog\dmcli"
    set ueexe="c:\program files (x86)\ultraedit\uedit32"
    set fi=%2
    set fi=%fi:"=%
    set ver=%3
    set ver=%ver:"=%
    set typ=%5
    set typ=%typ:"=%
    set tmpfile=C:\tmp\%fi%.%ver%.%typ%
    
    echo parms: %* 
    echo file: %fi% 
    %dimexe% FI %1 /USER_FILENAME="%tmpfile%" /EXPAND /OVERWRITE 
    %ueexe% %tmpfile%
    
  • Create a new "Tool" inside Dimensions:
    •  Menu "Tools" -> ""Customize Menu and Toolbar"; Tab "Tools" -> Create a new Tool (Star-Button), choose a name (e.g. "MyEdit").
      Configuration: 
      • Command: C:\foo\projects\cmedit\cmedit.cmd
      • Arguments: $[Specification] $[Filename] $[Revision] $(Product):$(Workset) $[type]
      • Start In: c:\foo
This gives me a "MyEdit" Entry in the Context Menu which downloads the file & launches Ultraedit with a meaningful filename - Mission accomplished!

Sunday, November 22, 2015

Serena Dimensions & KDiff3

At work we use Serena Dimensions for Version Control.
Dimensions seems to use "pvcsmerge" for Diff-view which is imho a bit out-of-date regarding functionality and usability.

My personal favorite would be BeyondCompare, but i have no budget for buying such stuff, so i looked into a way to integrate Kdiff3 (imho next-best) into Serena Dimensions.

I did some investigation and finaly came to the conclusion that calling "Diff" lets Dimensions download the Files-to-be-diff'ed to temporary files and call "pvcsmerge" with those files.

So i created an executable that takes the same parameter as "pvcsmerge," but launches Kdiff3 with reformated parameters.
Replacing the original "pvcsmerge.exe" with the homebrewn executable provided exactly the functionality i wanted!


Implementation (feedback welcome, but pls. don't flame me because of the poor C :-)):

Source:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

main(int argc, char *argv[])
{
   int c;
   char ch;
   
     // file contains the name of the files-to-be-compared
   char* filename;
   filename = argv[2];
   
   FILE *fi = fopen(filename, "r");
   #define MAXLINE 200
   char bufr[MAXLINE];
   char para[MAXLINE];
   char value[MAXLINE];
   char v1 [MAXLINE];
   char v2 [MAXLINE];
   char n1 [MAXLINE];
   char n2 [MAXLINE];

   if(fi != NULL) {
     while( !feof(fi)) {
       // String2parse: <para>=<value>
       fscanf(fi, "%[^=] %*c %s\n", para, value);
       
       if (strcmp(para, "ANCESTOR") == 0) {
         // String2parse: "C:\Users\xxxxx\AppData\Local\Temp\SRC(yyyyy)_12.pt1646c2.tmp","SRC(yyyyy);12 - Derivative"
         sscanf( value, "\"%[^\"]\",\"%[^\"]\"", v1, n1);
       }
       
       if (strcmp(para, "DERIVATIVES") == 0) {
         sscanf( value, "\"%[^\"]\",\"%[^\"]\"", v2, n2);
       }
     }
        
   } else {
   }
   
   // start kdiff3  
   char start[1024];
   strcpy (start, "c:\\xxxxxx\\kdiff3\\kdiff3.exe ");
   strcat (start, v1);
   strcat (start, " ");
   strcat (start, v2);
   strcat (start, " --L1 ");
   strcat (start, n1);
   strcat (start, " --L2 ");
   strcat (start, n2);
   system(start);
      
   return 0;
}

Compile (i'm using mingw):
gcc pvcsmerge.c -o pvcsmerge.exe




Tuesday, October 30, 2012

svn2svn

Svn2svn - http://kennethxu.blogspot.de/2012/01/svn2svn-copy-and-sync-between-svn.html.

Ever needed to copy/move parts of a repo but svnadmin dump + svndumpfilter failed?
Svn2svn will save your day!

Tuesday, October 09, 2012

Polarion ALM Tipps #2: avoid svn copy/move

Unless you really want to preserve history, avoid svn copy/move on e.g. workitem-configuration. By using svn copy/move you'll  create connections between projects that will hinder you once you want to move, copy, archive etc. projects.
Instead use svn export + add to e.g. copy files from one project to another.
Svn copy/move is perfectly fine inside a project.

Monday, October 08, 2012

Polarion ALM tipps #1: no single repo

This is the first of a series of blogposts regarding Polarion ALM.

Polarion allows you to have everything - Polarion data (workitems, documents, wiki pages, ...) + work artifacts (souce, binaries, documentation, ..) - in one repo, or to separate work artifacts from Polarion data. This feature is called "external repo".
I strongly recommend external repo because:
  • Polarion repo stays small: your work artifacts might explode in pure size and number of revisions. 
  • Usage of hooks is simplified: you might implement hooks to eg. enforce coding rules. Never apply hooks to Polarion data (unless you really, really know what you're doing)
  • Performance improves: size, hooks will slow down Polarion.
  • Transfer of Projects for Investigation, tests etc. will ease: for testing new Polarion release you only need Polarion data.
  • External repo can be Git: your developers might love git