mayvelous

Me, Myself and Mayvelous

Archive for the ‘VSS’ Category

Licenses.licx and VSS

In our current project, we have to work with WinForms using VS 2005 and VSS as the project source control. There are two solid developers and one developer/Product Manager involved in the coding of this project. Our Product Manager suggests and prefers we use VSS rather than SVN for better source management (check in/out). As for us, developers (me and my bro), we had a great time using SVN in the last project and prefer to use SVN; nevertheless both of us are flexible and agreed to work with VSS after a few discussion. Things are fine when I focus on designing forms and my bro working on code behinds. But the problem arises when we start testing on a few forms, which need both of us to work on design view.

In VS2005 WinForm IDE, it adds or writes to the licenses.licx file whenever you use custom controls/third party controls such as Infragistic in your form. Though I’m not so sure, I observe that the licenses.licx file is not needed if you work entirely with normal winform controls, but with third party controls, it acts as a config file storing the references of the controls.

Once you add a project to VSS DB, the licenses.licx file is always binded since it’s part of the project property. You can check out the code just fine but when you work with the form design, you’re forced to check out the licenses file. If you don’t/can’t check it out, you can’t do anything to the form design. With VSS, it’s really a pain if one developer checked out the licenses file exclusively, others can’t do any design work on any of the forms. To solve the exclusive checkout on licenses file, we tried to exclude the licenses.licx from the project and let it stay in local folder. Unfortunately, the file itself is part of project property and once it’s excluded, it loses the references as well. For that little experiment, I’ve lost two of my form designs and have to start all over; thank god, they were just small forms. With that failed experiment and out of ideas, we searched for the solution on the web. Found out that it was a known issue for VS2005 IDE and the fix would only available with the next release of Visual Studio. The only work around they suggest so far is to use VSS multiple check out mode.

We don’t want to use Multiple check out mode in our VSS DB for:

  1. VSS doesn’t provide individual file multiple check out mode but for the whole DB,
  2. There are a few careful steps to take before checking back in the multiple check out file. (You cannot check in directly. You must get latest on that file to ensure you get different versions from other developers to merge the file then only you can successfully check it back in.)
  3. VSS merge is a real pain and should I would never trust it. Unless ofcos’ you don’t care about losing some of your codes or have a separate backup, go a head and try it out.
  4. There is the need of source control administrator for merging files.
  5. And again, don’t trust VSS Merge and can’t rely on it.

But untill the next VS release, it’s the only possible way so we don’t have a choice but to use that method. Don’t have time to dig up properly either. So gonna stuck with this problem for the whole project. It’s just making my life miserable. *sign*

Readings: MS Feedback | Forum Q&A

Versioning Models

The core mission of a version control system is to enable collaborative editing and sharing of data. Different systems use different strategies to achieve this. There are two main versioning models namely “Lock-Modify-Unlock” and “Copy-Modify-Merge“.

Lock-modify-unlock

In this model, the repository allows only one person to change a file at a time. This exclusively policy is managed using locks. VSS and old style source controls use this approach where only one person at a time can modify a file. Lock the file, edit, then check in and release the lock. This model is only suitable for a small teams. For a bigger team with many developers, it would be inefficient to use this model as locking isolates a file to only one developer which delays the work among other team members who want to work on the file.

