From b6fef83c4814fd83301da52b11c1714d8e0594fa Mon Sep 17 00:00:00 2001 From: Rob Reynolds Date: Wed, 17 Aug 2011 23:45:39 -0500 Subject: [PATCH] fixing issue 40: customizations fail when the folder path has build in it more than once --- README.markdown | 1 + assemblies/build/uc.exe | Bin 28672 -> 28672 bytes assemblies/build/uppercut.dll | Bin 24064 -> 24576 bytes assemblies/build/uppercut.tasks.dll | Bin 23040 -> 23040 bytes build/uc.exe | Bin 28672 -> 28672 bytes build/uppercut.dll | Bin 24064 -> 24576 bytes build/uppercut.tasks.dll | Bin 23040 -> 23040 bytes docs/legal/CREDITS | 25 ++++----- product/uppercut.tasks/CustomExtensionTask.cs | 2 +- .../extensions => }/IterationSpecs.cs | 2 +- .../extensions => }/StringExtensionsSpecs.cs | 49 +++++++++++++++++- .../extensions => }/TypeCastingSpecs.cs | 2 +- .../extensions => }/TypeExtensionsSpecs.cs | 2 +- product/uppercut.tests/uppercut.tests.csproj | 10 ++-- product/uppercut/StringExtensions.cs | 17 ++++++ 15 files changed, 88 insertions(+), 22 deletions(-) rename product/uppercut.tests/{infrastructure/extensions => }/IterationSpecs.cs (90%) rename product/uppercut.tests/{infrastructure/extensions => }/StringExtensionsSpecs.cs (63%) rename product/uppercut.tests/{infrastructure/extensions => }/TypeCastingSpecs.cs (93%) rename product/uppercut.tests/{infrastructure/extensions => }/TypeExtensionsSpecs.cs (93%) diff --git a/README.markdown b/README.markdown index e9f74f1..86cf226 100644 --- a/README.markdown +++ b/README.markdown @@ -59,6 +59,7 @@ It helps keep to the product updated, pays for site hosting, etc. https://www.pa * Adding in support for StorEvil. ==1.4.1.0== +* FIX: Issue 40 - customizations fail when the folder path has build in it more than once - see http://code.google.com/p/uppercut/issues/detail?id=40 for details. (418) * FIX: Issue 39 - The detailed build.log is not being written to sometimes - see http://code.google.com/p/uppercut/issues/detail?id=39 for details. (415) ==1.4.0.0== diff --git a/assemblies/build/uc.exe b/assemblies/build/uc.exe index 52de09c8775fb9322c2dbb945b719ca47a0dee9c..73edc106c7255e670b3afcd9fbf68a6a342b79e3 100644 GIT binary patch delta 73 zcmZp8z}WDBaY6^PdWX-(?zwCNx)y8vGlDCfHY=+)sTR3Enry-TmC<~&9)}+zNX_JW bPEAJP%_})KvoJ2)9Lu+!1t`fY{5b{y*;g4; delta 73 zcmZp8z}WDBaY6^Pf1}IB?zwCNo|f08gVa8`&(;rh-`1)wFxi6rE2HUVJq|xckebQ$ boSKaMn^$sfW?`JaIhJod3s90*_;U;Z;$|6R diff --git a/assemblies/build/uppercut.dll b/assemblies/build/uppercut.dll index a0c45201a9cb095f76bdef14ae56d26fbda46c81..5a5a0b9ccc7e85d551c3511e487438c22ed8f4b1 100644 GIT binary patch delta 6280 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 diff --git a/assemblies/build/uppercut.tasks.dll b/assemblies/build/uppercut.tasks.dll index b2f6d5d4016ae0eab682658f4d345eb74d0f9e43..2e9b6cf5f167100b98565307b23ceefd5a2e168a 100644 GIT binary patch delta 1101 zcmchW-EUMy7{=dscJ`b-3*FtBX%1}`zgTFuU$NVmmad3y+OV`Nvb1SH8dDZ%q0;tr z`=MBsvNwXFggSwQ5RG0~W4yxQt04pe7X%^%E7hDo)OniI5f5CI{d!F~1 z$vMwVat@uvLuc{$kwD@|ZszE7cz@>mZFpQGPU9cCM7*kzsbD@0fcocri^;R2AxxUz z!krv<>FQ_=?$%qQFGqF(gp+#+;h>f5*T=>X)alu`0FFC=3-acPfc!SUMooBk= z*YNldX_;er!=#QkLacH;k7SwSjgl;n@OsPfipGvzVmPL+%Ue|9n5v=@=Trmv1-1GA zt)efKKioM^-NK9|Hv?G79DyY#C}K~CT7Y;XgDe2J0D^fGguTfnyh~VKR}u2wBNMhJ z-=u3^X4l(xz&k)m$a|mIFt3ZY($cNMDc$PUrT4@D5(fe9l0H=AyC=p5NA^++fQzdE za%GhDbOUb!pe>Nd_H?w9mN)6I-1RtRes_Ps-q%E}?ZQ5y1tn1wt9> zL?1c{zLp>6ntx{&R#!1&S1-mY#`;Hx3cLIJh6>{oeS;(86NM3)yaD5^twp=*>8fdJ zokepmy{RmA(<{sl?_X^D{Cek=4|~}q^UB5$=N1Ga`t{sleLMHO6?~CJA`$afuAO0v yY25M#mR+R3@4x4c{wN>EtL9X`2X&HHg!A&D5D^4U&##^8jf6s;sdUIuggg z{+uWZESgoR4%}uorJhL^0TP+*j6~GQyk?H2o@$=pN((9c;B|IVM1vinHkr$*rq0B^ zH@IqaonRNM8|-GbyTKlo1~&*;mLx^D;|5h5^S&UgnXBp>Zh1_%bIZ?l5BrDMYB6n;-;PtJ&+p2=;sLZB0Qj2qJI#K0|K6Q@c5q98lPds9 zjhu}P!yh>SegxVEMh5#?|IV2Y{k1q{fAKHk%iXdw=EEq{fvOyn>CpRdKg=7{;%=+j zEqv$-ndd~oR#j38eh*pJPiqIp^=WY6Xvj}OT6=TZaD2Lk552gkA<2HMVL~QF0hY=l z)Uck?;sN%`SE&F+*&>iOU=CcShD$glJA?~|WG}dILgtz07D<<6R=D(K=)Vo~U!{h5 z{8RQoGcCxYks3x-6Tg3B>bO`wO}^^kqB~XRjg{)W$Wczs@j&&|SE7%eQ`bd-Tb_>; zsH*Z%pm$V`c`Ed?A+IwB!?6bGj`~Rq(mmD7$%4AU-qVXrYYm&|p?6%&N(M^jr z;;=X+KDBpNw3C&q9(b{#iR!NL?GrZrY$w{yedo~L&zBm#@6UMZ>c_babMZqzKAwMU z%x-=@E+WxZGGnE8`Qt{Cyv(iAleVGUPq^AvHm<|Qll&L`w>~pxDlK@{&R0gzWU198 chYsUM_QcQ)fve5rsG%!st$gV&&SYbc01=+tn*aa+ diff --git a/build/uc.exe b/build/uc.exe index be57d2356e16c76da0b3907e32c915b50983e7f7..73edc106c7255e670b3afcd9fbf68a6a342b79e3 100644 GIT binary patch delta 152 zcmZp8z}WDBaY6^PdWX-%?oz%t>I@A23_#$(z`&6>QBioaA|pGSfUdDr_IXh zO{zuik0x8Ne`Pe^tjFQUXb#lr2hza=#Gybu1!%++P6mdcV3%N3w`+^dmzlaPUGCAo wN~ZONFi<|(DkeEUC3W%+P75Xmk;xx94L8ei*|9J#+#Jido&{(sukhy>0Kru&YybcN delta 156 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 delta 6177 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 diff --git a/docs/legal/CREDITS b/docs/legal/CREDITS index f8adf36..c4b8a36 100644 --- a/docs/legal/CREDITS +++ b/docs/legal/CREDITS @@ -1,13 +1,14 @@ -UppercuT has been the thoughts and work of the following people: - -Committers ----------- -Rob Reynolds, Committer - lead developer and manager of the framework -Dru Sellers, Committer - thought leader on direction - -Other Credits -------------- -Dru Sellers - coined the name for the framework -Gary King and Matt Mergen - original ideas and code behind what has ultimately become template builder. -NAnt - what a great product! Since UppercuT is based wholly on NAnt, it just makes sense that it deserves quite a bit of credit. Now release NAnt already!! +UppercuT has been the thoughts and work of the following people: + +Committers +---------- +Rob Reynolds, Committer - lead developer and manager of the framework +Dru Sellers, Committer - thought leader on direction +David Keaveny, Committer + +Other Credits +------------- +Dru Sellers - coined the name for the framework +Gary King and Matt Mergen - original ideas and code behind what has ultimately become template builder. +NAnt - what a great product! Since UppercuT is based wholly on NAnt, it just makes sense that it deserves quite a bit of credit. Now release NAnt already!! Anyone who has used UppercuT and provided feedback to improve the product! \ No newline at end of file diff --git a/product/uppercut.tasks/CustomExtensionTask.cs b/product/uppercut.tasks/CustomExtensionTask.cs index b5fb5cc..f069ffd 100644 --- a/product/uppercut.tasks/CustomExtensionTask.cs +++ b/product/uppercut.tasks/CustomExtensionTask.cs @@ -182,7 +182,7 @@ private void log_file_found(string file_name, IFileSystemAccess file_system) private string get_file_name(string custom_extensions_folder, string build_folder, IFileSystemAccess file_system) { - string base_path = file_system.get_full_path(file_system.get_directory_name_from(extends)).to_lower().Replace(build_folder.to_lower(), custom_extensions_folder.to_lower()); + string base_path = file_system.get_full_path(file_system.get_directory_name_from(extends)).to_lower().replace_last_instance_of(build_folder.to_lower(), custom_extensions_folder.to_lower()); base_path = base_path.Substring(base_path.IndexOf(custom_extensions_folder.to_lower())); string file_name = string.Format("{0}.{1}{2}", file_system.get_file_name_without_extension_from(extends), extension_type,file_system.get_file_extension_from(extends)); diff --git a/product/uppercut.tests/infrastructure/extensions/IterationSpecs.cs b/product/uppercut.tests/IterationSpecs.cs similarity index 90% rename from product/uppercut.tests/infrastructure/extensions/IterationSpecs.cs rename to product/uppercut.tests/IterationSpecs.cs index 3e0d5bd..c8fb684 100644 --- a/product/uppercut.tests/infrastructure/extensions/IterationSpecs.cs +++ b/product/uppercut.tests/IterationSpecs.cs @@ -1,4 +1,4 @@ -namespace uppercut.tests.infrastructure.extensions +namespace uppercut.tests { using bdddoc.core; using developwithpassion.bdd.mbunit; diff --git a/product/uppercut.tests/infrastructure/extensions/StringExtensionsSpecs.cs b/product/uppercut.tests/StringExtensionsSpecs.cs similarity index 63% rename from product/uppercut.tests/infrastructure/extensions/StringExtensionsSpecs.cs rename to product/uppercut.tests/StringExtensionsSpecs.cs index 0e1f965..06a20fc 100644 --- a/product/uppercut.tests/infrastructure/extensions/StringExtensionsSpecs.cs +++ b/product/uppercut.tests/StringExtensionsSpecs.cs @@ -1,4 +1,4 @@ -namespace uppercut.tests.infrastructure.extensions +namespace uppercut.tests { using bdddoc.core; using developwithpassion.bdd.contexts; @@ -112,5 +112,52 @@ public void should_not_error_out() } } + [Concern(typeof(StringExtensions))] + public class when_the_string_extensions_attempts_to_replace_last_instance_on_a_regular_string : observations_for_a_static_sut + { + static string result; + + private because b = () => result = @"C:\CodeBuild\DataManager-Debug\build".replace_last_instance_of("build", "build.custom"); + + [Observation] + public void should_not_replace_first_instance() + { + result.should_contain(@"C:\CodeBuild\DataManager-Debug"); + } + + [Observation] + public void should_replace_last_instance() + { + result.should_contain(@"DataManager-Debug\build.custom"); + } + } + + [Concern(typeof(StringExtensions))] + public class when_the_string_extensions_attempts_to_replace_last_instance_on_a_null_string : observations_for_a_static_sut + { + static string result; + private static string test = null; + + private because b = () => result = test.replace_last_instance_of("build", "build.custom"); + [Observation] + public void should_not_error_out() + { + result.should_be_equal_to(null); + } + } + + [Concern(typeof(StringExtensions))] + public class when_the_string_extensions_attempts_to_replace_last_instance_when_no_matches_exist : observations_for_a_static_sut + { + static string result; + + private because b = () => result = @"C:\CodeBuild\DataManager-Debug\build".replace_last_instance_of("builds", "build.custom"); + + [Observation] + public void the_original_string_should_be_returned() + { + result.should_be_equal_to(@"C:\CodeBuild\DataManager-Debug\build"); + } + } } \ No newline at end of file diff --git a/product/uppercut.tests/infrastructure/extensions/TypeCastingSpecs.cs b/product/uppercut.tests/TypeCastingSpecs.cs similarity index 93% rename from product/uppercut.tests/infrastructure/extensions/TypeCastingSpecs.cs rename to product/uppercut.tests/TypeCastingSpecs.cs index f6b362e..be9e82a 100644 --- a/product/uppercut.tests/infrastructure/extensions/TypeCastingSpecs.cs +++ b/product/uppercut.tests/TypeCastingSpecs.cs @@ -1,4 +1,4 @@ -namespace uppercut.tests.infrastructure.extensions +namespace uppercut.tests { using System.Collections.Generic; using System.Data; diff --git a/product/uppercut.tests/infrastructure/extensions/TypeExtensionsSpecs.cs b/product/uppercut.tests/TypeExtensionsSpecs.cs similarity index 93% rename from product/uppercut.tests/infrastructure/extensions/TypeExtensionsSpecs.cs rename to product/uppercut.tests/TypeExtensionsSpecs.cs index e5a2a5f..be3b02f 100644 --- a/product/uppercut.tests/infrastructure/extensions/TypeExtensionsSpecs.cs +++ b/product/uppercut.tests/TypeExtensionsSpecs.cs @@ -1,4 +1,4 @@ -namespace uppercut.tests.infrastructure.extensions +namespace uppercut.tests { using System.Data; using System.Linq; diff --git a/product/uppercut.tests/uppercut.tests.csproj b/product/uppercut.tests/uppercut.tests.csproj index 310ff9d..1a33c54 100644 --- a/product/uppercut.tests/uppercut.tests.csproj +++ b/product/uppercut.tests/uppercut.tests.csproj @@ -117,10 +117,10 @@ - - - - + + + + @@ -163,7 +163,7 @@ - +