Welcome to MSDN Blogs Sign in | Join | Help

Can you crack this II?

Here are the next round questions

1.      This was a jigsaw the we solved to get pictures with following words

go a little soft to find the latest one:-

picture of chicago the movie -----> statue of elvis  ---------> picture of london's eye Millenium wheel ---------> painting "whistler's mother" ---------> ?

2.      This one had a song playing that I cannot put here. I solved it without using the song

why lock the key to common wealth?

pro bono help is not an encoded art

so, wales decided to share me with you

but now you have to play your part

at the land where this song comes from

people call me fast

who am i... ask me!

 

(other clues - poster of Fast and the Furious, Greek-English dictionary and Greek grammar books in a shelf, a globe/sphere in the background, piece of jigsaw puzzle in the background, audio clip of a song that sounds Hawaiian/Italian/Greek)

 

3.      Do not use view source to crack this and find the font for encrypted part. You are supposed to do the decryption on your own and thats not the only thing you need to crack.

abcdefghijklmnopqrstuvwxyz

ana feels threatened while everyone finds me cool

now no one needs to sit like a dumb fool

i am an ugly bipod with huge antennae

i have a titanium front

and a solgel infra-red posterior

unfortunately this time machine uses no such material

who am i?

                        htaed neercs

 

4.       And the last one.

To reach the gate of glory and fame

You will have to guess my name...

 

My master's fame flew at unseen heights

When his tireless and unfed creation lost two dozen clocks

My master joined hands with the lord of the 'unexplored' skies

Together they created me and my swift brother...

My mischievous kin jumped off my belly

and disappeared into the ether...

If you think my master got cross,

You would be right, but it was no loss...

 

Posted by ankur | 6 Comments
Filed under:

Can you crack this?: Solutions

First thing first sorry guys for not posting for so long was out for long time.

Here are the solutions:

  1. This was very straight forward. Blue Gene, the IBM super computer. Royal DNA (Gene) born out of sand (which is how you make silicon). It is the most powerful in the world now. Its kin can beat the russian master (which would be Deep Blue) and they proved to the japanese that they are faster (they beat Japans Earth simulator to take the top spot).
  2. We first went looking for somthing related to "Flash Gordon comic strip" but that was a wrong path to follow. We then just thought of looking into NASA missions to Mars and found the answer. Mars Exploration rover Spirit. it downloaded the first photograph on tuesday 6th Jan 2004 and then it abruptly ceased communicating with mission control due to a "Flash memory anomaly". It recently went over "Husband hill" (spouse).
  3. With this one we tried a lot of things but we finally got it by fluke. Akash had this stupid idea that the mystry part is related to the The Impact Theory by Luis and Walter Alveraz. This led us to K/T boundry and iridium and bingo we found our "Tennant". rest we just fitted. IRIDIUM - discovered by Smithson "Tennant". in London. - Atomic number 77 - Fortran also used 77 as version. 77 satellites planned but only 66 deployed, i.e. 6 taken out of 666 (devil's number). "Calling planet earth" tag line for failed Iridium project of IBM.

There are few more in the coming post.

Posted by ankur | 2 Comments
Filed under:

Can you crack this?

One of the carziest puzzels I ever came accross...

We(me, Amit Chat and Satej) are taking part in the onlie treasure hunt organized by ISB folks. The first day was a breeze the moment we saw the clue we had the answer. Here is the clue:

I am the royal DNA born out of sand
Most powerfull- who has conqured the Earth land
My kin can out-think the russian master
I have proven to the Japanese that I am faster....
Who am I?

 

Second day we went on a wrong track but still the answer was logical


On Tuesday,
I had downloaded the book that Alex Raymond wrote in 1934,
but it got corrupted …
I went on a drive over the red hills with my spouse…
and made history!!
Listen to the song to know my soul...

<Song: Here I am from Sprit of Cimmeron by Brayan Adams>

while I rock and roll the unexplored...
What is my name?

Third day was bad we just got it with our team + akash and khushboo searching for anything related to physics and chemistry on MSN\google\wiki.

We looked at all the constants (the value of Gravitational constant is 6.67*POW(10,-11)),  all the heavely bodies affecting earth.

We racked our brain with periodic table for atomic number 66 (Dysprosium) but no luck.

 And most baffling was the relation of this photograph with the answer. We even searched for all the Nobel prize winners in field of physics and chemistry to figure this out.

My coming into your world is an ancient mystery.
A tenant in London discovered me and made history.
To formulate and translate someone borrowed my number.
But all I did was go around and then go into deep slumber.
I missed the devil by one over the boundary.
Called earth and left everyone in quandary.

So… who am I?

Do you have an answer?

Tell me if you can crack this relationship. And now i have to solve todays clue. will keep you posted.

-ankur

Posted by ankur | 6 Comments
Filed under:

Thread.Abort() on a thread executing a Finally/Catch or .ctor block.

Issue: If a thread t is in some catch or finally or cctor block, calling t.Abort() from another thread does not have any effect on the thread. Here is the code to repro this.

using System;

using System.Threading;

namespace ConsoleApplication2

{

class Program

{

static Thread t;

[STAThread]

static void Main(string[] args)

{

Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);

t = new Thread(ChildThread);

t.Start();

t.Join();

}

static void ChildThread()

{

try

{

throw new Exception();

}

catch (Exception)

{

try

{

Console.WriteLine("going to sleep");

Thread.Sleep(10000);

Console.WriteLine("out of sleep");

}

catch (ThreadAbortException e)

{

Console.WriteLine(e.ToString());

}

}

}

static void Console_CancelKeyPress(Object sender, ConsoleCancelEventArgs e)

{

Console.WriteLine("aborting");

if (t != null)

{

t.Abort();

t.Join();

}

}

}

}

