## 3. The WinCVS Client and Local

## 3.1 Introduction

The first port on cvs on Windows was done by Cyclic Software and is excellent. Why ? Because they ported also the server and local capability and made a great work to deal with the non-case sensitive Windows file system.

Except some hacks inside the cvs code to take advantages of the cvs features, WinCvs does not change the cvs source code : all it does it is to compile cvs as a dll (Dynamic Linked Library).

## 3.2 What is inside

You will find inside WinCvs a set of commands (all have a on-line help entry) that you can use to manage source repositories.

WinCvs looks like that :

- An ouput console : you see all the messages of WinCvs, cvs client and cvs server so you can control that everything is going fine.
- A preferences dialog : the CVSROOT, authentication...
- A set of common menu commands (Copy, Save, Paste...).
- A set of cvs menu commands.
- A line commands dialog provided when the menu command is not avalaible.

## 3.3 Binary and Text files

You have to be very carefull about the usage of binary files : read the cvs documentation carefully.

WinCvs provides two ways to add files to a repository :

- Add files...
- Add binary files...

WinCVS now supply some controls when adding files : that's because many user make mistakes when adding files and forget to add "as binary" when the file is binary. It will warn you if you are about to make a mistake.

## 3.4 The "import" problem

The import command in cvs should be seen as inconsistent since it imports initially all the files as text files (so it makes a line feed conversion between the client and the server).

When the initial import is done and all the binary files have the binary attribute, the server and the client agree to not convert this files and everything is working finely.

So the problem appears ONLY during the first import, and cvs user know that the initial import is THE main difficulty with cvs.

Happy-fully, there are some turn-around :

- Make the initial import directly from the cvs server machine (for now on Unix or Windows platforms). But be careful with the line feeds automatic translation when you copy files from and to !
- Use the cvs wrappers file to mark extensions as binary. But you'll still not be able to import from the client since all the files are initially transfered as text to the server.
- Use the -W option of cvs import : the problem is that you have to figure yourself all the extensions to map to a binary format (the -W option works this way : you can tell cvs that an extension, .gif for example, represents a set of binary files). My experience shows you can make a lot of errors this way.

That's why the WinCVS port was implemented for :

- Using the import command of the WinCVS client, you'll be able to have a dialog which tells you the current binary mapping and let you modify it. It detects also a lot of common errors and sometimes warn you about something you may care about.
- When you hit continue, WinCVS will prepare automatically the line command to cvs with the binary wrappers you want to use.
- Finally you can import safely. Both the client and the server will know exactly which files are binary and which one are text.

## 3.5 Getting started

- Be sure to be familiar with the import problem.
- Set in the preferences the CVSROOT and the kind of authentication.
- Use the online-help avalaible on most of the menu entries or dialogs by clicking on the arrow located on the right of the toolbar which enables a sensitive help.

## 3.6 Hacking WinCvs

The WinCvs port consists in :

- A dll which contains the cvs code and mimic the cvs command line. This architecture allows to re-initialize the globals of cvs as well to separate really the implementation of the client and cvs.
- A MFC application which implements a UI, a console and call the dll to make the stuff.