Toon posts:

[SVN + bash scripting] Revert eol-style changes

Pagina: 1
Acties:

  • X-Lars
  • Registratie: januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
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:

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]


  • Tim
  • Registratie: mei 2000
  • Laatst online: 24-08 14:09
Als je weet dat het symptoombestrijding is, waarom pas je dan niet gewoon de eol-style aan?

  • Nick_S
  • Registratie: juni 2003
  • Laatst online: 09:29

Nick_S

++?????++ Out of Cheese Error

Wat is er mis met de property svn:eol-style=native icm. autoprops? Desnoods af en toe afdwingen met svn_apply_autoprops.py voor bestanden die zijn ingecheckt zonder de autoprops. (Vergeten in te stellen door ontwikkelaar, of met oude autoprops instellingen)

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • X-Lars
  • Registratie: januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
Nick_S schreef op vrijdag 29 oktober 2010 @ 13:31:
Wat is er mis met de property svn:eol-style=native icm. autoprops? Desnoods af en toe afdwingen met svn_apply_autoprops.py voor bestanden die zijn ingecheckt zonder de autoprops. (Vergeten in te stellen door ontwikkelaar, of met oude autoprops instellingen)
Ouch.. die kende ik niet. Dat is inderdaad precies wat er nodig is, thanks :)

Het idee voor mijn scriptje heeft nog wel een klein beetje bestaansrecht. Ik vind het namelijk soms wel handig om na lokaal ontwikkelen (en vóór het inchecken) automatisch mijn whitespace changes ongedaan te kunnen maken (bijv. na her en der debug regels plaatsen/verwijderen).

Echter, als ik als test in een bestand een newline toevoeg, geeft het volgende dit toch als change aan:

code:
1
svn diff . -x --ignore-all-space


Dat is toch niet logisch? Dit zou alle whitespace changes moeten negeren.


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee