@@ -594,6 +594,8 @@ private static void MainUpdateTask(
594
594
// Note: CheckTaskInputContainsPreprocessorInstructions is expensive, so only call if needed
595
595
if ( versionUpdated || taskConfigExists || HasTaskInputContainsPreprocessorInstructions ( gitRootPath , taskTargetPath , config ) || config . isNode )
596
596
{
597
+ var existingLocalPackageVersion = ReadTaskJsonIfExists ( taskOutput , "task.json" ) ;
598
+
597
599
CopyConfig ( gitRootPath , taskTargetPath , taskOutput , skipPathName : buildConfigs , skipFileName : null , removeExtraFiles : true , throwIfNotUpdatingFileForApplyingOverridesAndPreProcessor : false , config : config , allowPreprocessorDirectives : true ) ;
598
600
599
601
if ( config . enableBuildConfigOverrides )
@@ -609,8 +611,8 @@ private static void MainUpdateTask(
609
611
610
612
WriteWIFInputTaskJson ( taskOutput , config , "task.json" , isLoc : false ) ;
611
613
WriteWIFInputTaskJson ( taskOutput , config , "task.loc.json" , isLoc : true ) ;
612
- WriteTaskJson ( taskOutput , taskVersionState . configTaskVersionMapping , config , "task.json" ) ;
613
- WriteTaskJson ( taskOutput , taskVersionState . configTaskVersionMapping , config , "task.loc.json" ) ;
614
+ WriteTaskJson ( taskOutput , taskVersionState , config , "task.json" , existingLocalPackageVersion ) ;
615
+ WriteTaskJson ( taskOutput , taskVersionState , config , "task.loc.json" , existingLocalPackageVersion ) ;
614
616
}
615
617
616
618
WriteInputTaskJson ( taskTargetPath , taskVersionState . configTaskVersionMapping , "task.json" ) ;
@@ -907,21 +909,54 @@ private static void PreprocessIfExtensionEnabledInConfig(string file, Config.Con
907
909
}
908
910
}
909
911
912
+ private static string ? ReadTaskJsonIfExists ( string taskPath , string fileName )
913
+ {
914
+ string outputTaskPath = Path . Combine ( taskPath , fileName ) ;
915
+ if ( ! File . Exists ( outputTaskPath ) )
916
+ {
917
+ return null ;
918
+ }
919
+
920
+ JsonNode outputTaskNode = JsonNode . Parse ( ensureUpdateModeVerifier ! . FileReadAllText ( outputTaskPath ) ) ! ;
921
+ var outputTaskNodeObject = outputTaskNode . AsObject ( ) ;
922
+
923
+ // get LocalPackage version from _buildConfigMapping in outputTaskNodeObject (if one exists)
924
+ return outputTaskNodeObject [ "_buildConfigMapping" ] ? . AsObject ( ) ? [ Config . LocalPackages . constMappingKey ] ? . GetValue < string > ( ) ;
925
+ }
910
926
911
- private static void WriteTaskJson ( string taskPath , Dictionary < Config . ConfigRecord , TaskVersion > configTaskVersionMapping , Config . ConfigRecord config , string fileName )
927
+ private static void WriteTaskJson ( string taskPath , TaskStateStruct taskState , Config . ConfigRecord config , string fileName , string ? existingLocalPackageVersion )
912
928
{
913
929
string outputTaskPath = Path . Combine ( taskPath , fileName ) ;
914
930
JsonNode outputTaskNode = JsonNode . Parse ( ensureUpdateModeVerifier ! . FileReadAllText ( outputTaskPath ) ) ! ;
915
- outputTaskNode [ "version" ] ! [ "Major" ] = configTaskVersionMapping [ config ] . Major ;
916
- outputTaskNode [ "version" ] ! [ "Minor" ] = configTaskVersionMapping [ config ] . Minor ;
917
- outputTaskNode [ "version" ] ! [ "Patch" ] = configTaskVersionMapping [ config ] . Patch ;
918
- outputTaskNode . AsObject ( ) ? . Remove ( "_buildConfigMapping" ) ;
931
+
932
+ outputTaskNode [ "version" ] ! [ "Major" ] = taskState . configTaskVersionMapping [ config ] . Major ;
933
+ outputTaskNode [ "version" ] ! [ "Minor" ] = taskState . configTaskVersionMapping [ config ] . Minor ;
934
+ outputTaskNode [ "version" ] ! [ "Patch" ] = taskState . configTaskVersionMapping [ config ] . Patch ;
935
+
936
+ var outputTaskNodeObject = outputTaskNode . AsObject ( ) ;
937
+ outputTaskNodeObject . Remove ( "_buildConfigMapping" ) ;
938
+
939
+ bool anyVersionsUpdatedExceptForGlobal = taskState . versionsUpdated . Where ( x => ! x . useGlobalVersion ) . Any ( ) ;
919
940
920
941
JsonObject configMapping = new JsonObject ( ) ;
921
- var configTaskVersionMappingSortedByConfig = configTaskVersionMapping . OrderBy ( x => x . Key . name ) ;
942
+ var configTaskVersionMappingSortedByConfig = taskState . configTaskVersionMapping . OrderBy ( x => x . Key . name ) ;
922
943
foreach ( var cfg in configTaskVersionMappingSortedByConfig )
923
944
{
924
- configMapping . Add ( new ( cfg . Key . constMappingKey , cfg . Value . ToString ( ) ) ) ;
945
+ if ( ! config . useGlobalVersion && cfg . Key . useGlobalVersion && ! anyVersionsUpdatedExceptForGlobal )
946
+ {
947
+ // To minimize noise in version control when adding the globalVersion,
948
+ // unless the config being generated is the globalVersion (written to _generated_local),
949
+ // if no other versions are updated other than the globalVersion,
950
+ // don't change the global version in the existing generated file.
951
+ if ( existingLocalPackageVersion != null )
952
+ {
953
+ configMapping . Add ( new ( cfg . Key . constMappingKey , existingLocalPackageVersion ) ) ;
954
+ }
955
+ }
956
+ else
957
+ {
958
+ configMapping . Add ( new ( cfg . Key . constMappingKey , cfg . Value . ToString ( ) ) ) ;
959
+ }
925
960
}
926
961
927
962
outputTaskNode . AsObject ( ) . Add ( "_buildConfigMapping" , configMapping ) ;
0 commit comments