Run the code and press CTRL+C to repro.

Club this issue with try\retry code in Abhinaba's blog and you have infinitly waiting call. May be this is the reason The Old New Thing advices against using retry indiscriminatly

Explaination that I got from the feature team:

Well, this is really interesting. Jeff's answer is a bit misleading; the actual behavior is more complex (and as the person who has to document it, I could wish it were more consistent).

(1) In the case of the catch block, the call to the Abort method does NOT block and the thread WILL abort as soon as the catch block completes. This is true even if no further code executes on the thread after the catch block.

(2) In the case of the finally block and the static constructor, the call to the Abort method appears to block until the finally block or static constructor completes! This is totally unexpected. If the thread doesn't execute any more code after the finally block or the static constructor, then ThreadAbortException is never thrown; but if the thread goes on executing long enough it WILL abort. (How long is "long enough"? Well, let's just say it's a race condition.)

Joe, can we say for sure that this is by design? I don't like the fact that the catch behaves differently from the finally and the static .ctor, and I REALLY don't like the Abort method blocking.

reply to this:

We should mention that Aborts called asynchronously on another thread might block, but I don’t know that we should document the exact behavior. Because there are situations where it won’t block, we do not want people to rely on blocking e.g. to signal that the thread has finished its abort.

But the more important (IMHO) thing to document is when abort requests are actually processed. Not processing the abort until after leaving catches, finallys, cctors, CERs, and unmanaged code is expected & fine. There are places we know of—e.g. Socket.Accept—which ends up blocking in an FCALL, which means we are unable to interrupt it. So this is an explanation of a bug that a user might reasonably hit.

What I don't like About this:

  1. As mentioned the call should not be blocking. This leaves the user waiting indefinitly. I have hit this bug making a webservice call and there was an IISREST on the server my call got stuck till there was a timeout at the client side and a Thread.Abort() on given thread was just waiting!!!
  2. There is no way to say Abort no matter what. So you may end up adding complex logic to have a clean exit. see my earlier blog.
  3. And to top that there is no documentation arround this. We would have been doomed if we were not in Microsoft. It was easy for us to just mail a discussion group and get a very quick response from the right people. Though they acknowledge this but I know its not an easy process to get the documentation updated after release. Just hope that they do it.