Lock-modify-unlock
The lock-modify-unlock model (Ref #)

The problem with the lock-modify-unlock model is that it’s a bit restrictive, and often becomes a roadblock for users:

  • Locking may cause administrative problems.
    if one developer forgot to unlock a file before he take a leave would cause others to delay working on the file unless an administrator to release the lock.
  • Locking may cause unnecessary serialization
    if developers are to edit different part of the file, it’s is unnecessary to unlock and edit. It should be edited together then merge the file.
  • Locking may create a false sense of security

(Ref: pp. 4)

Copy-modify-merge

In this model, each user’s client contacts the project repository and creates a personal working copy – a local reflection of the repository’s files and directories. Users then work simultaneously and independently, modifying their private copies. Subversion, CVS and a number of other version control systems uses this model as an alternative to locking. Early version of Subversion did not support locking at all, but this is no longer the case. You can now lock files, query files to see who has locked then, and even mark files as requiring locks before edits. This make sense for binary files where merging is impossible. (Ref: pp 5)

Copy-modify-mergeCopy-modify-merge
Copy-Modify-Merge model (Ref #)

NB: TortoiseSVN provides a good built-in diff tool; you can also install WinMerge (http://winmerge.org), which integrate itself into TortoiseSVN.

When Locking is Necessary

While the lock-modify-unlock model is considered generally harmful to collaboration, there are still times when locking is appropriate.

The copy-modify-merge model is based on assumption that files are contextually mergeable: ie. that the majority of the files in the repository are line-based text files(such as program source code). But for files with bonary formats, such as artwork or sound, it’s ofter impossible to merge conflicting changes. In these situations, it really is necessary to users to take strict turns when changing the file. Without serialized access, somebody ends up wasting time on changes that are ultimately discarded.

While Subversion is still primarily a copy-modify-merge system, it still recognizes the need to lock an occasional file and provide mechanisms for this. (Ref: pp 7)

Ref:
#Don’t Use Microsoft Visual SourceSafe!,
# subversion documentation | Online version

Source Control Resources

Here are some of the readings on Subversion and VSS that I came across. Whoever interested in Source Control and its available tools should go through these links first to get to know the technologies out there. I’m just concentrating on SVN and VSS, but there are a lot more to look at. Depending on your choice of technology, google would be your best reference.

Documentations:

Good Reference Articles

No to Visual SourceSafe? Bad Toad! Bad Toad!

I’ll be adding more later and if you find some good readings/articles, do let me know too.

TortoiseSVNOie Turtle turtle, little tortoise, kuchi kuchi kooo…
Oh hello, I’ve just adopted a Tortoise recently. You see, we use to play with this creature called VSS before, but it got wild from time to time and the guys don’t like it much. I don’t like it in the beginning too. I did strangled and fist-fight with it for many times. But the thing is, you only need a bit of patience and time to tame him down. Once I start petting and playing with it, I tend to understand it’s tender part as well as bewilder sides. As you all know, everything has its own pros and cons; our VSS rode a bumpy road and came as an arse but it has soothen out after a while. At least for me, I’m on fair term with him.

TortoiseSVN

Now I found a new pet. It’s really a sweet and gentle thing to start with. It says “Hello” and wags a little tail. Oh just so cute!

SubversionBefore you start with the tortoise, you have to know its family tree; the big fat “Turtles” – Subversion (SVN) evolved from their ancestors called CVS back in ice-age. I’m not interested in CVS but I’m very much interested in SVN and how the little TortoiseSVN communicates to its parents.

So I did a bit of research on Googology and started learning about the whole Tortoise family and their neighborhood. So here we go…

What is SVN?

Subversion is an open source application for revision control, is a replacement for CVS. The goal of the subversion project is to build a version control system that is a compelling replacement for CVS in the open source community.

Subversion’s Features (# Parent Site) (# Wiki)

What operating systems does Subversion run on? (# Portability)

All modern flavors of Unix, Win32, BeOS, OS/2, MacOS X.

Subversion is written in ANSI C and uses APR, the Apache Portable Runtime library, as a portability layer. The Subversion client will run anywhere APR runs, which is most places. The Subversion server (i.e., the repository side) is the same, except that it will not host a Berkeley DB repository on Win9x platforms (Win95/Win98/WinME), because Berkeley DB has shared-memory segment problems on Win9x. FSFS repositories (introduced in version 1.1) do not have this restriction; however, due to a limitation in Win9x’s file-locking support, they also don’t work in Win9x.

To reiterate, the Subversion client can be run on any platform where APR runs. The Subversion server can also be run on any platform where APR runs, but cannot host a repository on Win95/Win98/WinMe.

It’s not necessary to set up Apache to use Subversion on the client sides.If you just want to access a repository then can use subversion client such as TortoiseSVN to integrate with the server. Only when you want to host a networked repository then you have to set up on Apache2 or an “svnserver” server. More info see FAQs (#)

What is TortoiseSVN?

It’s a free open-source client for the Subversion version control system, implemented as Windows shell extension. TortoiseSVN manages files and directories over time. Files are stored in a central repository. Its immediate ancestor was TortoiseCVS which talks to CVS server. (# Doc)

TortoiseSVN’s Features (# Doc)

  • Shell integration
  • Icon overlays
  • Easy access to Subversion commands
  • Directory versioning
  • Atomic commits
  • Versioned metadata
  • Choice of network layers
  • Consistent data handling
  • Efficient branching and tagging
  • Hackability

You can also integrade with Visual Studio.net using this tool called AnkhSVN. It is a Visual Studio .NET addin for the Subversion version control system. It allows you to perform the most common version control operations directly from inside the VS.NET IDE. Not all the functionality provided by SVN is (yet) supported, but the majority of operations that support the daily workflow are implemented. (#)

I think this is all for today’s learning about my new pet. I’ll add more detail on how to feed things and teach your pet A,B,C,D later.

So you want to adopt a Tortoise too? Here are where you can get it from and how to look after it.

# Get Subversion here
# Get TortoiseSVN here.
# Download AnkhSVN

Study Notes

I’m learning new things these days and am just sharing some notes here. I’m still learning and these technologies are very new for me, hence my notes gonna have heaps of errors and wrong information. You are most welcome to correct them, fill some more in and share you notes with me too. Alright, so we are set to go.

I’ll be updating this post with links so still tune.

All the notes are subject to change as I’ll be filling in with more info later.

Monday Morning Spoiler

One of the most annoying things to face early in the morning is not being connected to one of the damn servers where all the main project source safe DBs are.

You want to start your work nice and easy especially on Monday morning but some freaking reasons, it never happens.
One way or another my Monday mornings are spoiled by this kind of annoyance.

I just hope the connection doesn’t lost or my project gonna be in hell lotta mess.
Where are the system guys when you need one.
Oh I forgot, they always come after 10/11am. Very hard working freaks!!

And where is my coffee? Crap, my laptop low on power, forgot the damn recharger!
I hate Mondays! x-( x-(

  • Comments Off
  • Filed under: Development, Personal, Project Notes, VSS, Work
  • Seriously this is just too much pain for me. May be I don’t know the easy steps or there is just no easy way out.

    Web projects have always been in conflict with Visual Source Safe in many areas especially when adding to VSS with proper directory mapping and moving projects around different VSS DBs.

    I unbind the solution, unbind the project, then bind to new DB. First it seems all right with every files checked in. Then I can’t build nor save the whole project. Something about “check out solution” to build or “discard memory change”. Both option won’t save properly. The next restart of the solution will not include the web project and give you a project not found error.

    I remove all .scc, mssccprj.scc and .csproj.vspscc files from solution as well as the project and try again. Still giving

    me that same old shit error! This is just freaking hell, taking too much of my time trying many different ways.

    Some projects binded well after about 3 tries but some just not happening. I tried 6 times for one project and finally about to give up, found the solution.
    It’s not a good solution but it’s working.

    First of all you’ll have to get rid of all those, vss associated, mentioned files above. Just search in the project folders and delete all.
    Once you’ve done that, open solution file (.sln) and project file (.csproj) in NOTEPAD!
    Yah you really need to play around with those source files.

    In both files, you’ll see some encrypted codes and some understanding configurations. Now you know what to do.
    Just have to delete all VSS config parts. Oh yah, you’ll have to uncheck “Read Only” permission from all your files so better allow read to the whole project folder.

    Ok back to solution file, you need to remove “GlobalSection(SourceCodeControl)” bit, similar to the following.


    GlobalSection(SourceCodeControl) = preSolution
    SccNumberOfProjects = 1
    SccLocalPath0 = .
    CanCheckoutShared = true
    SolutionUniqueID = {04C8BE20-2A9D-4E0B-9E42-AA9E45834A6F}
    EndGlobalSection

    Again from project (.csproj) file, delete the followings from the very first config tag.


    SccProjectName = "SAK"
    SccLocalPath = "SAK"
    SccAuxPath = "SAK"
    SccProvider = "SAK"

    Now that should set things right and your project becomes fresh, offline, unbinded version. You can finally proceed to the binding with new VSSDB as normal new project binding steps.

    phweeewwwwww!

    That’s the only way I can think of to make it work and it took me hell lotta time to figure it out. So here you go – my note of struggling with vss transfer.
    Do let me know if you have better/easier solution to this problem as I very much wish to know the proper method rather than scratching head, pulling hairs, banging around, following above steps.

  • Comments Off
  • Filed under: Development, Personal, Project Notes, VSS
  • Flickr Photos

    Downloads

    Twitter Status


    Goodie Links


    Mayvelous Friends


    I'm an Author for Global Voices

    Archives