UserM
UserM

Reputation: 320

How can i make mercurial to add wildcard for file name

we are working on a project, where the angularjs web project is compiled and binaries are stored in hg repo. The problem is angularjs js files are usually compiled with hashing for all binary files. Ex: binary files are suffixed with unique extensions for each file

main.1cc794c25c00388d81bb.js, 
polyfills.eda7b2736c9951cdce19.js, 
runtime.a2aefc53e5f0bce023ee.js, 
common.7d1522841bf85b01f2e6.js, 
1.620807da7415abaeeb47.js,
2.93e8bd3b179a0199a6a3.....etc.

The problem is every time a new binary in checkin in hg repo, it is being detected as new file and retained along with old file of same name. So, i need a way to fool the hg repo, to retain the file name but still consider them as old file replacing the previous one.

main.1cc794c25c00388d81bb.js  ==> overwrite old main.js 
polyfills.eda7b2736c9951cdce19.js ==> overwrite old polyfill.js 
runtime.a2aefc53e5f0bce023ee.js ==> overwrite old polyfill.js 
common.7d1522841bf85b01f2e6.js ==> overwrite old commom.js
1.620807da7415abaeeb47.js  ==> overwrite old 1.js
2.93e8bd3b179a0199a6a3 ==> overwrite old 2.js

Could any one point out a way, to fool the hg to consider these files are just modification of previous files and not as new files ? Can hgignore or some other extension be used...

Upvotes: 1

Views: 305

Answers (1)

planetmaker
planetmaker

Reputation: 6044

A VCS shall track the state of files. And those are indeed new files. One can argue that those are the old files renamed - which can be recorded by the VCS.

So there are two solutions I see:

  1. Record moving the old filenames to the new filenames. hg addremove --similarity XX might be of big help here. It will result in all the files having the new names each time - but if the similarity is good enough it will work nicely. You might need to adjust the XX to get a similarity measure (0 ... 100) which works for you best. Adding --dry-run for testing purposes might make testing easy. You WILL need to delete the old files before you run hg addremove though.

  2. Have a pre-commit hook which iterates over *.js files and moves via an appropriate regex ..js to *.js omitting the hashing code, effectively overwriting the generic filenames with the newly generated hashed filenames.

Upvotes: 2

Related Questions