Posted by ankur | 4 Comments
Filed under:

Migration of partial history from VSS to TeamFoundation

I have an VSS repository i have been using for past 5 years but i do not care for history beyond 2 years. Moving to Teaamfoundation i would like to discard that history. How do i do that?

Either you can use archieve feature in VSS to remove that history from VSS. You can find this in documentation of VSSConverter. But this process can be cumbersome as there is limit to the size of history you can archieve. So you may end up doing archieve of individual folders.

The other option could be a hack (I have come to love this word after my experience in converters :)) based on implementation of incremental migration feature of VSS and this is what we are going to talk about in this blog.

So we just added incremental migration to VSSConverter that looks for checkin comments for figuring out if its a incremental migration and from which point in time it should restart migration. Knowing this we can fool converter by modifyng the required checkin comments to start migration from where ever we want. This can be used to do migration of partial history of VSS. How to do this:

  1. Do a snapshot checkin from the point you want your migration to start.
  2. Add the project mappings to the top level folders (destination folders in settings file) in the checkin comments.
  3. Add a timestamp to the start of checkin comment of last checkin under the destination folders. For instance add "{3/10/2003}" if you want to migrate from 3/10/2003 onwards.
  4. Run the VSSConverter and you have your partial history migrated :).
Posted by ankur | 0 Comments
Filed under:

Incremantal migration with VSSConverter

Why incremental migration?

Case 1: Migration takes a lot of time so I will migraqte a copy of my VSS repository and continue working on the original. after migration of copy I will migrate the delta between original and copy.

Case 2: Migration was stopped in the middle due to power outage/ i had to kill the migration in the middle. I need to migrate from that point onwards.

How it works.

Vssconverter adds Project mattings specified in settings file to checkin comments of destination projects specified in settings file. So if your settings file has entry

<Projects>

  <Project From="$/proj1" To="$/TeamProject/proj1" /> 

 <Project From="$/proj2" To="$/TeamProject/proj2" />

</Projects>

then converter adds a comment to "ADD" action of "$/TeamProject/proj1" and "$/TeamProject/proj2" a checkin comment the above mappings

-----------------------------------------VSSConverter Project Mappings. Do not modify.----------------------------------------

  <From="$/proj1" To="$/TeamProject/proj1" /> 

 <From="$/proj2" To="$/TeamProject/proj2" />

this is to check that a user accidently doesn't tries to migrate wrong repository or uses a wrong project mapings.. Vssconverter adds action time of every vss action in checkin comments. this time is used to determine time stamp of last action migrated. When next time converter is run if it finds project mappings in the checkin comment of destination projects  it assumes it to be incremental migration. then it checks for time stamp of last action migrated as stated above. Converter then migrates actions only after the last action migrated.

Posted by ankur | 0 Comments
Filed under:

More about F1 profiler ( shipped with VS 2005)

Angry Richard's blog talks about some cool features of new F1 profiles. VSInstr has an option called include and exclude.  This allows you to instrument only certain functions inside your app.  It accepts wildcards so you can do things like instrument only a certain class or namespace!!!  This allows you to narrow down the data crunch at instrumentation time. 

Posted by ankur | 0 Comments

Profiling: Sampling doesn't report my functions wait time.

Working on performance of VSSConverter. I am using the new F1 profiler being shipped with VS 2005. I have a simple code sample like this:

 

using System;

using System.Collections.Generic;

using System.Text;

using System.Threading;

namespace perf_test

