The content of this blog is my personal opinion only. Although I am an employee - currently of Nvidia, in the past of other companies such as Iagination Technologies, MIPS, Intellectual Ventures, Intel, AMD, Motorola, and Gould - I reveal this only so that the reader may account for any possible bias I may have towards my employer's products. The statements I make here in no way represent my employer's position, nor am I authorized to speak on behalf of my employer. In fact, this posting may not even represent my personal opinion, since occasionally I play devil's advocate.

See http://docs.google.com/View?id=dcxddbtr_23cg5thdfj for photo credits.

Monday, July 14, 2014

Transformations when moving changes between branches

I often want to have transformations automatically applied when I perform operations between branches.

Very simple example: I have occasionally had readmes for specific branches, that I want to live only in that branch. E.g. README.vcs-branch-name1, README.vcs-branch-name2

Therefore, when merging from branch1 to branch2, I do NOT want to transfer README.vcs-branch1.

But when doing a reverse merge from branch2 to branch1, I do not want to transfer README.vcs-branch2, and I especially do NOT want to delete README.vcs-branch1.

Mercurial's merge tracking will arrange to delete the README.vcs-branch1 file on the reverse merge.  Bad, mercurial.

You can think of this as a patch that is implicitly applied whenever there is a cross branch operation.  Patch may be too specific: possibly a programmed transformation expressed as code.

(Would also want to notify on cross-branch diffs about such transformations.)


A contrived example: if tracking Linux installations, may want to change text in some control files.

E.g. some file may contain  a user name, like "UserThatRunsFooBar"

On one machine it may be FooBarUser.   On another it may be SamJones.

All of the rest of the diffs to the file may transfer, just not that variable name.

May want a different branch for the two systems.

Hence, a desire for a transformation applied whenever such a file is moved between the branches for the two systems.


Partial checkouts can then be considered to be branches with such transformations based on filesystem structure.

A partial checkout of a subtree may have the transformation rules:

* include all stuff under tress T1, T2, ...

* exclude all stuff not under those trees.

No comments: