From e90afee7bdf19bf3fbd0f449f4b18dc409ca1c53 Mon Sep 17 00:00:00 2001 From: Akos Birmacher Date: Wed, 14 Mar 2018 12:18:40 +0100 Subject: [PATCH 1/4] XCode: After the user drag and drop the project file to the console, it will trim the project path. characterSetToRemove {"\n", `'`, `"`} --- cmd/common.go | 27 ++++++++++++++++++++++ cmd/common_test.go | 57 ++++++++++++++++++++++++++++++++++++++++++++-- cmd/xcode.go | 2 ++ 3 files changed, 84 insertions(+), 2 deletions(-) diff --git a/cmd/common.go b/cmd/common.go index 2dbbfbb9..fec209b8 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -614,3 +614,30 @@ func exportCodesignFiles(tool Tool, archivePath, outputDirPath string) error { return nil } + +func trimProjectpath(projpth string) string { + if len(projpth) == 0 { + return projpth + } + characterSetToRemove := []string{"\n", `'`, `"`} + for { + projpth = strings.Trim(projpth, "\n") + projpth = strings.Trim(projpth, `'`) + projpth = strings.Trim(projpth, `"`) + projpth = strings.TrimSpace(projpth) + + if !contains(characterSetToRemove, projpth[:1]) && !contains(characterSetToRemove, projpth[len(projpth)-1:]) { + return projpth + } + } +} + +func contains(slice []string, item string) bool { + set := make(map[string]struct{}, len(slice)) + for _, s := range slice { + set[s] = struct{}{} + } + + _, ok := set[item] + return ok +} diff --git a/cmd/common_test.go b/cmd/common_test.go index 5326a143..73ddb253 100644 --- a/cmd/common_test.go +++ b/cmd/common_test.go @@ -4,9 +4,8 @@ import ( "testing" "time" - "github.com/stretchr/testify/require" - "github.com/bitrise-tools/go-xcode/profileutil" + "github.com/stretchr/testify/require" ) func createTime(t *testing.T, timeStr string) time.Time { @@ -55,3 +54,57 @@ func Test_filterLatestProfiles(t *testing.T) { require.True(t, found) } } + +func Test_trimProjectpath(t *testing.T) { + type args struct { + projpth string + } + tests := []struct { + name string + args args + want string + }{ + { + name: "No change", + args: args{projpth: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj"}, + want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", + }, + { + name: "Quotation mark", + args: args{projpth: "\"Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj\""}, + want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", + }, + { + name: "Apostrophe", + args: args{projpth: "'Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj'"}, + want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", + }, + { + name: "Quotation mark With whitespace", + args: args{projpth: "\" Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj \""}, + want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", + }, + { + name: "Apostrophe With whitespace", + args: args{projpth: "' Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj '"}, + want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", + }, + { + name: "New line", + args: args{projpth: "\nDevelop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj\n"}, + want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", + }, + { + name: "Multiple", + args: args{projpth: "\n \" \nDevelop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj\n ' ' ''''\n\n\""}, + want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := trimProjectpath(tt.args.projpth); got != tt.want { + t.Errorf("trimProjpth() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/cmd/xcode.go b/cmd/xcode.go index 16d1c3f1..19325762 100644 --- a/cmd/xcode.go +++ b/cmd/xcode.go @@ -67,6 +67,8 @@ the one you usually open in Xcode, then hit Enter. if err != nil { return fmt.Errorf("failed to read input: %s", err) } + + projpth = trimProjectpath(projpth) projectPath = projpth } log.Debugf("projectPath: %s", projectPath) From 489426511687fa88482e94814035ab84ad3f75c6 Mon Sep 17 00:00:00 2001 From: Akos Birmacher Date: Wed, 14 Mar 2018 13:44:40 +0100 Subject: [PATCH 2/4] common.go: - trimProjectpath method fix - Infinite loop removed. It will trim every ', ", character - contains method removed (Already have one as a util.) common_test.go: The "Multiple" test case has been removed. (Because we don't use multiple trim) xcode.go: clean https://trello.com/c/hgIG0VO9 e90afee7bdf19bf3fbd0f449f4b18dc409ca1c53 commit fix --- cmd/common.go | 24 ++++-------------------- cmd/common_test.go | 14 ++------------ cmd/xcode.go | 3 +-- 3 files changed, 7 insertions(+), 34 deletions(-) diff --git a/cmd/common.go b/cmd/common.go index fec209b8..ff8629ca 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -619,25 +619,9 @@ func trimProjectpath(projpth string) string { if len(projpth) == 0 { return projpth } - characterSetToRemove := []string{"\n", `'`, `"`} - for { - projpth = strings.Trim(projpth, "\n") - projpth = strings.Trim(projpth, `'`) - projpth = strings.Trim(projpth, `"`) - projpth = strings.TrimSpace(projpth) - - if !contains(characterSetToRemove, projpth[:1]) && !contains(characterSetToRemove, projpth[len(projpth)-1:]) { - return projpth - } - } -} - -func contains(slice []string, item string) bool { - set := make(map[string]struct{}, len(slice)) - for _, s := range slice { - set[s] = struct{}{} + projpth = strings.TrimSpace(projpth) + for _, character := range []string{`'`, `"`} { + projpth = strings.Trim(projpth, character) } - - _, ok := set[item] - return ok + return projpth } diff --git a/cmd/common_test.go b/cmd/common_test.go index 73ddb253..a8ef715e 100644 --- a/cmd/common_test.go +++ b/cmd/common_test.go @@ -81,22 +81,12 @@ func Test_trimProjectpath(t *testing.T) { }, { name: "Quotation mark With whitespace", - args: args{projpth: "\" Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj \""}, + args: args{projpth: " \"Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj\" "}, want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", }, { name: "Apostrophe With whitespace", - args: args{projpth: "' Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj '"}, - want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", - }, - { - name: "New line", - args: args{projpth: "\nDevelop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj\n"}, - want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", - }, - { - name: "Multiple", - args: args{projpth: "\n \" \nDevelop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj\n ' ' ''''\n\n\""}, + args: args{projpth: " 'Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj' "}, want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", }, } diff --git a/cmd/xcode.go b/cmd/xcode.go index 19325762..95660937 100644 --- a/cmd/xcode.go +++ b/cmd/xcode.go @@ -68,8 +68,7 @@ the one you usually open in Xcode, then hit Enter. return fmt.Errorf("failed to read input: %s", err) } - projpth = trimProjectpath(projpth) - projectPath = projpth + projectPath = trimProjectpath(projpth) } log.Debugf("projectPath: %s", projectPath) xcodeCmd.ProjectFilePath = projectPath From ecc6041599e3fba0b3fac301d1806babef121f1c Mon Sep 17 00:00:00 2001 From: Akos Birmacher Date: Mon, 19 Mar 2018 12:43:58 +0100 Subject: [PATCH 3/4] common.go: - trimProjectpath method fix - strings.Trim function's second parameter is a cutset -> There is no need for loop over the items in the cutset. https://trello.com/c/hgIG0VO9 489426511687fa88482e94814035ab84ad3f75c6 commit fix --- cmd/common.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/cmd/common.go b/cmd/common.go index ff8629ca..580d5c86 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -616,12 +616,6 @@ func exportCodesignFiles(tool Tool, archivePath, outputDirPath string) error { } func trimProjectpath(projpth string) string { - if len(projpth) == 0 { - return projpth - } - projpth = strings.TrimSpace(projpth) - for _, character := range []string{`'`, `"`} { - projpth = strings.Trim(projpth, character) - } + projpth = strings.Trim(strings.TrimSpace(projpth), "'\"") return projpth } From c7747095b1e235263a00508e5e92ea1341b78022 Mon Sep 17 00:00:00 2001 From: Akos Birmacher Date: Mon, 19 Mar 2018 16:33:16 +0100 Subject: [PATCH 4/4] - cmd/common.go: trimProjectPath -> changed for inline code. - cmd/common_test.go: Test_trimProjectpath removed; --- cmd/common.go | 5 ----- cmd/common_test.go | 44 -------------------------------------------- cmd/xcode.go | 3 ++- 3 files changed, 2 insertions(+), 50 deletions(-) diff --git a/cmd/common.go b/cmd/common.go index 580d5c86..2dbbfbb9 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -614,8 +614,3 @@ func exportCodesignFiles(tool Tool, archivePath, outputDirPath string) error { return nil } - -func trimProjectpath(projpth string) string { - projpth = strings.Trim(strings.TrimSpace(projpth), "'\"") - return projpth -} diff --git a/cmd/common_test.go b/cmd/common_test.go index a8ef715e..ad2d61f3 100644 --- a/cmd/common_test.go +++ b/cmd/common_test.go @@ -54,47 +54,3 @@ func Test_filterLatestProfiles(t *testing.T) { require.True(t, found) } } - -func Test_trimProjectpath(t *testing.T) { - type args struct { - projpth string - } - tests := []struct { - name string - args args - want string - }{ - { - name: "No change", - args: args{projpth: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj"}, - want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", - }, - { - name: "Quotation mark", - args: args{projpth: "\"Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj\""}, - want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", - }, - { - name: "Apostrophe", - args: args{projpth: "'Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj'"}, - want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", - }, - { - name: "Quotation mark With whitespace", - args: args{projpth: " \"Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj\" "}, - want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", - }, - { - name: "Apostrophe With whitespace", - args: args{projpth: " 'Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj' "}, - want: "Develop/XCode/XcodeArchiveTest/XcodeArchiveTest.xcodeproj", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := trimProjectpath(tt.args.projpth); got != tt.want { - t.Errorf("trimProjpth() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/cmd/xcode.go b/cmd/xcode.go index 95660937..7f45a2f4 100644 --- a/cmd/xcode.go +++ b/cmd/xcode.go @@ -3,6 +3,7 @@ package cmd import ( "fmt" "path/filepath" + "strings" "github.com/bitrise-io/go-utils/colorstring" "github.com/bitrise-io/go-utils/fileutil" @@ -68,7 +69,7 @@ the one you usually open in Xcode, then hit Enter. return fmt.Errorf("failed to read input: %s", err) } - projectPath = trimProjectpath(projpth) + projectPath = strings.Trim(strings.TrimSpace(projpth), "'\"") } log.Debugf("projectPath: %s", projectPath) xcodeCmd.ProjectFilePath = projectPath