{

class Program

{

static bool exit = false;

static object lockObject = 3;

static void Main(string[] args)

{

Thread threadWait = new Thread(new ThreadStart(WaitMethod));

Thread threadProcess = new Thread(new ThreadStart(ProcessMethod));

threadWait.Start();

threadProcess.Start();

threadWait.Join();

threadProcess.Join();

}

static void WaitMethod()

{

lock (lockObject)

{

Console.WriteLine("Starting wait");

Monitor.Wait(lockObject, 5000);

exit = true;

Monitor.Wait(lockObject, 5000);

Console.WriteLine("Ending wait");

}

}

static void ProcessMethod()

{

while (!exit)

{

Console.WriteLine("Processing");

}

}

}

}

 

Which function do you think will take more time? Obviously WaitMethod(). Try a sampling profiling on that. Here are the results I got:

 

(the image is not showing properly ineed to figure out why. but it says 80% time in ProcessMethod() and 3% time in WaitMethod())

What do i get with Instrumentation profiling:

(It says 5003 ms spent in ProcessMethod() and 10028 ms spent in WaitMethod())

heres my explaination to what happened.

looking very simplistically sampling is just a statistical data about what your processor was busy doing most of the time. what is done is at regular intervals a snapshot of what is processing is taken. so it misses out if some thread is in wait or sleep.

Instrumentaion modifies your binary and adds code at each function entry and exit. this way yoy get the exact time that was taken by a peice of code to execute including the time spent in wait.

this becomes very evident if you are profiling an application that makes lots of web calls. All such calls go for wait in WebRequest.GetResponse() method and sampling doesn't report the proper time spent in such calls.

Posted by ankur | 0 Comments
Filed under:

Settings File for VSSConverter

There is some problem with VSSConverter documentation at http://msdn2.microsoft.com/en-us/library/ms181247. It has some bogus <i> </i> inserted in all XML snippets. For details on how to migrate see Akash's blog.

 

If you are just stuck on settings file you can use following settings file.

<?xml version="1.0" encoding="utf-8" ?>
 <SourceControlConverter>
 <ConverterSpecificSetting>
            <Source name="VSS">
                  <VSSDatabase name="e:\myrepository"></VSSDatabase>

                  < UserMap name="e:\Migrate\Usermap.xml" />


<!-- uncomment it if you want to specify a SQL server by default we use SQL express installed on you system -->
<!--    <SQL Server="my sql server" /> -->
            </Source>


 <ProjectMap>
  <Project Source="$/my folder1" Destination="$/my Team Project/my folder1"></Project> 
<Project Source="$/my folder2" Destination="$/my Team Project/my folder2"></Project>
<!-- u can add more mappings depending on number of folders you want to migrate -->
 </ProjectMap>

  </ConverterSpecificSetting>

 <Settings>
   <TeamFoundationServer name="My TFS name" port="8080" protocol="http"></TeamFoundationServer>
<!-- assuming your server is set for http protocol and port is 8080 change this according to your install -->

<!-- you can specify the name of output report file here. it should be an xml-->

<Output file="VSSMigrationReport.xml" />
  </Settings>
</SourceControlConverter>

Posted by ankur | 4 Comments
Filed under:

How to stop threads on threadpool when my windows service is being stopped?

I came accross a mail thread which deals with the problem i was facing some time back. Sharing it to you all.

Problem:

I have written a windows service in .Net that uses the ThreadPool.QueueUserWorkItem() call to do some processing. Each work item to the thread pool takes the same type of object to process (although with different arguments). At any given time, there will be a max of 8 items that I would have added to the thread pool. Each thread would take approx < 1 min to finish the processing.

Is there any way for the Service.OnStop() method to know which threads in the threadpool are running processes started by the main thread and is there any way to graciously stop those threads so that the system remains in a clean state when the service is stopped?

Solution:

1.

I’m not sure if this is the correct way, but the way I do it is the following:

