@@ -837,3 +837,57 @@ func FindModuleDirByGoMod(root string) (string, error) {
837837 }
838838 return "" , fmt .Errorf ("module not found, package path:%s" , root )
839839}
840+
841+ func UpdateReadmeClientFactory (path string ) error {
842+ readmePath := filepath .Join (path , ReadmeFileName )
843+ readmeFile , err := os .ReadFile (readmePath )
844+ if err != nil {
845+ return err
846+ }
847+ noOptionalFactoryReg := regexp .MustCompile (`NewClientFactory\((.*?)(?:,\s*)?cred,\s*nil\)` )
848+ withOptionalFactoryReg := regexp .MustCompile (`NewClientFactory\((.*?)(?:,\s*)?cred,\s*&options\)` )
849+ oldnoOptionalFactory := noOptionalFactoryReg .FindString (string (readmeFile ))
850+ oldwithOptionalFactory := withOptionalFactoryReg .FindString (string (readmeFile ))
851+ if oldnoOptionalFactory == "" && oldwithOptionalFactory == "" {
852+ return nil
853+ }
854+ clientFactoryFile , err := os .ReadFile (filepath .Join (path , ClientFactoryFileName ))
855+ if err != nil {
856+ return err
857+ }
858+ re := regexp .MustCompile (`func\s+NewClientFactory\(([^)]+)\)` )
859+ matches := re .FindStringSubmatch (string (clientFactoryFile ))
860+ if len (matches ) <= 1 {
861+ return nil
862+ }
863+ var factoryParams []string
864+ params := strings .Split (matches [1 ], "," )
865+ for param := range params {
866+ params [param ] = strings .TrimSpace (params [param ])
867+ paramDefinition := strings .Split (params [param ], " " )
868+ if len (paramDefinition ) != 2 {
869+ continue
870+ }
871+ paramName := paramDefinition [0 ]
872+ if paramName == "credential" || paramName == "options" {
873+ // fixed params, no need to process
874+ continue
875+ }
876+ if paramName == "subscriptionID" {
877+ // compatible with old version
878+ factoryParams = append (factoryParams , "<subscription ID>" )
879+ continue
880+ }
881+ factoryParams = append (factoryParams , fmt .Sprintf ("<%s>" , paramName ))
882+ }
883+ noOptionsParams := append (factoryParams , []string {"cred" , "nil" }... )
884+ withOptionsParams := append (factoryParams , []string {"cred" , "&options" }... )
885+ newNoOptionalFactory := fmt .Sprintf ("NewClientFactory(%s)" , strings .Join (noOptionsParams , ", " ))
886+ newWithOptionalFactory := fmt .Sprintf ("NewClientFactory(%s)" , strings .Join (withOptionsParams , ", " ))
887+ if oldnoOptionalFactory == newNoOptionalFactory && oldwithOptionalFactory == newWithOptionalFactory {
888+ return nil
889+ }
890+ content := strings .ReplaceAll (string (readmeFile ), oldnoOptionalFactory , newNoOptionalFactory )
891+ content = strings .ReplaceAll (content , oldwithOptionalFactory , newWithOptionalFactory )
892+ return os .WriteFile (readmePath , []byte (content ), 0644 )
893+ }
0 commit comments