Hoi,
In een project met zowel mensen die verschillende editors gebruiken (dus bestanden met verschillende line-endings) en waarin bestanden ook gegenereerd worden (zelfde probleem afhankelijk op welk platform dit gebeurd), wil ik graag iets automatiseren. Namelijk het ongedaan maken van changes in bestanden die alleen "eol-style" (en evt. white-space) changes hebben in een svn working copy.
NB Ik begrijp dat dit slechts symptoombestrijding is, maar het lost in ieder geval voor mij het probleem op en volgens mij is het sowieso een handige tool om te hebben.
Hiermee krijg ik een lijst met alle changed files:
Bijv.:
En hiermee krijg ik een lijst met alle files waarbij de eol-style genegeerd wordt:
Bijv.:
Oftewel, bestand "b" heeft alleen eol-style diffs. Daarop wil ik dan een svn revert uitvoeren, zodat alleen de "echte" changes overblijven.
Wat is nu een handige manier om voor elk item in set A, die niet in set B voorkomt, een command uit te voeren? Ik zou beide sets in een temp file kunnen wegschrijven, maar... dan?
Ik hoef geen kant-en-klare oplossing, maar een duwtje in de richting zou ik waarderen :-)
Edit:
Nu heb ik dit, maar gaat wel erg traag...
Edit II:
Blijkbaar voerde hij net de hele regel opnieuw uit voor elke svn revert o.i.d. Maar ik kom er wel...
In een project met zowel mensen die verschillende editors gebruiken (dus bestanden met verschillende line-endings) en waarin bestanden ook gegenereerd worden (zelfde probleem afhankelijk op welk platform dit gebeurd), wil ik graag iets automatiseren. Namelijk het ongedaan maken van changes in bestanden die alleen "eol-style" (en evt. white-space) changes hebben in een svn working copy.
NB Ik begrijp dat dit slechts symptoombestrijding is, maar het lost in ieder geval voor mij het probleem op en volgens mij is het sowieso een handige tool om te hebben.
Hiermee krijg ik een lijst met alle changed files:
code:
1
| svn st | awk '{print $2}' |
Bijv.:
code:
1
2
3
4
| a b c d |
En hiermee krijg ik een lijst met alle files waarbij de eol-style genegeerd wordt:
code:
1
| svn diff . -x --ignore-eol-style | grep '^Index:\ ' | awk '{print $2}' |
Bijv.:
code:
1
2
3
| a c d |
Oftewel, bestand "b" heeft alleen eol-style diffs. Daarop wil ik dan een svn revert uitvoeren, zodat alleen de "echte" changes overblijven.
Wat is nu een handige manier om voor elk item in set A, die niet in set B voorkomt, een command uit te voeren? Ik zou beide sets in een temp file kunnen wegschrijven, maar... dan?
Ik hoef geen kant-en-klare oplossing, maar een duwtje in de richting zou ik waarderen :-)
Edit:
Nu heb ik dit, maar gaat wel erg traag...
code:
1
2
3
4
5
| svnignoreeol() { svn diff . -x --ignore-eol-style | grep '^Index:\ ' | awk '{print $2}' > __CHANGESET_EOL_IGNORE svn st | awk '{print $2}' > __CHANGESET diff -y --suppress-common-lines __CHANGESET_EOL_IGNORE __CHANGESET | awk '{print "svn revert $2"}' | sh } |
Edit II:
Blijkbaar voerde hij net de hele regel opnieuw uit voor elke svn revert o.i.d. Maar ik kom er wel...
code:
1
2
3
4
5
6
| svnignoreeol() { svn st | grep ^M | awk '{print $2}' > __CHANGESET svn diff . -x --ignore-eol-style | grep '^Index:\ ' | awk '{print $2}' > __CHANGESET_EOL_IGNORE diff -y --suppress-common-lines __CHANGESET_EOL_IGNORE __CHANGESET | awk '{print $2}' | xargs svn revert rm __CHANGESET_EOL_IGNORE __CHANGESET } |
[ Voor 22% gewijzigd door X-Lars op 28-10-2010 21:54 . Reden: svnignoreeol() toegevoegd ]