Create a bool that your worker threads check to determine whether they should return immediately (e.g. public bool Shutdown_Now = false). Then in your OnStop() do: Shutdown_Now=true; Now you might want to assume that your threads have quit, but in the event that they haven’t, your service will fail to stop (which is probably a bug). Generally to prevent this from ever occurring, I’ll store a reference to Thread.CurrentThread whenever a worker thread starts. Then when OnStop() is called, I’ll notify them to quit with the Shutdown_Now bool and wait to see if the threads are still running after N seconds. If they are, then I’ll call thread.Abort().

So long as you keep track of all the worker threads being used and make sure you dereference the threads that have completed, you shouldn’t have a problem

2.

What I have done and don't know if this is the best way is to create a ManualResetEvent and pass it to my worker threads. My worker threads will keep checking this and if it gets signaled they will shutdown. My OnStop() method simply signals the ManualResetEvent. I also create ManualResetEvents that my worker threads signal when they finish and I can also listen for those after I ask them to shutdown.

3.

We had a similar problem. Have some global object that all threads can access. In your OnStop set that signal variable so that all threads would know that on stop is signaled. You will have to implement a logic in each thread function to check the stop signal variable and wind up processing immediately. Also once you set the variable in OnStop, put a sleep for 10-15 seconds (based on how much is your winding logic for each thread).

 

All these solution are pretty similar in the sense the onus (and logic) was on the worker thread to keep checking at regular interval if it has to stop processing. which i don't like doing. this makes me wish there was a way i could signal to a worker thread to exit as fast as it can but this is not supported as of now :(.

Posted by ankur | 1 Comments
Filed under:

Path.GetTempFileName()

In C# the class Path gives an easy way to get a temporary file for your application but you have to be careful using this API. This API create zero-byte temporary files in Windows temporary folder and when there are 65536 files it gives an IOException saying "The file exists.". But if you need small number of temporary files for short period of time then this API gives you a very easy way of creating temporary file all you need to do is to keep cleaning temporary files you created on regular basis.
Posted by ankur | 2 Comments
Filed under:

How does VSS Converter works?

VSS provides IVSS automation interface to program. This interface is used to retrieve the information from VSS repository. Converter reads the history from VSS repository and adds into an intermediate database (SQL). This history is processed to take care of ambiguities arising due to rename/share and to remove residual information about destroyed items. After the database is processed, it adds the actions (that happened in VSS repository) in chronological order in Team Foundation.

Why chronological order and why intermediate database?

We could have choosen to migrate history per item i.e. for the directory tree we migrate all actions done on perent then similar way migrate all its children (a breadth first approach). But this way we could not have preserved rename and move action history. To preserve this history we had to go in chronological order.

 In VSS an item's (a file or folder) history is stored in such a way that certain actions go into item's history records and certain actions go into it's parent's (folder containing this item) history. Actions that go into item's history are: Create, Edit(only for files), Branch, Archive and Label. Actions that go into parent's history are: Add (this is same as create), Move, Rename, Share, Delete, Destroy. All the actions that go into parent's history are stored with name of item at the time this action happened. actions in item's history are stored with item's latest name. So if we did following actions in VSS:

D1: Add $/A

D2: Add $/A/a.txt

D3: Edit $/A/a.txt

D4: Rename a.txt to b.txt

D5: Edit $/A/b.txt

D6: Label $/A 'test'

D7: Rename A to B

(D1 to D7 refer to Timestamp in increasing order)

Then we have following history listing for each

$/:

1. Created

2. Add A

3. Rename A to B

$/B

1. Created

2. Add a.txt

3. Rename a.txt to b.txt

4. Label 'test'

$/B/b.txt

1. Created

2. Edited

3. Edited

With this kind of history we need to combine all the data and get proper names at each point in time for every item. this was our primary need for using an intermediate Database. So we decided to put all the history in SQL, sort it chronologically and figure out right name for each item at any point in time.

Processing Database

The history we read from VSS needs to be processed to be suitable to be put into Team Foundation. We take one pass through all the actions in the history in reverse chronological order to process the database. Following are the Cases that needs to be taken care of:-

 

Destroyed Items: We do not have the history for destroyed items. But the actions like rename, share, delete, undelete, etc go into parent history are still there. We have to remove such actions from our database so that we have a proper history without any history of destroyed items. For this we also write all the add actions to intermediate database (add action goes into parent history and create action goes into history of item being created we presently ignore add actions). Then all the history for destroyed items is removed from database in between the time window of their creation (marked by add action or share action) and destroy action.

 

Rename of Items: We do not get proper full path names at the given versions for VSS items. But these names are needed when we are putting things in Team Foundation. To figure out the proper names we start we latest name and apply all renames in reverse chronological order.

 

Move of Folders: Move is also like rename (due to move parent name changes) we do not get proper full path names at the given versions for VSS items. But these names are needed when we are putting things in Team Foundation. To figure out the proper names we start we latest name and apply all moves in reverse chronological order.

 

Share of Items: We get history of shared items from both source location (item shared) and destination location (item shared to) this is not correct as we are migrating share as a copy action so at the destination location all the history before share needs to be deleted.

Adding To Team Foundation

To add to Team Foundation we create a workspace on local machine for the converter tool. Then we read actions from intermediate database in chronological order. Then repeat that action on Team Foundation(most of the action in VSS have corresponding action in Team Foundation all the special cases are mentioned seperately). To do actions in Team Foundation we use web service exposed by Team Foundation.

 

Clubbing of Actions 

In Team Foundation there is a concept of changesets. More often than not, a task-specific checkin involves multiple, interdependent revisions to two or more files. Consequently, changes to a single file don’t usually make sense unless they are accompanied by thorough checkin notes. 

A changeset is a logical container into which VSTF bundles everything related to a single checkin operation. A changeset consists of:

  • source file and folder revisions (adds, renames, edits, deletes, moves)
  • related work items (bugs, etc)
  • system metadata (owner, date/time, etc)
  • checkin notes and comments

In VSS every file change goes as different version. We map these seperate changes into changesets by clubbing them on basis of checkin comments. Hence consecutive changes made by a single developer having same checkin comment are taken as related to single checkin and migrated to Team Foundation as single changeset. The idea behind this is that if we have same comment for all these changes these were related to same task and when user looks into the history he will get the information about what else was changed for this task.

 

This also helps us keeping number of changesets low. This ensures we do not degrade already stressed Team Foundation performance too much. A converter run generates enormous stress for VSTS server as we have multiple threads constantly bombarding server with requests for a long period of time. And above that if we have too many changesets each request takes much longer.

Special Cases

 

Share of file -

In VSS, you can share a file across multiple folders. Changes in one shared files is visible across folders where it is shared. Internally VSS creates soft links between shared files. There is not concept of sharing of a folder. When your share folder in effect a folder is created and all underlying files are shared. Team Foundation does not have equivalent of sharing. Shared files will be migrated by copying the version of the file, at the time of sharing began, to the destination folder. From then onwards, the changes made to the shared file are replicated to both copies.

Branch of file -

Though Team Foundation supports branching, converter does not migrate branch as sharing. Sharing is a pre-condition of branching. The migration of a shared file will result in copying the file to the destination folder. Migration of branch event will mean the changes made to shared file not being replicated to both copies any more. Hence, the changes to any branch will be migrated to the respective copy in Visual Studio. This section gives you a list of files that are either shared or branched in VSS. Converter will migrate these files as described in above.

 

Pin/Unpin – We do not migrate Pin or Unpin event as Pin is not supported in Team Foundation. Only currently Pinned items are labeled as Pinned. 

 

Label

  • In Team Foundation there can be only one owner of a label so we do not migrate the user information for labels (include pin events).Also Team Foundation does not allow specifying dates for label on every item so it is not migrated. 
  • In VSS any label on an ancestor is visible on the descendent as an implicit label. No such implicit label is migrated. A label is migrated only if the item was explicitly labeled.

Timezone issue inVSS -

VSS has a time zone issue that it stores client time as the time of action. So if two clients are out of sync or if they are in two different time zones then the history will have a lower version having later time of action. This affects the VSS to Team Foundation converter as it relies on the time of action to figure out the order in which action were done in VSS. Following are the scenarios where converter will fail to migrate the history properly.

 

Action

Limitation

Example

Edit

None

 

Add

Add of child may occur before create of parent. This may cause converter to give an extra error saying parent already exists. There is no data loss though.

History for $/A:

 

Ver 1: D2: created

Ver2: D1: Added B

 

So when B is created A will automatically be created in Team Foundation and when converter tries to migrate the create action for A it will crib saying A already exists.

Label

Implicit labels may not always be same as in VSS.

Consider the following actions in VSS.

 

1.      Create $/A with time stamp D1

2.      Create $/A/B with time stamp D2.

3.      Create $/A/B/a.c with time stamp D4.

4.      Label $/A as test with time stamp D3.

 

After migration to Team Foundation the label test will come before create action for $/A/B/a.c. 

 

Delete

If delete comes before any action that goes into child history(or any actions on descendents) then those actions will be lost.

Consider the following actions in VSS.

 

1.      Create $/A with time stamp D1

2.      Create $/A/B with time stamp D2.

3.      Create $/A/B/a.c with time stamp D4.

4.      Edit $/A/B/a.c with time stamp D5.

5.      Delete $/A with time stamp D3.

 

The action create and edit for $/A/B/a.c will be lost while migrating to Team Foundation.

 

Undelete

The limitation is similar to that of delete only in this case if due to time zone issue the Undelete action comes after some actions on child or its descendents.

Scenario1:

Consider the following actions in VSS.

 

1.      Create $/A with time stamp D1

2.      Create $/A/B with time stamp D2.

3.      Create $/A/B/a.c with time stamp D3.

4.      Delete $/A with time stamp D4.

5.      Undelete $/A with time stamp D6.

6.      Edit $/A/B/a.c with time stamp D5.

 

The action edit for $/A/B/a.c will be lost while migrating to Team Foundation.

 

 

Scenario 2:

Consider the following actions in VSS.

 

1.      Create $/A with time stamp D1

2.      Create $/A/B with time stamp D2.

3.      Create $/A/B/a.c with time stamp D3.

4.      Delete $/A with time stamp D4.

5.      Undelete $/A with time stamp D6.

6.      Create $/A/B/b.c with time stamp D5.

 

The action Create for $/A/B/b.c will create the full directory structure $/A/B and whe the converter tries to do an Undelete it will crib saying $/A already exists and the undelete action will be lost while migrating to Team Foundation.

 

 

Rename

If rename comes before any action that goes into child history(or any actions on descendents) then those actions will go with the wrong name. No versions are lost but the full path for some versions may not be correct

Consider the following actions in VSS.

 

1.      Create $/A with time stamp D1

2.      Create $/A/B with time stamp D2.

3.      Create $/A/B/a.c with time stamp D4.

4.      Rename $/A/ to $/C with time stamp D3.

 

After migration to Team Foundation the rename will come before create action for $/A/B/a.c and a.c will be created as $/C/B/a.c. 

 

Share

This is migrated as Add and has the same limitations as Add action.

 

Move

If move comes before any action that goes into child history(or any actions on descendents) then those actions will go with the wrong name. No versions are lost but the full path for some versions may not be correct

Consider the following actions in VSS.

 

1.      Create $/A with time stamp D1

2.      Create $/A/B with time stamp D2.

3.      Create $/A/B/a.c with time stamp D4.

4.      Move $/A/B to $/C with time stamp D3.

 

After migration to Team Foundation the Move will come before create action for $/A/B/a.c and a.c will be created as $/C/B/a.c. 

 

 

 

 

Posted by ankur | 1 Comments
Filed under:
 
Page view tracker