diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 882c6a4889f..adce0d2b6cb 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,6 +11,8 @@ updates: interval: daily labels: - "topic: infrastructure" + commit-message: + prefix: "[skip changelog] " - package-ecosystem: gomod directory: / schedule: @@ -18,3 +20,5 @@ updates: open-pull-requests-limit: 10 labels: - "topic: infrastructure" + commit-message: + prefix: "[skip changelog] " diff --git a/.github/workflows/check-certificates.yml b/.github/workflows/check-certificates.yml index a3ecf724fd6..e91169ef7d5 100644 --- a/.github/workflows/check-certificates.yml +++ b/.github/workflows/check-certificates.yml @@ -36,9 +36,11 @@ jobs: - identifier: macOS signing certificate # Text used to identify certificate in notifications. certificate-secret: INSTALLER_CERT_MAC_P12 # Name of the secret that contains the certificate. password-secret: INSTALLER_CERT_MAC_PASSWORD # Name of the secret that contains the certificate password. + type: pkcs12 - identifier: Windows signing certificate - certificate-secret: INSTALLER_CERT_WINDOWS_PFX - password-secret: INSTALLER_CERT_WINDOWS_PASSWORD + certificate-secret: INSTALLER_CERT_WINDOWS_CER + # The password for the Windows certificate is not needed, because its not a container, but a single certificate. + type: x509 steps: - name: Set certificate path environment variable @@ -57,7 +59,7 @@ jobs: CERTIFICATE_PASSWORD: ${{ secrets[matrix.certificate.password-secret] }} run: | ( - openssl pkcs12 \ + openssl ${{ matrix.certificate.type }} \ -in "${{ env.CERTIFICATE_PATH }}" \ -legacy \ -noout \ @@ -84,26 +86,43 @@ jobs: CERTIFICATE_PASSWORD: ${{ secrets[matrix.certificate.password-secret] }} id: get-days-before-expiration run: | - EXPIRATION_DATE="$( - ( - openssl pkcs12 \ - -in "${{ env.CERTIFICATE_PATH }}" \ - -clcerts \ - -legacy \ - -nodes \ - -passin env:CERTIFICATE_PASSWORD - ) | ( - openssl x509 \ - -noout \ - -enddate - ) | ( - grep \ - --max-count=1 \ - --only-matching \ - --perl-regexp \ - 'notAfter=(\K.*)' - ) - )" + if [[ ${{ matrix.certificate.type }} == "pkcs12" ]]; then + EXPIRATION_DATE="$( + ( + openssl pkcs12 \ + -in ${{ env.CERTIFICATE_PATH }} \ + -clcerts \ + -legacy \ + -nodes \ + -passin env:CERTIFICATE_PASSWORD + ) | ( + openssl x509 \ + -noout \ + -enddate + ) | ( + grep \ + --max-count=1 \ + --only-matching \ + --perl-regexp \ + 'notAfter=(\K.*)' + ) + )" + elif [[ ${{ matrix.certificate.type }} == "x509" ]]; then + EXPIRATION_DATE="$( + ( + openssl x509 \ + -in ${{ env.CERTIFICATE_PATH }} \ + -noout \ + -enddate + ) | ( + grep \ + --max-count=1 \ + --only-matching \ + --perl-regexp \ + 'notAfter=(\K.*)' + ) + )" + fi DAYS_BEFORE_EXPIRATION="$((($(date --utc --date="$EXPIRATION_DATE" +%s) - $(date --utc +%s)) / 60 / 60 / 24))" diff --git a/.github/workflows/check-easyjson.yml b/.github/workflows/check-easyjson.yml index 89051e5b6da..a074b772f26 100644 --- a/.github/workflows/check-easyjson.yml +++ b/.github/workflows/check-easyjson.yml @@ -32,12 +32,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-go-dependencies-task.yml b/.github/workflows/check-go-dependencies-task.yml index f2013d855e2..eab16eb6172 100644 --- a/.github/workflows/check-go-dependencies-task.yml +++ b/.github/workflows/check-go-dependencies-task.yml @@ -76,12 +76,12 @@ jobs: version: 3.x - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -126,12 +126,12 @@ jobs: version: 3.x - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-go-task.yml b/.github/workflows/check-go-task.yml index 89443f77018..0cb0a076913 100644 --- a/.github/workflows/check-go-task.yml +++ b/.github/workflows/check-go-task.yml @@ -67,12 +67,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -103,20 +103,20 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x - name: golangci-lint - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v6 with: - version: v1.54 + version: v1.57 - name: Check style env: @@ -141,12 +141,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -177,7 +177,7 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} @@ -206,12 +206,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -235,16 +235,16 @@ jobs: matrix: module: - - path: arduino/discovery/discovery_client - - path: client_example - - path: commands/daemon/term_example + - path: internal/arduino/discovery/discovery_client + - path: rpc/internal/client_example + - path: commands/term_example steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} diff --git a/.github/workflows/check-i18n-task.yml b/.github/workflows/check-i18n-task.yml index 659f6e4a92c..9ec46485cc3 100644 --- a/.github/workflows/check-i18n-task.yml +++ b/.github/workflows/check-i18n-task.yml @@ -22,12 +22,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-markdown-task.yml b/.github/workflows/check-markdown-task.yml index 12dd65d6c2c..f0f02806227 100644 --- a/.github/workflows/check-markdown-task.yml +++ b/.github/workflows/check-markdown-task.yml @@ -78,15 +78,15 @@ jobs: uses: actions/checkout@v4 - name: Setup Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - name: Initialize markdownlint-cli problem matcher - uses: xt0rted/markdownlint-problem-matcher@v2 + uses: xt0rted/markdownlint-problem-matcher@v3 - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -104,12 +104,12 @@ jobs: uses: actions/checkout@v4 - name: Setup Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} @@ -117,12 +117,12 @@ jobs: run: go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v1.4.1 - name: Install protoc compiler - uses: arduino/setup-protoc@v2 + uses: arduino/setup-protoc@v3 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-mkdocs-task.yml b/.github/workflows/check-mkdocs-task.yml index 6914212a928..7edc66ad3aa 100644 --- a/.github/workflows/check-mkdocs-task.yml +++ b/.github/workflows/check-mkdocs-task.yml @@ -37,7 +37,7 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} @@ -45,12 +45,12 @@ jobs: run: go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v1.4.1 - name: Install protoc compiler - uses: arduino/setup-protoc@v2 + uses: arduino/setup-protoc@v3 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ env.PYTHON_VERSION }} @@ -58,7 +58,7 @@ jobs: run: pip install poetry - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-prettier-formatting-task.yml b/.github/workflows/check-prettier-formatting-task.yml index 44f8365dc0a..5bb45e35d55 100644 --- a/.github/workflows/check-prettier-formatting-task.yml +++ b/.github/workflows/check-prettier-formatting-task.yml @@ -207,7 +207,7 @@ jobs: uses: actions/checkout@v4 - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-protobuf-task.yml b/.github/workflows/check-protobuf-task.yml index 9e46bede483..cdef10be24a 100644 --- a/.github/workflows/check-protobuf-task.yml +++ b/.github/workflows/check-protobuf-task.yml @@ -54,23 +54,23 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install protoc compiler - uses: arduino/setup-protoc@v2 + uses: arduino/setup-protoc@v3 with: - version: v24.3 + version: v26.1 repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install Go deps run: | - go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.31.0 + go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.34.1 go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0 - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -91,7 +91,7 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} @@ -102,7 +102,7 @@ jobs: go install github.com/bufbuild/buf/cmd/protoc-gen-buf-lint@v1.20.0 - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -120,7 +120,7 @@ jobs: uses: actions/checkout@v4 - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml b/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml index 1f8902be25b..c7f916fb039 100644 --- a/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml +++ b/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml @@ -21,7 +21,7 @@ on: - "go.sum" - "Taskfile.ya?ml" - "**.go" - - "docsgen/**" + - "internal/docsgen/**" - "rpc/**" - "mkdocs.ya?ml" - "poetry.lock" @@ -57,7 +57,7 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} @@ -65,12 +65,12 @@ jobs: run: go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v1.4.1 - name: Install protoc compiler - uses: arduino/setup-protoc@v2 + uses: arduino/setup-protoc@v3 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ env.PYTHON_VERSION }} @@ -80,7 +80,7 @@ jobs: python -m pip install poetry - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/i18n-nightly-push.yaml b/.github/workflows/i18n-nightly-push.yaml index 6d1dd9b514f..0539549159d 100644 --- a/.github/workflows/i18n-nightly-push.yaml +++ b/.github/workflows/i18n-nightly-push.yaml @@ -16,12 +16,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: "${{ env.GO_VERSION }}" - name: Install Taskfile - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/i18n-weekly-pull.yaml b/.github/workflows/i18n-weekly-pull.yaml index 1aac744870a..7cff41be881 100644 --- a/.github/workflows/i18n-weekly-pull.yaml +++ b/.github/workflows/i18n-weekly-pull.yaml @@ -23,12 +23,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: "${{ env.GO_VERSION }}" - name: Install Taskfile - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -42,7 +42,7 @@ jobs: TRANSIFEX_API_KEY: ${{ secrets.TRANSIFEX_API_KEY }} - name: Create Pull Request - uses: peter-evans/create-pull-request@v5 + uses: peter-evans/create-pull-request@v6 with: commit-message: Updated translation files title: Updated translation files diff --git a/.github/workflows/publish-go-nightly-task.yml b/.github/workflows/publish-go-nightly-task.yml index c7dd591f2f9..d42fac2d954 100644 --- a/.github/workflows/publish-go-nightly-task.yml +++ b/.github/workflows/publish-go-nightly-task.yml @@ -8,6 +8,7 @@ env: DIST_DIR: dist # The project's folder on Arduino's download server for uploading builds AWS_PLUGIN_TARGET: /arduino-cli/ + AWS_REGION: "us-east-1" ARTIFACT_NAME: dist # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows @@ -18,6 +19,10 @@ on: workflow_dispatch: repository_dispatch: +permissions: + id-token: write # This is required for requesting the JWT + contents: read # This is required for actions/checkout + jobs: create-nightly-artifacts: outputs: @@ -43,7 +48,7 @@ jobs: uses: actions/checkout@v4 - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -117,14 +122,14 @@ jobs: - name: Install gon for code signing and app notarization run: | - wget -q https://github.com/mitchellh/gon/releases/download/v0.2.3/gon_macos.zip + wget -q https://github.com/Bearer/gon/releases/download/v0.0.27/gon_macos.zip unzip gon_macos.zip -d /usr/local/bin - name: Write gon config to file # gon does not allow env variables in config file (https://github.com/mitchellh/gon/issues/20) run: | cat > "${{ env.GON_CONFIG_PATH }}" < ${{ env.INSTALLER_CERT_WINDOWS_PFX}} + run: echo "${{ secrets.INSTALLER_CERT_WINDOWS_CER }}" | base64 --decode > ${{ env.INSTALLER_CERT_WINDOWS_CER}} - name: Sign MSI env: MSI_FILE: ${{ steps.buildmsi.outputs.msi }} # this comes from .installer/cli.wixproj CERT_PASSWORD: ${{ secrets.INSTALLER_CERT_WINDOWS_PASSWORD }} + CONTAINER_NAME: ${{ secrets.INSTALLER_CERT_WINDOWS_CONTAINER }} + # https://stackoverflow.com/questions/17927895/automate-extended-validation-ev-code-signing-with-safenet-etoken run: | - "${{ env.SIGNTOOL_PATH }}" sign -d "Arduino CLI" -f ${{ env.INSTALLER_CERT_WINDOWS_PFX}} -p ${{ env.CERT_PASSWORD }} -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v "${{ env.MSI_FILE }}" + "${{ env.SIGNTOOL_PATH }}" sign -d "Arduino CLI" -f ${{ env.INSTALLER_CERT_WINDOWS_CER}} -csp "eToken Base Cryptographic Provider" -k "[{{${{ env.CERT_PASSWORD }}}}]=${{ env.CONTAINER_NAME }}" -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v "${{ env.MSI_FILE }}" - name: Upload artifacts uses: actions/upload-artifact@v3 @@ -225,10 +232,14 @@ jobs: publish-nightly: runs-on: ubuntu-latest + environment: production needs: - create-nightly-artifacts - notarize-macos - create-windows-installer + permissions: + contents: write + id-token: write # This is required for requesting the JWT steps: - name: Checkout repository @@ -241,7 +252,7 @@ jobs: path: ${{ env.DIST_DIR }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -257,15 +268,15 @@ jobs: VERSION=${{ needs.create-nightly-artifacts.outputs.version }} sha256sum ${{ env.PROJECT_NAME }}_${VERSION}* > ${VERSION}-checksums.txt + - name: configure aws credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: "github_${{ env.PROJECT_NAME }}" + aws-region: ${{ env.AWS_REGION }} + - name: Upload release files on Arduino downloads servers - uses: docker://plugins/s3 - env: - PLUGIN_SOURCE: "${{ env.DIST_DIR }}/*" - PLUGIN_TARGET: "${{ env.AWS_PLUGIN_TARGET }}nightly" - PLUGIN_STRIP_PREFIX: "${{ env.DIST_DIR }}/" - PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + run: aws s3 sync ${{ env.DIST_DIR }} s3://${{ secrets.DOWNLOADS_BUCKET }}${{ env.AWS_PLUGIN_TARGET }}nightly report: runs-on: ubuntu-latest diff --git a/.github/workflows/publish-go-tester-task.yml b/.github/workflows/publish-go-tester-task.yml index f358a4fe4e7..c83f00957d8 100644 --- a/.github/workflows/publish-go-tester-task.yml +++ b/.github/workflows/publish-go-tester-task.yml @@ -122,7 +122,7 @@ jobs: fetch-depth: 0 - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/release-go-task.yml b/.github/workflows/release-go-task.yml index e6f103de132..d6545e0ab73 100644 --- a/.github/workflows/release-go-task.yml +++ b/.github/workflows/release-go-task.yml @@ -8,6 +8,7 @@ env: DIST_DIR: dist # The project's folder on Arduino's download server for uploading builds AWS_PLUGIN_TARGET: /arduino-cli/ + AWS_REGION: "us-east-1" ARTIFACT_NAME: dist on: @@ -51,7 +52,7 @@ jobs: changelog-file-path: "${{ env.DIST_DIR }}/CHANGELOG.md" - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -121,14 +122,14 @@ jobs: - name: Install gon for code signing and app notarization run: | - wget -q https://github.com/mitchellh/gon/releases/download/v0.2.3/gon_macos.zip + wget -q https://github.com/Bearer/gon/releases/download/v0.0.27/gon_macos.zip unzip gon_macos.zip -d /usr/local/bin - name: Write gon config to file # gon does not allow env variables in config file (https://github.com/mitchellh/gon/issues/20) run: | cat > "${{ env.GON_CONFIG_PATH }}" < ${{ env.INSTALLER_CERT_WINDOWS_PFX}} + run: echo "${{ secrets.INSTALLER_CERT_WINDOWS_CER }}" | base64 --decode > ${{ env.INSTALLER_CERT_WINDOWS_CER}} - name: Sign MSI env: MSI_FILE: ${{ steps.buildmsi.outputs.msi }} # this comes from .installer/cli.wixproj CERT_PASSWORD: ${{ secrets.INSTALLER_CERT_WINDOWS_PASSWORD }} + CONTAINER_NAME: ${{ secrets.INSTALLER_CERT_WINDOWS_CONTAINER }} + # https://stackoverflow.com/questions/17927895/automate-extended-validation-ev-code-signing-with-safenet-etoken run: | - "${{ env.SIGNTOOL_PATH }}" sign -d "Arduino CLI" -f ${{ env.INSTALLER_CERT_WINDOWS_PFX}} -p ${{ env.CERT_PASSWORD }} -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v "${{ env.MSI_FILE }}" + "${{ env.SIGNTOOL_PATH }}" sign -d "Arduino CLI" -f ${{ env.INSTALLER_CERT_WINDOWS_CER}} -csp "eToken Base Cryptographic Provider" -k "[{{${{ env.CERT_PASSWORD }}}}]=${{ env.CONTAINER_NAME }}" -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v "${{ env.MSI_FILE }}" - name: Upload artifacts uses: actions/upload-artifact@v3 @@ -229,10 +232,14 @@ jobs: create-release: runs-on: ubuntu-latest + environment: production needs: - create-release-artifacts - notarize-macos - create-windows-installer + permissions: + contents: write + id-token: write # This is required for requesting the JWT steps: - name: Checkout repository @@ -245,7 +252,7 @@ jobs: path: ${{ env.DIST_DIR }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -282,15 +289,15 @@ jobs: # (all the files we need are in the DIST_DIR root) artifacts: ${{ env.DIST_DIR }}/* + - name: configure aws credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: "github_${{ env.PROJECT_NAME }}" + aws-region: ${{ env.AWS_REGION }} + - name: Upload release files on Arduino downloads servers - uses: docker://plugins/s3 - env: - PLUGIN_SOURCE: "${{ env.DIST_DIR }}/*" - PLUGIN_TARGET: ${{ env.AWS_PLUGIN_TARGET }} - PLUGIN_STRIP_PREFIX: "${{ env.DIST_DIR }}/" - PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + run: aws s3 sync ${{ env.DIST_DIR }} s3://${{ secrets.DOWNLOADS_BUCKET }}${{ env.AWS_PLUGIN_TARGET }} - name: Update Homebrew formula if: steps.prerelease.outputs.IS_PRE != 'true' diff --git a/.github/workflows/test-go-task.yml b/.github/workflows/test-go-task.yml index 4b4c2865a4c..17ce103a06d 100644 --- a/.github/workflows/test-go-task.yml +++ b/.github/workflows/test-go-task.yml @@ -70,8 +70,9 @@ jobs: - name: Collect tests id: collection + # jq flags must be "-cRn" see: https://stackoverflow.com/a/68859958/1655275 run: | - echo "tests-data=$(go list ./internal/integrationtest/... | grep integrationtest/ | tr "/" " " | cut -d " " -f 6 | jq -cR '[inputs]')" >> $GITHUB_OUTPUT + echo "tests-data=$(go list ./internal/integrationtest/... | grep integrationtest/ | tr "/" " " | cut -d " " -f 6 | jq -cRn '[inputs]')" >> $GITHUB_OUTPUT test-integration: needs: tests-collector @@ -95,12 +96,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -141,12 +142,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -173,7 +174,7 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} diff --git a/.gitignore b/.gitignore index 15f5060d5da..435016fb119 100644 --- a/.gitignore +++ b/.gitignore @@ -15,11 +15,12 @@ venv /.pytest-tmp-dir /node_modules/ __debug_bin* +.vscode # gRPC client example folder -/client_example/client_example -/client_example/**/*.bin -/client_example/**/*.elf +/rpc/internal/client_example/client_example +/rpc/internal/client_example/**/*.bin +/rpc/internal/client_example/**/*.elf # Misc. .DS_Store @@ -27,8 +28,8 @@ __debug_bin* # Mkdocs /site/ /public/ -/docsgen/arduino-cli -/docsgen/arduino-cli.exe +/internal/docsgen/arduino-cli +/internal/docsgen/arduino-cli.exe /docs/rpc/*.md /docs/commands/*.md /docs/configuration.schema.json diff --git a/.golangci.yml b/.golangci.yml index 7e9f18d1482..5bd0bfaaa3e 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -29,8 +29,55 @@ linters: - tenv - typecheck - unconvert + # We must disable this one because there is no support 'optional' protobuf fields yet: https://github.com/arduino/arduino-cli/pull/2570 + #- protogetter linters-settings: + govet: + # Enable analyzers by name. + # Run `GL_DEBUG=govet golangci-lint run --enable=govet` to see default, all available analyzers, and enabled analyzers. + enable: + - appends + - asmdecl + - assign + - atomic + - atomicalign + - bools + - buildtag + - cgocall + - composites + - copylocks + - deepequalerrors + - defers + - directive + - errorsas + #- fieldalignment + - findcall + - framepointer + - httpresponse + - ifaceassert + - loopclosure + - lostcancel + - nilfunc + - nilness + - printf + - reflectvaluecompare + #- shadow + - shift + - sigchanyzer + - slog + - sortslice + - stdmethods + - stringintconv + - structtag + - testinggoroutine + - tests + - unmarshal + - unreachable + - unsafeptr + - unusedresult + - unusedwrite + forbidigo: forbid: - p: ^(fmt\.Print(|f|ln)|print|println)$ @@ -55,14 +102,13 @@ linters-settings: - name: errorf - name: exported - name: increment-decrement - - name: indent-error-flow + #- name: indent-error-flow - name: package-comments - name: range - name: receiver-naming - name: redefines-builtin-id - name: superfluous-else - name: time-naming - - name: unexported-return - name: unreachable-code - name: var-declaration - name: defer @@ -81,7 +127,7 @@ linters-settings: issues: # Fix found issues (if it's supported by the linter). - fix: true + fix: false # List of regexps of issue texts to exclude. # # But independently of this option we use default exclude patterns, @@ -133,5 +179,7 @@ issues: - path-except: internal/cli/ linters: - forbidigo + - path: internal/cli/.*_test.go + linters: [forbidigo] - path: internal/cli/feedback/ linters: [forbidigo] diff --git a/.licensed.yml b/.licensed.yml index daba0633f27..bf25afd5485 100644 --- a/.licensed.yml +++ b/.licensed.yml @@ -10,8 +10,6 @@ apps: reviewed: go: - - google.golang.org/protobuf/encoding/protojson - - google.golang.org/protobuf/internal/encoding/json - github.com/ProtonMail/go-crypto/bitcurves - github.com/ProtonMail/go-crypto/brainpool - github.com/ProtonMail/go-crypto/eax @@ -22,6 +20,8 @@ reviewed: - github.com/ProtonMail/go-crypto/openpgp/armor - github.com/ProtonMail/go-crypto/openpgp/ecdh - github.com/ProtonMail/go-crypto/openpgp/ecdsa + - github.com/ProtonMail/go-crypto/openpgp/ed25519 + - github.com/ProtonMail/go-crypto/openpgp/ed448 - github.com/ProtonMail/go-crypto/openpgp/eddsa - github.com/ProtonMail/go-crypto/openpgp/elgamal - github.com/ProtonMail/go-crypto/openpgp/errors @@ -30,6 +30,8 @@ reviewed: - github.com/ProtonMail/go-crypto/openpgp/internal/encoding - github.com/ProtonMail/go-crypto/openpgp/packet - github.com/ProtonMail/go-crypto/openpgp/s2k + - github.com/ProtonMail/go-crypto/openpgp/x25519 + - github.com/ProtonMail/go-crypto/openpgp/x448 - github.com/cloudflare/circl/dh/x25519 - github.com/cloudflare/circl/dh/x448 - github.com/cloudflare/circl/ecc/goldilocks @@ -42,27 +44,31 @@ reviewed: - github.com/cloudflare/circl/sign - github.com/cloudflare/circl/sign/ed25519 - github.com/cloudflare/circl/sign/ed448 - - golang.org/x/crypto/argon2 - - golang.org/x/crypto/blake2b - - golang.org/x/crypto/sha3 - - github.com/russross/blackfriday/v2 - github.com/go-git/gcfg - github.com/go-git/gcfg/scanner - github.com/go-git/gcfg/token - github.com/go-git/gcfg/types + - github.com/russross/blackfriday/v2 + - github.com/sagikazarmark/slog-shim + - golang.org/x/crypto/argon2 + - golang.org/x/crypto/blake2b - golang.org/x/crypto/openpgp - golang.org/x/crypto/openpgp/armor - golang.org/x/crypto/openpgp/elgamal - golang.org/x/crypto/openpgp/errors - golang.org/x/crypto/openpgp/packet - golang.org/x/crypto/openpgp/s2k + - golang.org/x/crypto/sha3 - golang.org/x/sys/execabs - golang.org/x/text/encoding - golang.org/x/text/encoding/internal - golang.org/x/text/encoding/internal/identifier - golang.org/x/text/encoding/unicode - golang.org/x/text/internal/utf8internal - - github.com/sagikazarmark/slog-shim + - google.golang.org/protobuf/encoding/protojson + - google.golang.org/protobuf/internal/encoding/json + - sigs.k8s.io/yaml + - sigs.k8s.io/yaml/goyaml.v2 # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-dependencies/GPL-3.0/.licensed.yml allowed: diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/bitcurves.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/bitcurves.dep.yml index 20e7ba58f41..d2c85c2206a 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/bitcurves.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/bitcurves.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/bitcurves -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/bitcurves license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/brainpool.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/brainpool.dep.yml index ed2f5e071e3..a37d0d26dd7 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/brainpool.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/brainpool.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/brainpool -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package brainpool implements Brainpool elliptic curves. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/brainpool license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/eax.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/eax.dep.yml index 9e7b3d73197..f0d43c6a47d 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/eax.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/eax.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/ProtonMail/go-crypto/eax -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: 'Package eax provides an implementation of the EAX (encrypt-authenticate-translate) mode of operation, as described in Bellare, Rogaway, and Wagner "THE EAX MODE OF @@ -9,7 +9,7 @@ summary: 'Package eax provides an implementation of the EAX (encrypt-authenticat homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/eax license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -38,7 +38,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/internal/byteutil.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/internal/byteutil.dep.yml index 995400394f5..a38c33644c9 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/internal/byteutil.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/internal/byteutil.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/internal/byteutil -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/internal/byteutil license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/ocb.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/ocb.dep.yml index 0d6c4c7c50e..898ffe4982e 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/ocb.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/ocb.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/ProtonMail/go-crypto/ocb -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: 'Package ocb provides an implementation of the OCB (offset codebook) mode of operation, as described in RFC-7253 of the IRTF and in Rogaway, Bellare, Black @@ -9,7 +9,7 @@ summary: 'Package ocb provides an implementation of the OCB (offset codebook) mo homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/ocb license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -38,7 +38,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp.dep.yml index 359f7fc4c1b..09fabf560d0 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package openpgp implements high level operations on OpenPGP messages. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap.dep.yml index 33615a04e43..930bb2e6088 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/aes/keywrap -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package keywrap is an implementation of the RFC 3394 AES key wrapping algorithm. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/armor.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/armor.dep.yml index d0e40175e7c..7d232465596 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/armor.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/armor.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/armor -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package armor implements OpenPGP ASCII Armor, see RFC 4880. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/armor license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdh.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdh.dep.yml index 33977600bd6..8c45634fe45 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdh.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdh.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/ecdh -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package ecdh implements ECDH encryption, suitable for OpenPGP, as specified in RFC 6637, section 8. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/ecdh license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdsa.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdsa.dep.yml index f8a012d41ea..d3346dfe220 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdsa.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdsa.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/ecdsa -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package ecdsa implements ECDSA signature, suitable for OpenPGP, as specified in RFC 6637, section 5. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/ecdsa license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed25519.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed25519.dep.yml new file mode 100644 index 00000000000..a59bb0e5cef --- /dev/null +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed25519.dep.yml @@ -0,0 +1,63 @@ +--- +name: github.com/ProtonMail/go-crypto/openpgp/ed25519 +version: v1.1.0-alpha.0 +type: go +summary: Package ed25519 implements the ed25519 signature algorithm for OpenPGP as + defined in the Open PGP crypto refresh. +homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/ed25519 +license: other +licenses: +- sources: go-crypto@v1.1.0-alpha.0/LICENSE + text: | + Copyright (c) 2009 The Go Authors. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- sources: go-crypto@v1.1.0-alpha.0/PATENTS + text: | + Additional IP Rights Grant (Patents) + + "This implementation" means the copyrightable works distributed by + Google as part of the Go project. + + Google hereby grants to You a perpetual, worldwide, non-exclusive, + no-charge, royalty-free, irrevocable (except as stated in this section) + patent license to make, have made, use, offer to sell, sell, import, + transfer and otherwise run, modify and propagate the contents of this + implementation of Go, where such license applies only to those patent + claims, both currently owned or controlled by Google and acquired in + the future, licensable by Google that are necessarily infringed by this + implementation of Go. This grant does not include claims that would be + infringed only as a consequence of further modification of this + implementation. If you or your agent or exclusive licensee institute or + order or agree to the institution of patent litigation against any + entity (including a cross-claim or counterclaim in a lawsuit) alleging + that this implementation of Go or any code incorporated within this + implementation of Go constitutes direct or contributory patent + infringement, or inducement of patent infringement, then any patent + rights granted to you under this License for this implementation of Go + shall terminate as of the date such litigation is filed. +notices: [] diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed448.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed448.dep.yml new file mode 100644 index 00000000000..4733dccd3b0 --- /dev/null +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed448.dep.yml @@ -0,0 +1,63 @@ +--- +name: github.com/ProtonMail/go-crypto/openpgp/ed448 +version: v1.1.0-alpha.0 +type: go +summary: Package ed448 implements the ed448 signature algorithm for OpenPGP as defined + in the Open PGP crypto refresh. +homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/ed448 +license: other +licenses: +- sources: go-crypto@v1.1.0-alpha.0/LICENSE + text: | + Copyright (c) 2009 The Go Authors. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- sources: go-crypto@v1.1.0-alpha.0/PATENTS + text: | + Additional IP Rights Grant (Patents) + + "This implementation" means the copyrightable works distributed by + Google as part of the Go project. + + Google hereby grants to You a perpetual, worldwide, non-exclusive, + no-charge, royalty-free, irrevocable (except as stated in this section) + patent license to make, have made, use, offer to sell, sell, import, + transfer and otherwise run, modify and propagate the contents of this + implementation of Go, where such license applies only to those patent + claims, both currently owned or controlled by Google and acquired in + the future, licensable by Google that are necessarily infringed by this + implementation of Go. This grant does not include claims that would be + infringed only as a consequence of further modification of this + implementation. If you or your agent or exclusive licensee institute or + order or agree to the institution of patent litigation against any + entity (including a cross-claim or counterclaim in a lawsuit) alleging + that this implementation of Go or any code incorporated within this + implementation of Go constitutes direct or contributory patent + infringement, or inducement of patent infringement, then any patent + rights granted to you under this License for this implementation of Go + shall terminate as of the date such litigation is filed. +notices: [] diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/eddsa.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/eddsa.dep.yml index 381c3361444..ae036b97f6c 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/eddsa.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/eddsa.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/eddsa -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package eddsa implements EdDSA signature, suitable for OpenPGP, as specified in https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-13.7 homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/eddsa license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/elgamal.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/elgamal.dep.yml index 11d83ce12ca..fbe900e5d13 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/elgamal.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/elgamal.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/elgamal -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package elgamal implements ElGamal encryption, suitable for OpenPGP, as specified in "A Public-Key Cryptosystem and a Signature Scheme Based on Discrete Logarithms," @@ -8,7 +8,7 @@ summary: Package elgamal implements ElGamal encryption, suitable for OpenPGP, as homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/elgamal license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -37,7 +37,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/errors.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/errors.dep.yml index a37ac9e1c07..4af94d8107c 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/errors.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/errors.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/errors -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package errors contains common error types for the OpenPGP packages. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/errors license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm.dep.yml index c2078547025..af5a5e241be 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/internal/algorithm -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/ecc.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/ecc.dep.yml index 571a8c1c167..cc68288986a 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/ecc.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/ecc.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/internal/ecc -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package ecc implements a generic interface for ECDH, ECDSA, and EdDSA. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/internal/ecc license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/encoding.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/encoding.dep.yml index 10cecdbb7df..5db542f7f90 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/encoding.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/encoding.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/internal/encoding -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package encoding implements openpgp packet field encodings as specified in RFC 4880 and 6637. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/internal/encoding license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/packet.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/packet.dep.yml index 3b6bfe612b6..1048418534d 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/packet.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/packet.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/packet -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package packet implements parsing and serialization of OpenPGP packets, as specified in RFC 4880. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/packet license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/s2k.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/s2k.dep.yml index 2dcb0bd2351..ff8fa4b6874 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/s2k.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/s2k.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/s2k -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.1.0-alpha.0 type: go summary: Package s2k implements the various OpenPGP string-to-key transforms as specified in RFC 4800 section 3.7.1, and Argon2 specified in draft-ietf-openpgp-crypto-refresh-08 @@ -8,7 +8,7 @@ summary: Package s2k implements the various OpenPGP string-to-key transforms as homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/s2k license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -37,7 +37,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/x25519.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/x25519.dep.yml new file mode 100644 index 00000000000..5e811cb323b --- /dev/null +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/x25519.dep.yml @@ -0,0 +1,62 @@ +--- +name: github.com/ProtonMail/go-crypto/openpgp/x25519 +version: v1.1.0-alpha.0 +type: go +summary: +homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/x25519 +license: other +licenses: +- sources: go-crypto@v1.1.0-alpha.0/LICENSE + text: | + Copyright (c) 2009 The Go Authors. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- sources: go-crypto@v1.1.0-alpha.0/PATENTS + text: | + Additional IP Rights Grant (Patents) + + "This implementation" means the copyrightable works distributed by + Google as part of the Go project. + + Google hereby grants to You a perpetual, worldwide, non-exclusive, + no-charge, royalty-free, irrevocable (except as stated in this section) + patent license to make, have made, use, offer to sell, sell, import, + transfer and otherwise run, modify and propagate the contents of this + implementation of Go, where such license applies only to those patent + claims, both currently owned or controlled by Google and acquired in + the future, licensable by Google that are necessarily infringed by this + implementation of Go. This grant does not include claims that would be + infringed only as a consequence of further modification of this + implementation. If you or your agent or exclusive licensee institute or + order or agree to the institution of patent litigation against any + entity (including a cross-claim or counterclaim in a lawsuit) alleging + that this implementation of Go or any code incorporated within this + implementation of Go constitutes direct or contributory patent + infringement, or inducement of patent infringement, then any patent + rights granted to you under this License for this implementation of Go + shall terminate as of the date such litigation is filed. +notices: [] diff --git a/.licenses/go/google.golang.org/protobuf/types/known/wrapperspb.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/x448.dep.yml similarity index 90% rename from .licenses/go/google.golang.org/protobuf/types/known/wrapperspb.dep.yml rename to .licenses/go/github.com/ProtonMail/go-crypto/openpgp/x448.dep.yml index 6d93964224c..8055615fbbf 100644 --- a/.licenses/go/google.golang.org/protobuf/types/known/wrapperspb.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/x448.dep.yml @@ -1,14 +1,14 @@ --- -name: google.golang.org/protobuf/types/known/wrapperspb -version: v1.31.0 +name: github.com/ProtonMail/go-crypto/openpgp/x448 +version: v1.1.0-alpha.0 type: go summary: -homepage: https://pkg.go.dev/google.golang.org/protobuf/types/known/wrapperspb -license: bsd-3-clause +homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/x448 +license: other licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: go-crypto@v1.1.0-alpha.0/LICENSE text: | - Copyright (c) 2018 The Go Authors. All rights reserved. + Copyright (c) 2009 The Go Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: go-crypto@v1.1.0-alpha.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/arduino/go-paths-helper.dep.yml b/.licenses/go/github.com/arduino/go-paths-helper.dep.yml index bd4b949ac04..05f3ecab7a7 100644 --- a/.licenses/go/github.com/arduino/go-paths-helper.dep.yml +++ b/.licenses/go/github.com/arduino/go-paths-helper.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/arduino/go-paths-helper -version: v1.9.2 +version: v1.12.0 type: go summary: homepage: https://pkg.go.dev/github.com/arduino/go-paths-helper diff --git a/.licenses/go/github.com/arduino/go-serial-utils.dep.yml b/.licenses/go/github.com/arduino/go-serial-utils.dep.yml new file mode 100644 index 00000000000..d80310c7746 --- /dev/null +++ b/.licenses/go/github.com/arduino/go-serial-utils.dep.yml @@ -0,0 +1,458 @@ +--- +name: github.com/arduino/go-serial-utils +version: v0.1.2 +type: go +summary: +homepage: https://pkg.go.dev/github.com/arduino/go-serial-utils +license: gpl-3.0 +licenses: +- sources: LICENSE.txt + text: "This file includes licensing information for \n\nCopyright (c) 2024 ARDUINO + SA (www.arduino.cc)\n\nThe software is released under the GNU General Public License, + which covers the main body\nof the arduino-cli code. The terms of this license + can be found at:\nhttps://www.gnu.org/licenses/gpl-3.0.en.html\n\nYou can be released + from the requirements of the above licenses by purchasing\na commercial license. + Buying such a license is mandatory if you want to modify or\notherwise use the + software for commercial activities involving the Arduino\nsoftware without disclosing + the source code of your own applications. To purchase\na commercial license, send + an email to license@arduino.cc\n\n GNU GENERAL PUBLIC LICENSE\n + \ Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software + Foundation, Inc. \n Everyone is permitted to copy and distribute + verbatim copies\n of this license document, but changing it is not allowed.\n\n + \ Preamble\n\n The GNU General Public License is a + free, copyleft license for\nsoftware and other kinds of works.\n\n The licenses + for most software and other practical works are designed\nto take away your freedom + to share and change the works. By contrast,\nthe GNU General Public License is + intended to guarantee your freedom to\nshare and change all versions of a program--to + make sure it remains free\nsoftware for all its users. We, the Free Software + Foundation, use the\nGNU General Public License for most of our software; it applies + also to\nany other work released this way by its authors. You can apply it to\nyour + programs, too.\n\n When we speak of free software, we are referring to freedom, + not\nprice. Our General Public Licenses are designed to make sure that you\nhave + the freedom to distribute copies of free software (and charge for\nthem if you + wish), that you receive source code or can get it if you\nwant it, that you can + change the software or use pieces of it in new\nfree programs, and that you know + you can do these things.\n\n To protect your rights, we need to prevent others + from denying you\nthese rights or asking you to surrender the rights. Therefore, + you have\ncertain responsibilities if you distribute copies of the software, or + if\nyou modify it: responsibilities to respect the freedom of others.\n\n For + example, if you distribute copies of such a program, whether\ngratis or for a + fee, you must pass on to the recipients the same\nfreedoms that you received. + \ You must make sure that they, too, receive\nor can get the source code. And + you must show them these terms so they\nknow their rights.\n\n Developers that + use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the + software, and (2) offer you this License\ngiving you legal permission to copy, + distribute and/or modify it.\n\n For the developers' and authors' protection, + the GPL clearly explains\nthat there is no warranty for this free software. For + both users' and\nauthors' sake, the GPL requires that modified versions be marked + as\nchanged, so that their problems will not be attributed erroneously to\nauthors + of previous versions.\n\n Some devices are designed to deny users access to install + or run\nmodified versions of the software inside them, although the manufacturer\ncan + do so. This is fundamentally incompatible with the aim of\nprotecting users' + freedom to change the software. The systematic\npattern of such abuse occurs + in the area of products for individuals to\nuse, which is precisely where it is + most unacceptable. Therefore, we\nhave designed this version of the GPL to prohibit + the practice for those\nproducts. If such problems arise substantially in other + domains, we\nstand ready to extend this provision to those domains in future versions\nof + the GPL, as needed to protect the freedom of users.\n\n Finally, every program + is threatened constantly by software patents.\nStates should not allow patents + to restrict development and use of\nsoftware on general-purpose computers, but + in those that do, we wish to\navoid the special danger that patents applied to + a free program could\nmake it effectively proprietary. To prevent this, the GPL + assures that\npatents cannot be used to render the program non-free.\n\n The + precise terms and conditions for copying, distribution and\nmodification follow.\n\n + \ TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" + refers to version 3 of the GNU General Public License.\n\n \"Copyright\" also + means copyright-like laws that apply to other kinds of\nworks, such as semiconductor + masks.\n\n \"The Program\" refers to any copyrightable work licensed under this\nLicense. + \ Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may + be individuals or organizations.\n\n To \"modify\" a work means to copy from + or adapt all or part of the work\nin a fashion requiring copyright permission, + other than the making of an\nexact copy. The resulting work is called a \"modified + version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A + \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n + \ To \"propagate\" a work means to do anything with it that, without\npermission, + would make you directly or secondarily liable for\ninfringement under applicable + copyright law, except executing it on a\ncomputer or modifying a private copy. + \ Propagation includes copying,\ndistribution (with or without modification), + making available to the\npublic, and in some countries other activities as well.\n\n + \ To \"convey\" a work means any kind of propagation that enables other\nparties + to make or receive copies. Mere interaction with a user through\na computer network, + with no transfer of a copy, is not conveying.\n\n An interactive user interface + displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient + and prominently visible\nfeature that (1) displays an appropriate copyright notice, + and (2)\ntells the user that there is no warranty for the work (except to the\nextent + that warranties are provided), that licensees may convey the\nwork under this + License, and how to view a copy of this License. If\nthe interface presents a + list of user commands or options, such as a\nmenu, a prominent item in the list + meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work + means the preferred form of the work\nfor making modifications to it. \"Object + code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means + an interface that either is an official\nstandard defined by a recognized standards + body, or, in the case of\ninterfaces specified for a particular programming language, + one that\nis widely used among developers working in that language.\n\n The \"System + Libraries\" of an executable work include anything, other\nthan the work as a + whole, that (a) is included in the normal form of\npackaging a Major Component, + but which is not part of that Major\nComponent, and (b) serves only to enable + use of the work with that\nMajor Component, or to implement a Standard Interface + for which an\nimplementation is available to the public in source code form. A\n\"Major + Component\", in this context, means a major essential component\n(kernel, window + system, and so on) of the specific operating system\n(if any) on which the executable + work runs, or a compiler used to\nproduce the work, or an object code interpreter + used to run it.\n\n The \"Corresponding Source\" for a work in object code form + means all\nthe source code needed to generate, install, and (for an executable\nwork) + run the object code and to modify the work, including scripts to\ncontrol those + activities. However, it does not include the work's\nSystem Libraries, or general-purpose + tools or generally available free\nprograms which are used unmodified in performing + those activities but\nwhich are not part of the work. For example, Corresponding + Source\nincludes interface definition files associated with source files for\nthe + work, and the source code for shared libraries and dynamically\nlinked subprograms + that the work is specifically designed to require,\nsuch as by intimate data communication + or control flow between those\nsubprograms and other parts of the work.\n\n The + Corresponding Source need not include anything that users\ncan regenerate automatically + from other parts of the Corresponding\nSource.\n\n The Corresponding Source for + a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n + \ All rights granted under this License are granted for the term of\ncopyright + on the Program, and are irrevocable provided the stated\nconditions are met. This + License explicitly affirms your unlimited\npermission to run the unmodified Program. + \ The output from running a\ncovered work is covered by this License only if the + output, given its\ncontent, constitutes a covered work. This License acknowledges + your\nrights of fair use or other equivalent, as provided by copyright law.\n\n + \ You may make, run and propagate covered works that you do not\nconvey, without + conditions so long as your license otherwise remains\nin force. You may convey + covered works to others for the sole purpose\nof having them make modifications + exclusively for you, or provide you\nwith facilities for running those works, + provided that you comply with\nthe terms of this License in conveying all material + for which you do\nnot control copyright. Those thus making or running the covered + works\nfor you must do so exclusively on your behalf, under your direction\nand + control, on terms that prohibit them from making any copies of\nyour copyrighted + material outside their relationship with you.\n\n Conveying under any other circumstances + is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; + section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From + Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective + technological\nmeasure under any applicable law fulfilling obligations under article\n11 + of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting + or restricting circumvention of such\nmeasures.\n\n When you convey a covered + work, you waive any legal power to forbid\ncircumvention of technological measures + to the extent such circumvention\nis effected by exercising rights under this + License with respect to\nthe covered work, and you disclaim any intention to limit + operation or\nmodification of the work as a means of enforcing, against the work's\nusers, + your or third parties' legal rights to forbid circumvention of\ntechnological + measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies + of the Program's source code as you\nreceive it, in any medium, provided that + you conspicuously and\nappropriately publish on each copy an appropriate copyright + notice;\nkeep intact all notices stating that this License and any\nnon-permissive + terms added in accord with section 7 apply to the code;\nkeep intact all notices + of the absence of any warranty; and give all\nrecipients a copy of this License + along with the Program.\n\n You may charge any price or no price for each copy + that you convey,\nand you may offer support or warranty protection for a fee.\n\n + \ 5. Conveying Modified Source Versions.\n\n You may convey a work based on the + Program, or the modifications to\nproduce it from the Program, in the form of + source code under the\nterms of section 4, provided that you also meet all of + these conditions:\n\n a) The work must carry prominent notices stating that + you modified\n it, and giving a relevant date.\n\n b) The work must carry + prominent notices stating that it is\n released under this License and any + conditions added under section\n 7. This requirement modifies the requirement + in section 4 to\n \"keep intact all notices\".\n\n c) You must license the + entire work, as a whole, under this\n License to anyone who comes into possession + of a copy. This\n License will therefore apply, along with any applicable + section 7\n additional terms, to the whole of the work, and all its parts,\n + \ regardless of how they are packaged. This License gives no\n permission + to license the work in any other way, but it does not\n invalidate such permission + if you have separately received it.\n\n d) If the work has interactive user + interfaces, each must display\n Appropriate Legal Notices; however, if the + Program has interactive\n interfaces that do not display Appropriate Legal + Notices, your\n work need not make them do so.\n\n A compilation of a covered + work with other separate and independent\nworks, which are not by their nature + extensions of the covered work,\nand which are not combined with it such as to + form a larger program,\nin or on a volume of a storage or distribution medium, + is called an\n\"aggregate\" if the compilation and its resulting copyright are + not\nused to limit the access or legal rights of the compilation's users\nbeyond + what the individual works permit. Inclusion of a covered work\nin an aggregate + does not cause this License to apply to the other\nparts of the aggregate.\n\n + \ 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object + code form under the terms\nof sections 4 and 5, provided that you also convey + the\nmachine-readable Corresponding Source under the terms of this License,\nin + one of these ways:\n\n a) Convey the object code in, or embodied in, a physical + product\n (including a physical distribution medium), accompanied by the\n + \ Corresponding Source fixed on a durable physical medium\n customarily used + for software interchange.\n\n b) Convey the object code in, or embodied in, + a physical product\n (including a physical distribution medium), accompanied + by a\n written offer, valid for at least three years and valid for as\n long + as you offer spare parts or customer support for that product\n model, to give + anyone who possesses the object code either (1) a\n copy of the Corresponding + Source for all the software in the\n product that is covered by this License, + on a durable physical\n medium customarily used for software interchange, for + a price no\n more than your reasonable cost of physically performing this\n + \ conveying of source, or (2) access to copy the\n Corresponding Source from + a network server at no charge.\n\n c) Convey individual copies of the object + code with a copy of the\n written offer to provide the Corresponding Source. + \ This\n alternative is allowed only occasionally and noncommercially, and\n + \ only if you received the object code with such an offer, in accord\n with + subsection 6b.\n\n d) Convey the object code by offering access from a designated\n + \ place (gratis or for a charge), and offer equivalent access to the\n Corresponding + Source in the same way through the same place at no\n further charge. You + need not require recipients to copy the\n Corresponding Source along with the + object code. If the place to\n copy the object code is a network server, the + Corresponding Source\n may be on a different server (operated by you or a third + party)\n that supports equivalent copying facilities, provided you maintain\n + \ clear directions next to the object code saying where to find the\n Corresponding + Source. Regardless of what server hosts the\n Corresponding Source, you remain + obligated to ensure that it is\n available for as long as needed to satisfy + these requirements.\n\n e) Convey the object code using peer-to-peer transmission, + provided\n you inform other peers where the object code and Corresponding\n + \ Source of the work are being offered to the general public at no\n charge + under subsection 6d.\n\n A separable portion of the object code, whose source + code is excluded\nfrom the Corresponding Source as a System Library, need not + be\nincluded in conveying the object code work.\n\n A \"User Product\" is either + (1) a \"consumer product\", which means any\ntangible personal property which + is normally used for personal, family,\nor household purposes, or (2) anything + designed or sold for incorporation\ninto a dwelling. In determining whether a + product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. + \ For a particular\nproduct received by a particular user, \"normally used\" refers + to a\ntypical or common use of that class of product, regardless of the status\nof + the particular user or of the way in which the particular user\nactually uses, + or expects or is expected to use, the product. A product\nis a consumer product + regardless of whether the product has substantial\ncommercial, industrial or non-consumer + uses, unless such uses represent\nthe only significant mode of use of the product.\n\n + \ \"Installation Information\" for a User Product means any methods,\nprocedures, + authorization keys, or other information required to install\nand execute modified + versions of a covered work in that User Product from\na modified version of its + Corresponding Source. The information must\nsuffice to ensure that the continued + functioning of the modified object\ncode is in no case prevented or interfered + with solely because\nmodification has been made.\n\n If you convey an object + code work under this section in, or with, or\nspecifically for use in, a User + Product, and the conveying occurs as\npart of a transaction in which the right + of possession and use of the\nUser Product is transferred to the recipient in + perpetuity or for a\nfixed term (regardless of how the transaction is characterized), + the\nCorresponding Source conveyed under this section must be accompanied\nby + the Installation Information. But this requirement does not apply\nif neither + you nor any third party retains the ability to install\nmodified object code on + the User Product (for example, the work has\nbeen installed in ROM).\n\n The + requirement to provide Installation Information does not include a\nrequirement + to continue to provide support service, warranty, or updates\nfor a work that + has been modified or installed by the recipient, or for\nthe User Product in which + it has been modified or installed. Access to a\nnetwork may be denied when the + modification itself materially and\nadversely affects the operation of the network + or violates the rules and\nprotocols for communication across the network.\n\n + \ Corresponding Source conveyed, and Installation Information provided,\nin accord + with this section must be in a format that is publicly\ndocumented (and with an + implementation available to the public in\nsource code form), and must require + no special password or key for\nunpacking, reading or copying.\n\n 7. Additional + Terms.\n\n \"Additional permissions\" are terms that supplement the terms of + this\nLicense by making exceptions from one or more of its conditions.\nAdditional + permissions that are applicable to the entire Program shall\nbe treated as though + they were included in this License, to the extent\nthat they are valid under applicable + law. If additional permissions\napply only to part of the Program, that part + may be used separately\nunder those permissions, but the entire Program remains + governed by\nthis License without regard to the additional permissions.\n\n When + you convey a copy of a covered work, you may at your option\nremove any additional + permissions from that copy, or from any part of\nit. (Additional permissions + may be written to require their own\nremoval in certain cases when you modify + the work.) You may place\nadditional permissions on material, added by you to + a covered work,\nfor which you have or can give appropriate copyright permission.\n\n + \ Notwithstanding any other provision of this License, for material you\nadd to + a covered work, you may (if authorized by the copyright holders of\nthat material) + supplement the terms of this License with terms:\n\n a) Disclaiming warranty + or limiting liability differently from the\n terms of sections 15 and 16 of + this License; or\n\n b) Requiring preservation of specified reasonable legal + notices or\n author attributions in that material or in the Appropriate Legal\n + \ Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation + of the origin of that material, or\n requiring that modified versions of such + material be marked in\n reasonable ways as different from the original version; + or\n\n d) Limiting the use for publicity purposes of names of licensors or\n + \ authors of the material; or\n\n e) Declining to grant rights under trademark + law for use of some\n trade names, trademarks, or service marks; or\n\n f) + Requiring indemnification of licensors and authors of that\n material by anyone + who conveys the material (or modified versions of\n it) with contractual assumptions + of liability to the recipient, for\n any liability that these contractual assumptions + directly impose on\n those licensors and authors.\n\n All other non-permissive + additional terms are considered \"further\nrestrictions\" within the meaning of + section 10. If the Program as you\nreceived it, or any part of it, contains a + notice stating that it is\ngoverned by this License along with a term that is + a further\nrestriction, you may remove that term. If a license document contains\na + further restriction but permits relicensing or conveying under this\nLicense, + you may add to a covered work material governed by the terms\nof that license + document, provided that the further restriction does\nnot survive such relicensing + or conveying.\n\n If you add terms to a covered work in accord with this section, + you\nmust place, in the relevant source files, a statement of the\nadditional + terms that apply to those files, or a notice indicating\nwhere to find the applicable + terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform + of a separately written license, or stated as exceptions;\nthe above requirements + apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a + covered work except as expressly\nprovided under this License. Any attempt otherwise + to propagate or\nmodify it is void, and will automatically terminate your rights + under\nthis License (including any patent licenses granted under the third\nparagraph + of section 11).\n\n However, if you cease all violation of this License, then + your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, + unless and until the copyright holder explicitly and\nfinally terminates your + license, and (b) permanently, if the copyright\nholder fails to notify you of + the violation by some reasonable means\nprior to 60 days after the cessation.\n\n + \ Moreover, your license from a particular copyright holder is\nreinstated permanently + if the copyright holder notifies you of the\nviolation by some reasonable means, + this is the first time you have\nreceived notice of violation of this License + (for any work) from that\ncopyright holder, and you cure the violation prior to + 30 days after\nyour receipt of the notice.\n\n Termination of your rights under + this section does not terminate the\nlicenses of parties who have received copies + or rights from you under\nthis License. If your rights have been terminated and + not permanently\nreinstated, you do not qualify to receive new licenses for the + same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n + \ You are not required to accept this License in order to receive or\nrun a copy + of the Program. Ancillary propagation of a covered work\noccurring solely as + a consequence of using peer-to-peer transmission\nto receive a copy likewise does + not require acceptance. However,\nnothing other than this License grants you + permission to propagate or\nmodify any covered work. These actions infringe copyright + if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered + work, you indicate your acceptance of this License to do so.\n\n 10. Automatic + Licensing of Downstream Recipients.\n\n Each time you convey a covered work, + the recipient automatically\nreceives a license from the original licensors, to + run, modify and\npropagate that work, subject to this License. You are not responsible\nfor + enforcing compliance by third parties with this License.\n\n An \"entity transaction\" + is a transaction transferring control of an\norganization, or substantially all + assets of one, or subdividing an\norganization, or merging organizations. If + propagation of a covered\nwork results from an entity transaction, each party + to that\ntransaction who receives a copy of the work also receives whatever\nlicenses + to the work the party's predecessor in interest had or could\ngive under the previous + paragraph, plus a right to possession of the\nCorresponding Source of the work + from the predecessor in interest, if\nthe predecessor has it or can get it with + reasonable efforts.\n\n You may not impose any further restrictions on the exercise + of the\nrights granted or affirmed under this License. For example, you may\nnot + impose a license fee, royalty, or other charge for exercise of\nrights granted + under this License, and you may not initiate litigation\n(including a cross-claim + or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by + making, using, selling, offering for\nsale, or importing the Program or any portion + of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes + use under this\nLicense of the Program or a work on which the Program is based. + \ The\nwork thus licensed is called the contributor's \"contributor version\".\n\n + \ A contributor's \"essential patent claims\" are all patent claims\nowned or + controlled by the contributor, whether already acquired or\nhereafter acquired, + that would be infringed by some manner, permitted\nby this License, of making, + using, or selling its contributor version,\nbut do not include claims that would + be infringed only as a\nconsequence of further modification of the contributor + version. For\npurposes of this definition, \"control\" includes the right to + grant\npatent sublicenses in a manner consistent with the requirements of\nthis + License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent + license under the contributor's essential patent claims, to\nmake, use, sell, + offer for sale, import and otherwise run, modify and\npropagate the contents of + its contributor version.\n\n In the following three paragraphs, a \"patent license\" + is any express\nagreement or commitment, however denominated, not to enforce a + patent\n(such as an express permission to practice a patent or covenant not to\nsue + for patent infringement). To \"grant\" such a patent license to a\nparty means + to make such an agreement or commitment not to enforce a\npatent against the party.\n\n + \ If you convey a covered work, knowingly relying on a patent license,\nand the + Corresponding Source of the work is not available for anyone\nto copy, free of + charge and under the terms of this License, through a\npublicly available network + server or other readily accessible means,\nthen you must either (1) cause the + Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of + the benefit of the\npatent license for this particular work, or (3) arrange, in + a manner\nconsistent with the requirements of this License, to extend the patent\nlicense + to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge + that, but for the patent license, your conveying the\ncovered work in a country, + or your recipient's use of the covered work\nin a country, would infringe one + or more identifiable patents in that\ncountry that you have reason to believe + are valid.\n\n If, pursuant to or in connection with a single transaction or\narrangement, + you convey, or propagate by procuring conveyance of, a\ncovered work, and grant + a patent license to some of the parties\nreceiving the covered work authorizing + them to use, propagate, modify\nor convey a specific copy of the covered work, + then the patent license\nyou grant is automatically extended to all recipients + of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" + if it does not include within\nthe scope of its coverage, prohibits the exercise + of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically + granted under this License. You may not convey a covered\nwork if you are a party + to an arrangement with a third party that is\nin the business of distributing + software, under which you make payment\nto the third party based on the extent + of your activity of conveying\nthe work, and under which the third party grants, + to any of the\nparties who would receive the covered work from you, a discriminatory\npatent + license (a) in connection with copies of the covered work\nconveyed by you (or + copies made from those copies), or (b) primarily\nfor and in connection with specific + products or compilations that\ncontain the covered work, unless you entered into + that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n + \ Nothing in this License shall be construed as excluding or limiting\nany implied + license or other defenses to infringement that may\notherwise be available to + you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n + \ If conditions are imposed on you (whether by court order, agreement or\notherwise) + that contradict the conditions of this License, they do not\nexcuse you from the + conditions of this License. If you cannot convey a\ncovered work so as to satisfy + simultaneously your obligations under this\nLicense and any other pertinent obligations, + then as a consequence you may\nnot convey it at all. For example, if you agree + to terms that obligate you\nto collect a royalty for further conveying from those + to whom you convey\nthe Program, the only way you could satisfy both those terms + and this\nLicense would be to refrain entirely from conveying the Program.\n\n + \ 13. Use with the GNU Affero General Public License.\n\n Notwithstanding any + other provision of this License, you have\npermission to link or combine any covered + work with a work licensed\nunder version 3 of the GNU Affero General Public License + into a single\ncombined work, and to convey the resulting work. The terms of + this\nLicense will continue to apply to the part which is the covered work,\nbut + the special requirements of the GNU Affero General Public License,\nsection 13, + concerning interaction through a network will apply to the\ncombination as such.\n\n + \ 14. Revised Versions of this License.\n\n The Free Software Foundation may + publish revised and/or new versions of\nthe GNU General Public License from time + to time. Such new versions will\nbe similar in spirit to the present version, + but may differ in detail to\naddress new problems or concerns.\n\n Each version + is given a distinguishing version number. If the\nProgram specifies that a certain + numbered version of the GNU General\nPublic License \"or any later version\" applies + to it, you have the\noption of following the terms and conditions either of that + numbered\nversion or of any later version published by the Free Software\nFoundation. + \ If the Program does not specify a version number of the\nGNU General Public + License, you may choose any version ever published\nby the Free Software Foundation.\n\n + \ If the Program specifies that a proxy can decide which future\nversions of the + GNU General Public License can be used, that proxy's\npublic statement of acceptance + of a version permanently authorizes you\nto choose that version for the Program.\n\n + \ Later license versions may give you additional or different\npermissions. However, + no additional obligations are imposed on any\nauthor or copyright holder as a + result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n + \ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE + LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER + PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED + OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND + PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, + YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. + Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR + AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES + AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, + INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT + OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS + OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES + OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH + HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n + \ 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty + and limitation of liability provided\nabove cannot be given local legal effect + according to their terms,\nreviewing courts shall apply local law that most closely + approximates\nan absolute waiver of all civil liability in connection with the\nProgram, + unless a warranty or assumption of liability accompanies a\ncopy of the Program + in return for a fee.\n\n END OF TERMS AND CONDITIONS\n\n How + to Apply These Terms to Your New Programs\n\n If you develop a new program, and + you want it to be of the greatest\npossible use to the public, the best way to + achieve this is to make it\nfree software which everyone can redistribute and + change under these terms.\n\n To do so, attach the following notices to the program. + \ It is safest\nto attach them to the start of each source file to most effectively\nstate + the exclusion of warranty; and each file should have at least\nthe \"copyright\" + line and a pointer to where the full notice is found.\n\n \n Copyright (C) + \ \n\n This program is free software: you can redistribute + it and/or modify\n it under the terms of the GNU General Public License as + published by\n the Free Software Foundation, either version 3 of the License, + or\n (at your option) any later version.\n\n This program is distributed + in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even + the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + \ See the\n GNU General Public License for more details.\n\n You should + have received a copy of the GNU General Public License\n along with this program. + \ If not, see .\n\nAlso add information on how + to contact you by electronic and paper mail.\n\n If the program does terminal + interaction, make it output a short\nnotice like this when it starts in an interactive + mode:\n\n Copyright (C) \n This program + comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n This is free + software, and you are welcome to redistribute it\n under certain conditions; + type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' + should show the appropriate\nparts of the General Public License. Of course, + your program's commands\nmight be different; for a GUI interface, you would use + an \"about box\".\n\n You should also get your employer (if you work as a programmer) + or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor + more information on this, and how to apply and follow the GNU GPL, see\n.\n\n + \ The GNU General Public License does not permit incorporating your program\ninto + proprietary programs. If your program is a subroutine library, you\nmay consider + it more useful to permit linking proprietary applications with\nthe library. If + this is what you want to do, use the GNU Lesser General\nPublic License instead + of this License. But first, please read\n.\n" +notices: [] diff --git a/.licenses/go/github.com/arduino/pluggable-discovery-protocol-handler/v2.dep.yml b/.licenses/go/github.com/arduino/pluggable-discovery-protocol-handler/v2.dep.yml new file mode 100644 index 00000000000..2fdbca2179a --- /dev/null +++ b/.licenses/go/github.com/arduino/pluggable-discovery-protocol-handler/v2.dep.yml @@ -0,0 +1,709 @@ +--- +name: github.com/arduino/pluggable-discovery-protocol-handler/v2 +version: v2.2.0 +type: go +summary: Package discovery is a library for handling the Arduino Pluggable-Discovery + protocol (https://github.com/arduino/tooling-rfcs/blob/main/RFCs/0002-pluggable-discovery.md#pluggable-discovery-api-via-stdinstdout) +homepage: https://pkg.go.dev/github.com/arduino/pluggable-discovery-protocol-handler/v2 +license: other +licenses: +- sources: LICENSE.txt + text: | + This file includes licensing information for serial-discovery + + Copyright (c) 2018 ARDUINO SA (www.arduino.cc) + + The software is released under the GNU General Public License, which covers the main body + of the serial-discovery code. The terms of this license can be found at: + https://www.gnu.org/licenses/gpl-3.0.en.html + + You can be released from the requirements of the above licenses by purchasing + a commercial license. Buying such a license is mandatory if you want to modify or + otherwise use the software for commercial activities involving the Arduino + software without disclosing the source code of your own applications. To purchase + a commercial license, send an email to license@arduino.cc + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for + software and other kinds of works. + + The licenses for most software and other practical works are designed + to take away your freedom to share and change the works. By contrast, + the GNU General Public License is intended to guarantee your freedom to + share and change all versions of a program--to make sure it remains free + software for all its users. We, the Free Software Foundation, use the + GNU General Public License for most of our software; it applies also to + any other work released this way by its authors. You can apply it to + your programs, too. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for + them if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you + these rights or asking you to surrender the rights. Therefore, you have + certain responsibilities if you distribute copies of the software, or if + you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether + gratis or for a fee, you must pass on to the recipients the same + freedoms that you received. You must make sure that they, too, receive + or can get the source code. And you must show them these terms so they + know their rights. + + Developers that use the GNU GPL protect your rights with two steps: + (1) assert copyright on the software, and (2) offer you this License + giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains + that there is no warranty for this free software. For both users' and + authors' sake, the GPL requires that modified versions be marked as + changed, so that their problems will not be attributed erroneously to + authors of previous versions. + + Some devices are designed to deny users access to install or run + modified versions of the software inside them, although the manufacturer + can do so. This is fundamentally incompatible with the aim of + protecting users' freedom to change the software. The systematic + pattern of such abuse occurs in the area of products for individuals to + use, which is precisely where it is most unacceptable. Therefore, we + have designed this version of the GPL to prohibit the practice for those + products. If such problems arise substantially in other domains, we + stand ready to extend this provision to those domains in future versions + of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. + States should not allow patents to restrict development and use of + software on general-purpose computers, but in those that do, we wish to + avoid the special danger that patents applied to a free program could + make it effectively proprietary. To prevent this, the GPL assures that + patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of + works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this + License. Each licensee is addressed as "you". "Licensees" and + "recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work + in a fashion requiring copyright permission, other than the making of an + exact copy. The resulting work is called a "modified version" of the + earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based + on the Program. + + To "propagate" a work means to do anything with it that, without + permission, would make you directly or secondarily liable for + infringement under applicable copyright law, except executing it on a + computer or modifying a private copy. Propagation includes copying, + distribution (with or without modification), making available to the + public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other + parties to make or receive copies. Mere interaction with a user through + a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" + to the extent that it includes a convenient and prominently visible + feature that (1) displays an appropriate copyright notice, and (2) + tells the user that there is no warranty for the work (except to the + extent that warranties are provided), that licensees may convey the + work under this License, and how to view a copy of this License. If + the interface presents a list of user commands or options, such as a + menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work + for making modifications to it. "Object code" means any non-source + form of a work. + + A "Standard Interface" means an interface that either is an official + standard defined by a recognized standards body, or, in the case of + interfaces specified for a particular programming language, one that + is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other + than the work as a whole, that (a) is included in the normal form of + packaging a Major Component, but which is not part of that Major + Component, and (b) serves only to enable use of the work with that + Major Component, or to implement a Standard Interface for which an + implementation is available to the public in source code form. A + "Major Component", in this context, means a major essential component + (kernel, window system, and so on) of the specific operating system + (if any) on which the executable work runs, or a compiler used to + produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all + the source code needed to generate, install, and (for an executable + work) run the object code and to modify the work, including scripts to + control those activities. However, it does not include the work's + System Libraries, or general-purpose tools or generally available free + programs which are used unmodified in performing those activities but + which are not part of the work. For example, Corresponding Source + includes interface definition files associated with source files for + the work, and the source code for shared libraries and dynamically + linked subprograms that the work is specifically designed to require, + such as by intimate data communication or control flow between those + subprograms and other parts of the work. + + The Corresponding Source need not include anything that users + can regenerate automatically from other parts of the Corresponding + Source. + + The Corresponding Source for a work in source code form is that + same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of + copyright on the Program, and are irrevocable provided the stated + conditions are met. This License explicitly affirms your unlimited + permission to run the unmodified Program. The output from running a + covered work is covered by this License only if the output, given its + content, constitutes a covered work. This License acknowledges your + rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not + convey, without conditions so long as your license otherwise remains + in force. You may convey covered works to others for the sole purpose + of having them make modifications exclusively for you, or provide you + with facilities for running those works, provided that you comply with + the terms of this License in conveying all material for which you do + not control copyright. Those thus making or running the covered works + for you must do so exclusively on your behalf, under your direction + and control, on terms that prohibit them from making any copies of + your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under + the conditions stated below. Sublicensing is not allowed; section 10 + makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological + measure under any applicable law fulfilling obligations under article + 11 of the WIPO copyright treaty adopted on 20 December 1996, or + similar laws prohibiting or restricting circumvention of such + measures. + + When you convey a covered work, you waive any legal power to forbid + circumvention of technological measures to the extent such circumvention + is effected by exercising rights under this License with respect to + the covered work, and you disclaim any intention to limit operation or + modification of the work as a means of enforcing, against the work's + users, your or third parties' legal rights to forbid circumvention of + technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you + receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy an appropriate copyright notice; + keep intact all notices stating that this License and any + non-permissive terms added in accord with section 7 apply to the code; + keep intact all notices of the absence of any warranty; and give all + recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, + and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to + produce it from the Program, in the form of source code under the + terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent + works, which are not by their nature extensions of the covered work, + and which are not combined with it such as to form a larger program, + in or on a volume of a storage or distribution medium, is called an + "aggregate" if the compilation and its resulting copyright are not + used to limit the access or legal rights of the compilation's users + beyond what the individual works permit. Inclusion of a covered work + in an aggregate does not cause this License to apply to the other + parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms + of sections 4 and 5, provided that you also convey the + machine-readable Corresponding Source under the terms of this License, + in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded + from the Corresponding Source as a System Library, need not be + included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any + tangible personal property which is normally used for personal, family, + or household purposes, or (2) anything designed or sold for incorporation + into a dwelling. In determining whether a product is a consumer product, + doubtful cases shall be resolved in favor of coverage. For a particular + product received by a particular user, "normally used" refers to a + typical or common use of that class of product, regardless of the status + of the particular user or of the way in which the particular user + actually uses, or expects or is expected to use, the product. A product + is a consumer product regardless of whether the product has substantial + commercial, industrial or non-consumer uses, unless such uses represent + the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, + procedures, authorization keys, or other information required to install + and execute modified versions of a covered work in that User Product from + a modified version of its Corresponding Source. The information must + suffice to ensure that the continued functioning of the modified object + code is in no case prevented or interfered with solely because + modification has been made. + + If you convey an object code work under this section in, or with, or + specifically for use in, a User Product, and the conveying occurs as + part of a transaction in which the right of possession and use of the + User Product is transferred to the recipient in perpetuity or for a + fixed term (regardless of how the transaction is characterized), the + Corresponding Source conveyed under this section must be accompanied + by the Installation Information. But this requirement does not apply + if neither you nor any third party retains the ability to install + modified object code on the User Product (for example, the work has + been installed in ROM). + + The requirement to provide Installation Information does not include a + requirement to continue to provide support service, warranty, or updates + for a work that has been modified or installed by the recipient, or for + the User Product in which it has been modified or installed. Access to a + network may be denied when the modification itself materially and + adversely affects the operation of the network or violates the rules and + protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, + in accord with this section must be in a format that is publicly + documented (and with an implementation available to the public in + source code form), and must require no special password or key for + unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this + License by making exceptions from one or more of its conditions. + Additional permissions that are applicable to the entire Program shall + be treated as though they were included in this License, to the extent + that they are valid under applicable law. If additional permissions + apply only to part of the Program, that part may be used separately + under those permissions, but the entire Program remains governed by + this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option + remove any additional permissions from that copy, or from any part of + it. (Additional permissions may be written to require their own + removal in certain cases when you modify the work.) You may place + additional permissions on material, added by you to a covered work, + for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you + add to a covered work, you may (if authorized by the copyright holders of + that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further + restrictions" within the meaning of section 10. If the Program as you + received it, or any part of it, contains a notice stating that it is + governed by this License along with a term that is a further + restriction, you may remove that term. If a license document contains + a further restriction but permits relicensing or conveying under this + License, you may add to a covered work material governed by the terms + of that license document, provided that the further restriction does + not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you + must place, in the relevant source files, a statement of the + additional terms that apply to those files, or a notice indicating + where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the + form of a separately written license, or stated as exceptions; + the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly + provided under this License. Any attempt otherwise to propagate or + modify it is void, and will automatically terminate your rights under + this License (including any patent licenses granted under the third + paragraph of section 11). + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the copyright + holder fails to notify you of the violation by some reasonable means + prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from that + copyright holder, and you cure the violation prior to 30 days after + your receipt of the notice. + + Termination of your rights under this section does not terminate the + licenses of parties who have received copies or rights from you under + this License. If your rights have been terminated and not permanently + reinstated, you do not qualify to receive new licenses for the same + material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or + run a copy of the Program. Ancillary propagation of a covered work + occurring solely as a consequence of using peer-to-peer transmission + to receive a copy likewise does not require acceptance. However, + nothing other than this License grants you permission to propagate or + modify any covered work. These actions infringe copyright if you do + not accept this License. Therefore, by modifying or propagating a + covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically + receives a license from the original licensors, to run, modify and + propagate that work, subject to this License. You are not responsible + for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an + organization, or substantially all assets of one, or subdividing an + organization, or merging organizations. If propagation of a covered + work results from an entity transaction, each party to that + transaction who receives a copy of the work also receives whatever + licenses to the work the party's predecessor in interest had or could + give under the previous paragraph, plus a right to possession of the + Corresponding Source of the work from the predecessor in interest, if + the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the + rights granted or affirmed under this License. For example, you may + not impose a license fee, royalty, or other charge for exercise of + rights granted under this License, and you may not initiate litigation + (including a cross-claim or counterclaim in a lawsuit) alleging that + any patent claim is infringed by making, using, selling, offering for + sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this + License of the Program or a work on which the Program is based. The + work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims + owned or controlled by the contributor, whether already acquired or + hereafter acquired, that would be infringed by some manner, permitted + by this License, of making, using, or selling its contributor version, + but do not include claims that would be infringed only as a + consequence of further modification of the contributor version. For + purposes of this definition, "control" includes the right to grant + patent sublicenses in a manner consistent with the requirements of + this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free + patent license under the contributor's essential patent claims, to + make, use, sell, offer for sale, import and otherwise run, modify and + propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express + agreement or commitment, however denominated, not to enforce a patent + (such as an express permission to practice a patent or covenant not to + sue for patent infringement). To "grant" such a patent license to a + party means to make such an agreement or commitment not to enforce a + patent against the party. + + If you convey a covered work, knowingly relying on a patent license, + and the Corresponding Source of the work is not available for anyone + to copy, free of charge and under the terms of this License, through a + publicly available network server or other readily accessible means, + then you must either (1) cause the Corresponding Source to be so + available, or (2) arrange to deprive yourself of the benefit of the + patent license for this particular work, or (3) arrange, in a manner + consistent with the requirements of this License, to extend the patent + license to downstream recipients. "Knowingly relying" means you have + actual knowledge that, but for the patent license, your conveying the + covered work in a country, or your recipient's use of the covered work + in a country, would infringe one or more identifiable patents in that + country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or + arrangement, you convey, or propagate by procuring conveyance of, a + covered work, and grant a patent license to some of the parties + receiving the covered work authorizing them to use, propagate, modify + or convey a specific copy of the covered work, then the patent license + you grant is automatically extended to all recipients of the covered + work and works based on it. + + A patent license is "discriminatory" if it does not include within + the scope of its coverage, prohibits the exercise of, or is + conditioned on the non-exercise of one or more of the rights that are + specifically granted under this License. You may not convey a covered + work if you are a party to an arrangement with a third party that is + in the business of distributing software, under which you make payment + to the third party based on the extent of your activity of conveying + the work, and under which the third party grants, to any of the + parties who would receive the covered work from you, a discriminatory + patent license (a) in connection with copies of the covered work + conveyed by you (or copies made from those copies), or (b) primarily + for and in connection with specific products or compilations that + contain the covered work, unless you entered into that arrangement, + or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting + any implied license or other defenses to infringement that may + otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot convey a + covered work so as to satisfy simultaneously your obligations under this + License and any other pertinent obligations, then as a consequence you may + not convey it at all. For example, if you agree to terms that obligate you + to collect a royalty for further conveying from those to whom you convey + the Program, the only way you could satisfy both those terms and this + License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have + permission to link or combine any covered work with a work licensed + under version 3 of the GNU Affero General Public License into a single + combined work, and to convey the resulting work. The terms of this + License will continue to apply to the part which is the covered work, + but the special requirements of the GNU Affero General Public License, + section 13, concerning interaction through a network will apply to the + combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of + the GNU General Public License from time to time. Such new versions will + be similar in spirit to the present version, but may differ in detail to + address new problems or concerns. + + Each version is given a distinguishing version number. If the + Program specifies that a certain numbered version of the GNU General + Public License "or any later version" applies to it, you have the + option of following the terms and conditions either of that numbered + version or of any later version published by the Free Software + Foundation. If the Program does not specify a version number of the + GNU General Public License, you may choose any version ever published + by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future + versions of the GNU General Public License can be used, that proxy's + public statement of acceptance of a version permanently authorizes you + to choose that version for the Program. + + Later license versions may give you additional or different + permissions. However, no additional obligations are imposed on any + author or copyright holder as a result of your choosing to follow a + later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT + HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY + OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM + IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF + ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS + THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY + GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE + USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF + DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD + PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), + EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF + SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided + above cannot be given local legal effect according to their terms, + reviewing courts shall apply local law that most closely approximates + an absolute waiver of all civil liability in connection with the + Program, unless a warranty or assumption of liability accompanies a + copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively + state the exclusion of warranty; and each file should have at least + the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short + notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the appropriate + parts of the General Public License. Of course, your program's commands + might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, + if any, to sign a "copyright disclaimer" for the program, if necessary. + For more information on this, and how to apply and follow the GNU GPL, see + . + + The GNU General Public License does not permit incorporating your program + into proprietary programs. If your program is a subroutine library, you + may consider it more useful to permit linking proprietary applications with + the library. If this is what you want to do, use the GNU Lesser General + Public License instead of this License. But first, please read + . +- sources: README.md + text: |- + Copyright (c) 2021 ARDUINO SA (www.arduino.cc) + + The software is released under the GNU General Public License, which covers the main body + of the serial-discovery code. The terms of this license can be found at: + https://www.gnu.org/licenses/gpl-3.0.en.html + + See [LICENSE.txt](https://github.com/arduino/pluggable-discovery-protocol-handler/blob/master/LICENSE.txt) for details. +notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/dh/x25519.dep.yml b/.licenses/go/github.com/cloudflare/circl/dh/x25519.dep.yml index 77b9b07f0d1..9a3efa5ab03 100644 --- a/.licenses/go/github.com/cloudflare/circl/dh/x25519.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/dh/x25519.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/dh/x25519 -version: v1.3.3 +version: v1.3.7 type: go summary: Package x25519 provides Diffie-Hellman functions as specified in RFC-7748. homepage: https://pkg.go.dev/github.com/cloudflare/circl/dh/x25519 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/dh/x448.dep.yml b/.licenses/go/github.com/cloudflare/circl/dh/x448.dep.yml index 77717903ce6..89ebbe18990 100644 --- a/.licenses/go/github.com/cloudflare/circl/dh/x448.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/dh/x448.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/dh/x448 -version: v1.3.3 +version: v1.3.7 type: go summary: Package x448 provides Diffie-Hellman functions as specified in RFC-7748. homepage: https://pkg.go.dev/github.com/cloudflare/circl/dh/x448 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/ecc/goldilocks.dep.yml b/.licenses/go/github.com/cloudflare/circl/ecc/goldilocks.dep.yml index 8a0c15834f9..e9daa048734 100644 --- a/.licenses/go/github.com/cloudflare/circl/ecc/goldilocks.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/ecc/goldilocks.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/cloudflare/circl/ecc/goldilocks -version: v1.3.3 +version: v1.3.7 type: go summary: Package goldilocks provides elliptic curve operations over the goldilocks curve. homepage: https://pkg.go.dev/github.com/cloudflare/circl/ecc/goldilocks license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -66,6 +66,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/internal/conv.dep.yml b/.licenses/go/github.com/cloudflare/circl/internal/conv.dep.yml index 06a42797314..1cedf0ceec2 100644 --- a/.licenses/go/github.com/cloudflare/circl/internal/conv.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/internal/conv.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/internal/conv -version: v1.3.3 +version: v1.3.7 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/cloudflare/circl/internal/conv license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/internal/sha3.dep.yml b/.licenses/go/github.com/cloudflare/circl/internal/sha3.dep.yml index 2c8ed2788fd..49fa79d68f6 100644 --- a/.licenses/go/github.com/cloudflare/circl/internal/sha3.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/internal/sha3.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/cloudflare/circl/internal/sha3 -version: v1.3.3 +version: v1.3.7 type: go summary: Package sha3 implements the SHA-3 fixed-output-length hash functions and the SHAKE variable-output-length hash functions defined by FIPS-202. homepage: https://pkg.go.dev/github.com/cloudflare/circl/internal/sha3 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -66,6 +66,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/math.dep.yml b/.licenses/go/github.com/cloudflare/circl/math.dep.yml index 4eea3a9b5ba..efdc59bc46c 100644 --- a/.licenses/go/github.com/cloudflare/circl/math.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/math.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/math -version: v1.3.3 +version: v1.3.7 type: go summary: Package math provides some utility functions for big integers. homepage: https://pkg.go.dev/github.com/cloudflare/circl/math license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/math/fp25519.dep.yml b/.licenses/go/github.com/cloudflare/circl/math/fp25519.dep.yml index c83e3e70004..20c3b2393c3 100644 --- a/.licenses/go/github.com/cloudflare/circl/math/fp25519.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/math/fp25519.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/math/fp25519 -version: v1.3.3 +version: v1.3.7 type: go summary: Package fp25519 provides prime field arithmetic over GF(2^255-19). homepage: https://pkg.go.dev/github.com/cloudflare/circl/math/fp25519 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/math/fp448.dep.yml b/.licenses/go/github.com/cloudflare/circl/math/fp448.dep.yml index b88b20cae0a..b65891c9114 100644 --- a/.licenses/go/github.com/cloudflare/circl/math/fp448.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/math/fp448.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/math/fp448 -version: v1.3.3 +version: v1.3.7 type: go summary: Package fp448 provides prime field arithmetic over GF(2^448-2^224-1). homepage: https://pkg.go.dev/github.com/cloudflare/circl/math/fp448 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/math/mlsbset.dep.yml b/.licenses/go/github.com/cloudflare/circl/math/mlsbset.dep.yml index e3eccd73248..c837e724cf8 100644 --- a/.licenses/go/github.com/cloudflare/circl/math/mlsbset.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/math/mlsbset.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/math/mlsbset -version: v1.3.3 +version: v1.3.7 type: go summary: Package mlsbset provides a constant-time exponentiation method with precomputation. homepage: https://pkg.go.dev/github.com/cloudflare/circl/math/mlsbset license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/sign.dep.yml b/.licenses/go/github.com/cloudflare/circl/sign.dep.yml index d1a2b2ddc6d..5d3285605df 100644 --- a/.licenses/go/github.com/cloudflare/circl/sign.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/sign.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/sign -version: v1.3.3 +version: v1.3.7 type: go summary: Package sign provides unified interfaces for signature schemes. homepage: https://pkg.go.dev/github.com/cloudflare/circl/sign license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/sign/ed25519.dep.yml b/.licenses/go/github.com/cloudflare/circl/sign/ed25519.dep.yml index 00dee398327..8586196a41a 100644 --- a/.licenses/go/github.com/cloudflare/circl/sign/ed25519.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/sign/ed25519.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/sign/ed25519 -version: v1.3.3 +version: v1.3.7 type: go summary: Package ed25519 implements Ed25519 signature scheme as described in RFC-8032. homepage: https://pkg.go.dev/github.com/cloudflare/circl/sign/ed25519 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/sign/ed448.dep.yml b/.licenses/go/github.com/cloudflare/circl/sign/ed448.dep.yml index fbfdd35c65e..96cace11ded 100644 --- a/.licenses/go/github.com/cloudflare/circl/sign/ed448.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/sign/ed448.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/sign/ed448 -version: v1.3.3 +version: v1.3.7 type: go summary: Package ed448 implements Ed448 signature scheme as described in RFC-8032. homepage: https://pkg.go.dev/github.com/cloudflare/circl/sign/ed448 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.3.7/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.3.7/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cpuguy83/go-md2man/v2/md2man.dep.yml b/.licenses/go/github.com/cpuguy83/go-md2man/v2/md2man.dep.yml index 2aacfd18c50..07a78ed6c13 100644 --- a/.licenses/go/github.com/cpuguy83/go-md2man/v2/md2man.dep.yml +++ b/.licenses/go/github.com/cpuguy83/go-md2man/v2/md2man.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cpuguy83/go-md2man/v2/md2man -version: v2.0.2 +version: v2.0.3 type: go summary: homepage: https://pkg.go.dev/github.com/cpuguy83/go-md2man/v2/md2man license: mit licenses: -- sources: v2@v2.0.2/LICENSE.md +- sources: v2@v2.0.3/LICENSE.md text: | The MIT License (MIT) diff --git a/.licenses/go/github.com/fatih/color.dep.yml b/.licenses/go/github.com/fatih/color.dep.yml index fa66af7e9d0..10f4250204b 100644 --- a/.licenses/go/github.com/fatih/color.dep.yml +++ b/.licenses/go/github.com/fatih/color.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/fatih/color -version: v1.15.0 +version: v1.17.0 type: go summary: Package color is an ANSI color package to output colorized or SGR defined output to the standard output. diff --git a/.licenses/go/github.com/fsnotify/fsnotify.dep.yml b/.licenses/go/github.com/fsnotify/fsnotify.dep.yml index 5cb2ddc7c33..5b3324b3ee4 100644 --- a/.licenses/go/github.com/fsnotify/fsnotify.dep.yml +++ b/.licenses/go/github.com/fsnotify/fsnotify.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/fsnotify/fsnotify -version: v1.6.0 +version: v1.7.0 type: go summary: Package fsnotify provides a cross-platform interface for file system notifications. homepage: https://pkg.go.dev/github.com/fsnotify/fsnotify diff --git a/.licenses/go/github.com/gofrs/uuid/v5.dep.yml b/.licenses/go/github.com/gofrs/uuid/v5.dep.yml index 06b74d71a62..b1af89a5d84 100644 --- a/.licenses/go/github.com/gofrs/uuid/v5.dep.yml +++ b/.licenses/go/github.com/gofrs/uuid/v5.dep.yml @@ -1,9 +1,9 @@ --- name: github.com/gofrs/uuid/v5 -version: v5.0.0 +version: v5.2.0 type: go summary: Package uuid provides implementations of the Universally Unique Identifier - (UUID), as specified in RFC-4122 and the Peabody RFC Draft (revision 03). + (UUID), as specified in RFC-9562 (formerly RFC-4122). homepage: https://pkg.go.dev/github.com/gofrs/uuid/v5 license: mit licenses: diff --git a/.licenses/go/github.com/golang/protobuf/jsonpb.dep.yml b/.licenses/go/github.com/golang/protobuf/jsonpb.dep.yml deleted file mode 100644 index a45a8343420..00000000000 --- a/.licenses/go/github.com/golang/protobuf/jsonpb.dep.yml +++ /dev/null @@ -1,40 +0,0 @@ ---- -name: github.com/golang/protobuf/jsonpb -version: v1.5.3 -type: go -summary: Package jsonpb provides functionality to marshal and unmarshal between a - protocol buffer message and JSON. -homepage: https://pkg.go.dev/github.com/golang/protobuf/jsonpb -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/golang/protobuf/proto.dep.yml b/.licenses/go/github.com/golang/protobuf/proto.dep.yml deleted file mode 100644 index bf2a2ba4901..00000000000 --- a/.licenses/go/github.com/golang/protobuf/proto.dep.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: github.com/golang/protobuf/proto -version: v1.5.3 -type: go -summary: Package proto provides functionality for handling protocol buffer messages. -homepage: https://pkg.go.dev/github.com/golang/protobuf/proto -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/golang/protobuf/ptypes.dep.yml b/.licenses/go/github.com/golang/protobuf/ptypes.dep.yml deleted file mode 100644 index 48e471769d5..00000000000 --- a/.licenses/go/github.com/golang/protobuf/ptypes.dep.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: github.com/golang/protobuf/ptypes -version: v1.5.3 -type: go -summary: Package ptypes provides functionality for interacting with well-known types. -homepage: https://pkg.go.dev/github.com/golang/protobuf/ptypes -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/golang/protobuf/ptypes/any.dep.yml b/.licenses/go/github.com/golang/protobuf/ptypes/any.dep.yml deleted file mode 100644 index 7aa8349dc6c..00000000000 --- a/.licenses/go/github.com/golang/protobuf/ptypes/any.dep.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: github.com/golang/protobuf/ptypes/any -version: v1.5.3 -type: go -summary: -homepage: https://pkg.go.dev/github.com/golang/protobuf/ptypes/any -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/golang/protobuf/ptypes/duration.dep.yml b/.licenses/go/github.com/golang/protobuf/ptypes/duration.dep.yml deleted file mode 100644 index 094a5c2f120..00000000000 --- a/.licenses/go/github.com/golang/protobuf/ptypes/duration.dep.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: github.com/golang/protobuf/ptypes/duration -version: v1.5.3 -type: go -summary: -homepage: https://pkg.go.dev/github.com/golang/protobuf/ptypes/duration -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/golang/protobuf/ptypes/timestamp.dep.yml b/.licenses/go/github.com/golang/protobuf/ptypes/timestamp.dep.yml deleted file mode 100644 index 3fe208c942e..00000000000 --- a/.licenses/go/github.com/golang/protobuf/ptypes/timestamp.dep.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: github.com/golang/protobuf/ptypes/timestamp -version: v1.5.3 -type: go -summary: -homepage: https://pkg.go.dev/github.com/golang/protobuf/ptypes/timestamp -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/pkg/errors.dep.yml b/.licenses/go/github.com/pkg/errors.dep.yml deleted file mode 100644 index a9b72bc4b04..00000000000 --- a/.licenses/go/github.com/pkg/errors.dep.yml +++ /dev/null @@ -1,36 +0,0 @@ ---- -name: github.com/pkg/errors -version: v0.9.1 -type: go -summary: Package errors provides simple error handling primitives. -homepage: https://pkg.go.dev/github.com/pkg/errors -license: bsd-2-clause -licenses: -- sources: LICENSE - text: | - Copyright (c) 2015, Dave Cheney - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: README.md - text: BSD-2-Clause -notices: [] diff --git a/.licenses/go/github.com/spf13/afero.dep.yml b/.licenses/go/github.com/spf13/afero.dep.yml index b1f072c83e8..c0053ded734 100644 --- a/.licenses/go/github.com/spf13/afero.dep.yml +++ b/.licenses/go/github.com/spf13/afero.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/spf13/afero -version: v1.10.0 +version: v1.11.0 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/afero diff --git a/.licenses/go/github.com/spf13/afero/internal/common.dep.yml b/.licenses/go/github.com/spf13/afero/internal/common.dep.yml index d60e00bd580..bd5796a18c1 100644 --- a/.licenses/go/github.com/spf13/afero/internal/common.dep.yml +++ b/.licenses/go/github.com/spf13/afero/internal/common.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/afero/internal/common -version: v1.10.0 +version: v1.11.0 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/afero/internal/common license: apache-2.0 licenses: -- sources: afero@v1.10.0/LICENSE.txt +- sources: afero@v1.11.0/LICENSE.txt text: |2 Apache License Version 2.0, January 2004 @@ -182,7 +182,7 @@ licenses: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. -- sources: afero@v1.10.0/README.md +- sources: afero@v1.11.0/README.md text: |- Afero is released under the Apache 2.0 license. See [LICENSE.txt](https://github.com/spf13/afero/blob/master/LICENSE.txt) diff --git a/.licenses/go/github.com/spf13/afero/mem.dep.yml b/.licenses/go/github.com/spf13/afero/mem.dep.yml index 17bc151fabc..bf2e3824949 100644 --- a/.licenses/go/github.com/spf13/afero/mem.dep.yml +++ b/.licenses/go/github.com/spf13/afero/mem.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/afero/mem -version: v1.10.0 +version: v1.11.0 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/afero/mem license: apache-2.0 licenses: -- sources: afero@v1.10.0/LICENSE.txt +- sources: afero@v1.11.0/LICENSE.txt text: |2 Apache License Version 2.0, January 2004 @@ -182,7 +182,7 @@ licenses: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. -- sources: afero@v1.10.0/README.md +- sources: afero@v1.11.0/README.md text: |- Afero is released under the Apache 2.0 license. See [LICENSE.txt](https://github.com/spf13/afero/blob/master/LICENSE.txt) diff --git a/.licenses/go/github.com/spf13/cast.dep.yml b/.licenses/go/github.com/spf13/cast.dep.yml index 8cf6d2dd0f4..2a3a308e4ef 100644 --- a/.licenses/go/github.com/spf13/cast.dep.yml +++ b/.licenses/go/github.com/spf13/cast.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/spf13/cast -version: v1.5.1 +version: v1.6.0 type: go summary: Package cast provides easy and safe casting in Go. homepage: https://pkg.go.dev/github.com/spf13/cast diff --git a/.licenses/go/github.com/spf13/cobra.dep.yml b/.licenses/go/github.com/spf13/cobra.dep.yml index a14dcec346e..92ca386ce15 100644 --- a/.licenses/go/github.com/spf13/cobra.dep.yml +++ b/.licenses/go/github.com/spf13/cobra.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/spf13/cobra -version: v1.7.0 +version: v1.8.0 type: go summary: Package cobra is a commander providing a simple interface to create powerful modern CLI interfaces. @@ -184,5 +184,5 @@ licenses: incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - sources: README.md - text: Cobra is released under the Apache 2.0 license. See [LICENSE.txt](https://github.com/spf13/cobra/blob/master/LICENSE.txt) + text: Cobra is released under the Apache 2.0 license. See [LICENSE.txt](LICENSE.txt) notices: [] diff --git a/.licenses/go/github.com/spf13/cobra/doc.dep.yml b/.licenses/go/github.com/spf13/cobra/doc.dep.yml index 1119f6fb44f..a3a7cb068ea 100644 --- a/.licenses/go/github.com/spf13/cobra/doc.dep.yml +++ b/.licenses/go/github.com/spf13/cobra/doc.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/cobra/doc -version: v1.7.0 +version: v1.8.0 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/cobra/doc license: apache-2.0 licenses: -- sources: cobra@v1.7.0/LICENSE.txt +- sources: cobra@v1.8.0/LICENSE.txt text: |2 Apache License Version 2.0, January 2004 @@ -182,4 +182,6 @@ licenses: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. +- sources: cobra@v1.8.0/README.md + text: Cobra is released under the Apache 2.0 license. See [LICENSE.txt](LICENSE.txt) notices: [] diff --git a/.licenses/go/github.com/spf13/viper.dep.yml b/.licenses/go/github.com/spf13/viper.dep.yml index 61d4b93a856..eb99b85c933 100644 --- a/.licenses/go/github.com/spf13/viper.dep.yml +++ b/.licenses/go/github.com/spf13/viper.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/spf13/viper -version: v1.17.0 +version: v1.18.2 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding.dep.yml index d06da41598d..7d94b23fb3a 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding -version: v1.17.0 +version: v1.18.2 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.18.2/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.18.2/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/dotenv.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding/dotenv.dep.yml index 520cf1af8b9..d0739e03eb9 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/dotenv.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding/dotenv.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding/dotenv -version: v1.17.0 +version: v1.18.2 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/dotenv license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.18.2/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.18.2/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/hcl.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding/hcl.dep.yml index 30fb1375ca4..ef190b4217b 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/hcl.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding/hcl.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding/hcl -version: v1.17.0 +version: v1.18.2 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/hcl license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.18.2/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.18.2/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/ini.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding/ini.dep.yml index 7eb677cf34c..d4616dbff58 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/ini.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding/ini.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding/ini -version: v1.17.0 +version: v1.18.2 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/ini license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.18.2/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.18.2/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/javaproperties.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding/javaproperties.dep.yml index eb799d46183..40846e58143 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/javaproperties.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding/javaproperties.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding/javaproperties -version: v1.17.0 +version: v1.18.2 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/javaproperties license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.18.2/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.18.2/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/json.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding/json.dep.yml index ca7d35555a5..6cb43862192 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/json.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding/json.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding/json -version: v1.17.0 +version: v1.18.2 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/json license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.18.2/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.18.2/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/toml.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding/toml.dep.yml index 8a687976549..c7ab22d70e8 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/toml.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding/toml.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding/toml -version: v1.17.0 +version: v1.18.2 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/toml license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.18.2/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.18.2/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/yaml.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding/yaml.dep.yml index 25216cd35a9..de47dbccb08 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/yaml.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding/yaml.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding/yaml -version: v1.17.0 +version: v1.18.2 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/yaml license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.18.2/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.18.2/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/features.dep.yml b/.licenses/go/github.com/spf13/viper/internal/features.dep.yml new file mode 100644 index 00000000000..8962a3391e2 --- /dev/null +++ b/.licenses/go/github.com/spf13/viper/internal/features.dep.yml @@ -0,0 +1,34 @@ +--- +name: github.com/spf13/viper/internal/features +version: v1.18.2 +type: go +summary: +homepage: https://pkg.go.dev/github.com/spf13/viper/internal/features +license: mit +licenses: +- sources: viper@v1.18.2/LICENSE + text: |- + The MIT License (MIT) + + Copyright (c) 2014 Steve Francia + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +- sources: viper@v1.18.2/README.md + text: The project is licensed under the [MIT License](LICENSE). +notices: [] diff --git a/.licenses/go/go.bug.st/downloader/v2.dep.yml b/.licenses/go/go.bug.st/downloader/v2.dep.yml index e255579fe5d..7d49aad7226 100644 --- a/.licenses/go/go.bug.st/downloader/v2.dep.yml +++ b/.licenses/go/go.bug.st/downloader/v2.dep.yml @@ -1,6 +1,6 @@ --- name: go.bug.st/downloader/v2 -version: v2.1.1 +version: v2.2.0 type: go summary: homepage: https://pkg.go.dev/go.bug.st/downloader/v2 diff --git a/.licenses/go/go.bug.st/relaxed-semver.dep.yml b/.licenses/go/go.bug.st/relaxed-semver.dep.yml index 42e7ce72caf..6a4349bf119 100644 --- a/.licenses/go/go.bug.st/relaxed-semver.dep.yml +++ b/.licenses/go/go.bug.st/relaxed-semver.dep.yml @@ -1,6 +1,6 @@ --- name: go.bug.st/relaxed-semver -version: v0.11.0 +version: v0.12.0 type: go summary: homepage: https://pkg.go.dev/go.bug.st/relaxed-semver diff --git a/.licenses/go/golang.org/x/crypto/argon2.dep.yml b/.licenses/go/golang.org/x/crypto/argon2.dep.yml index 26cb05b88c0..70e763cf6f0 100644 --- a/.licenses/go/golang.org/x/crypto/argon2.dep.yml +++ b/.licenses/go/golang.org/x/crypto/argon2.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/crypto/argon2 -version: v0.14.0 +version: v0.21.0 type: go summary: Package argon2 implements the key derivation function Argon2. homepage: https://pkg.go.dev/golang.org/x/crypto/argon2 license: other licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.21.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.21.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/blake2b.dep.yml b/.licenses/go/golang.org/x/crypto/blake2b.dep.yml index 35cc490981d..a14bb4cdd7f 100644 --- a/.licenses/go/golang.org/x/crypto/blake2b.dep.yml +++ b/.licenses/go/golang.org/x/crypto/blake2b.dep.yml @@ -1,13 +1,13 @@ --- name: golang.org/x/crypto/blake2b -version: v0.14.0 +version: v0.21.0 type: go summary: Package blake2b implements the BLAKE2b hash algorithm defined by RFC 7693 and the extendable output function (XOF) BLAKE2Xb. homepage: https://pkg.go.dev/golang.org/x/crypto/blake2b license: other licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.21.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.21.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/blowfish.dep.yml b/.licenses/go/golang.org/x/crypto/blowfish.dep.yml index 673b5ea2756..3a2b36d4834 100644 --- a/.licenses/go/golang.org/x/crypto/blowfish.dep.yml +++ b/.licenses/go/golang.org/x/crypto/blowfish.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/crypto/blowfish -version: v0.14.0 +version: v0.21.0 type: go summary: Package blowfish implements Bruce Schneier's Blowfish encryption algorithm. homepage: https://pkg.go.dev/golang.org/x/crypto/blowfish license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.21.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.21.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/cast5.dep.yml b/.licenses/go/golang.org/x/crypto/cast5.dep.yml index cc24bc1f555..04ad057a302 100644 --- a/.licenses/go/golang.org/x/crypto/cast5.dep.yml +++ b/.licenses/go/golang.org/x/crypto/cast5.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/crypto/cast5 -version: v0.14.0 +version: v0.21.0 type: go summary: Package cast5 implements CAST5, as defined in RFC 2144. homepage: https://pkg.go.dev/golang.org/x/crypto/cast5 license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.21.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.21.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/curve25519.dep.yml b/.licenses/go/golang.org/x/crypto/curve25519.dep.yml index 6904f20a20c..85e104a9271 100644 --- a/.licenses/go/golang.org/x/crypto/curve25519.dep.yml +++ b/.licenses/go/golang.org/x/crypto/curve25519.dep.yml @@ -1,13 +1,13 @@ --- name: golang.org/x/crypto/curve25519 -version: v0.14.0 +version: v0.21.0 type: go summary: Package curve25519 provides an implementation of the X25519 function, which performs scalar multiplication on the elliptic curve known as Curve25519. homepage: https://pkg.go.dev/golang.org/x/crypto/curve25519 license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.21.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.21.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/sha3.dep.yml b/.licenses/go/golang.org/x/crypto/sha3.dep.yml index 8eb9022dbe5..8b5ba7e34f4 100644 --- a/.licenses/go/golang.org/x/crypto/sha3.dep.yml +++ b/.licenses/go/golang.org/x/crypto/sha3.dep.yml @@ -1,13 +1,13 @@ --- name: golang.org/x/crypto/sha3 -version: v0.14.0 +version: v0.21.0 type: go summary: Package sha3 implements the SHA-3 fixed-output-length hash functions and the SHAKE variable-output-length hash functions defined by FIPS-202. homepage: https://pkg.go.dev/golang.org/x/crypto/sha3 license: other licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.21.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.21.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/ssh.dep.yml b/.licenses/go/golang.org/x/crypto/ssh.dep.yml index 1c44d2ffcd5..a566b1e0967 100644 --- a/.licenses/go/golang.org/x/crypto/ssh.dep.yml +++ b/.licenses/go/golang.org/x/crypto/ssh.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/crypto/ssh -version: v0.14.0 +version: v0.21.0 type: go summary: Package ssh implements an SSH client and server. homepage: https://pkg.go.dev/golang.org/x/crypto/ssh license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.21.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.21.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/ssh/agent.dep.yml b/.licenses/go/golang.org/x/crypto/ssh/agent.dep.yml index f6d974982aa..b002052086f 100644 --- a/.licenses/go/golang.org/x/crypto/ssh/agent.dep.yml +++ b/.licenses/go/golang.org/x/crypto/ssh/agent.dep.yml @@ -1,13 +1,13 @@ --- name: golang.org/x/crypto/ssh/agent -version: v0.14.0 +version: v0.21.0 type: go summary: Package agent implements the ssh-agent protocol, and provides both a client and a server. homepage: https://pkg.go.dev/golang.org/x/crypto/ssh/agent license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.21.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.21.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf.dep.yml b/.licenses/go/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf.dep.yml index d1df2f193ee..a3246603198 100644 --- a/.licenses/go/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf.dep.yml +++ b/.licenses/go/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/crypto/ssh/internal/bcrypt_pbkdf -version: v0.14.0 +version: v0.21.0 type: go summary: Package bcrypt_pbkdf implements bcrypt_pbkdf(3) from OpenBSD. homepage: https://pkg.go.dev/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.21.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.21.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/ssh/knownhosts.dep.yml b/.licenses/go/golang.org/x/crypto/ssh/knownhosts.dep.yml index c214063f85f..2bcd466e743 100644 --- a/.licenses/go/golang.org/x/crypto/ssh/knownhosts.dep.yml +++ b/.licenses/go/golang.org/x/crypto/ssh/knownhosts.dep.yml @@ -1,6 +1,6 @@ --- name: golang.org/x/crypto/ssh/knownhosts -version: v0.14.0 +version: v0.21.0 type: go summary: Package knownhosts implements a parser for the OpenSSH known_hosts host key database, and provides utility functions for writing OpenSSH compliant known_hosts @@ -8,7 +8,7 @@ summary: Package knownhosts implements a parser for the OpenSSH known_hosts host homepage: https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.21.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -37,7 +37,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.21.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/context.dep.yml b/.licenses/go/golang.org/x/net/context.dep.yml index b23d53b3a73..ef0ab89847f 100644 --- a/.licenses/go/golang.org/x/net/context.dep.yml +++ b/.licenses/go/golang.org/x/net/context.dep.yml @@ -1,13 +1,13 @@ --- name: golang.org/x/net/context -version: v0.17.0 +version: v0.23.0 type: go summary: Package context defines the Context type, which carries deadlines, cancelation signals, and other request-scoped values across API boundaries and between processes. homepage: https://pkg.go.dev/golang.org/x/net/context license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.23.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.23.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/http2.dep.yml b/.licenses/go/golang.org/x/net/http2.dep.yml index a6c91378197..79cad6638fd 100644 --- a/.licenses/go/golang.org/x/net/http2.dep.yml +++ b/.licenses/go/golang.org/x/net/http2.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/net/http2 -version: v0.17.0 +version: v0.23.0 type: go summary: Package http2 implements the HTTP/2 protocol. homepage: https://pkg.go.dev/golang.org/x/net/http2 license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.23.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.23.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/internal/socks.dep.yml b/.licenses/go/golang.org/x/net/internal/socks.dep.yml index ddb35768373..80781a17411 100644 --- a/.licenses/go/golang.org/x/net/internal/socks.dep.yml +++ b/.licenses/go/golang.org/x/net/internal/socks.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/net/internal/socks -version: v0.17.0 +version: v0.23.0 type: go summary: Package socks provides a SOCKS version 5 client implementation. homepage: https://pkg.go.dev/golang.org/x/net/internal/socks license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.23.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.23.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/internal/timeseries.dep.yml b/.licenses/go/golang.org/x/net/internal/timeseries.dep.yml index 061490104e4..25b0bc46372 100644 --- a/.licenses/go/golang.org/x/net/internal/timeseries.dep.yml +++ b/.licenses/go/golang.org/x/net/internal/timeseries.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/net/internal/timeseries -version: v0.17.0 +version: v0.23.0 type: go summary: Package timeseries implements a time series structure for stats collection. homepage: https://pkg.go.dev/golang.org/x/net/internal/timeseries license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.23.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.23.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/proxy.dep.yml b/.licenses/go/golang.org/x/net/proxy.dep.yml index 59c34c05487..b2906705fed 100644 --- a/.licenses/go/golang.org/x/net/proxy.dep.yml +++ b/.licenses/go/golang.org/x/net/proxy.dep.yml @@ -1,13 +1,13 @@ --- name: golang.org/x/net/proxy -version: v0.17.0 +version: v0.23.0 type: go summary: Package proxy provides support for a variety of protocols to proxy network data. homepage: https://pkg.go.dev/golang.org/x/net/proxy license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.23.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.23.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/trace.dep.yml b/.licenses/go/golang.org/x/net/trace.dep.yml index 193ba90548d..6286e35273b 100644 --- a/.licenses/go/golang.org/x/net/trace.dep.yml +++ b/.licenses/go/golang.org/x/net/trace.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/net/trace -version: v0.17.0 +version: v0.23.0 type: go summary: Package trace implements tracing of requests and long-lived objects. homepage: https://pkg.go.dev/golang.org/x/net/trace license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.23.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.23.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/sys/execabs.dep.yml b/.licenses/go/golang.org/x/sys/execabs.dep.yml index e5a8d9ee689..d96bc981bfa 100644 --- a/.licenses/go/golang.org/x/sys/execabs.dep.yml +++ b/.licenses/go/golang.org/x/sys/execabs.dep.yml @@ -1,13 +1,13 @@ --- name: golang.org/x/sys/execabs -version: v0.13.0 +version: v0.20.0 type: go summary: Package execabs is a drop-in replacement for os/exec that requires PATH lookups to find absolute paths. homepage: https://pkg.go.dev/golang.org/x/sys/execabs license: other licenses: -- sources: sys@v0.13.0/LICENSE +- sources: sys@v0.20.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: sys@v0.13.0/PATENTS +- sources: sys@v0.20.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/sys/unix.dep.yml b/.licenses/go/golang.org/x/sys/unix.dep.yml index 06b6e11b31f..8c6dd955b88 100644 --- a/.licenses/go/golang.org/x/sys/unix.dep.yml +++ b/.licenses/go/golang.org/x/sys/unix.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/sys/unix -version: v0.13.0 +version: v0.20.0 type: go summary: Package unix contains an interface to the low-level operating system primitives. homepage: https://pkg.go.dev/golang.org/x/sys/unix license: bsd-3-clause licenses: -- sources: sys@v0.13.0/LICENSE +- sources: sys@v0.20.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: sys@v0.13.0/PATENTS +- sources: sys@v0.20.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/term.dep.yml b/.licenses/go/golang.org/x/term.dep.yml index c78b0fd1456..1e692160978 100644 --- a/.licenses/go/golang.org/x/term.dep.yml +++ b/.licenses/go/golang.org/x/term.dep.yml @@ -1,6 +1,6 @@ --- name: golang.org/x/term -version: v0.13.0 +version: v0.20.0 type: go summary: Package term provides support functions for dealing with terminals, as commonly found on UNIX systems. diff --git a/.licenses/go/golang.org/x/text/encoding.dep.yml b/.licenses/go/golang.org/x/text/encoding.dep.yml index d2e3fb48b23..4d9a673afe7 100644 --- a/.licenses/go/golang.org/x/text/encoding.dep.yml +++ b/.licenses/go/golang.org/x/text/encoding.dep.yml @@ -1,13 +1,13 @@ --- name: golang.org/x/text/encoding -version: v0.13.0 +version: v0.15.0 type: go summary: Package encoding defines an interface for character encodings, such as Shift JIS and Windows 1252, that can convert to and from UTF-8. homepage: https://pkg.go.dev/golang.org/x/text/encoding license: other licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.15.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.15.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/text/encoding/internal.dep.yml b/.licenses/go/golang.org/x/text/encoding/internal.dep.yml index fff514e79bc..b216fbb89dd 100644 --- a/.licenses/go/golang.org/x/text/encoding/internal.dep.yml +++ b/.licenses/go/golang.org/x/text/encoding/internal.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/text/encoding/internal -version: v0.13.0 +version: v0.15.0 type: go summary: Package internal contains code that is shared among encoding implementations. homepage: https://pkg.go.dev/golang.org/x/text/encoding/internal license: other licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.15.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.15.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/text/encoding/internal/identifier.dep.yml b/.licenses/go/golang.org/x/text/encoding/internal/identifier.dep.yml index 1e12ad752a9..ed15c2844fe 100644 --- a/.licenses/go/golang.org/x/text/encoding/internal/identifier.dep.yml +++ b/.licenses/go/golang.org/x/text/encoding/internal/identifier.dep.yml @@ -1,6 +1,6 @@ --- name: golang.org/x/text/encoding/internal/identifier -version: v0.13.0 +version: v0.15.0 type: go summary: Package identifier defines the contract between implementations of Encoding and Index by defining identifiers that uniquely identify standardized coded character @@ -10,7 +10,7 @@ summary: Package identifier defines the contract between implementations of Enco homepage: https://pkg.go.dev/golang.org/x/text/encoding/internal/identifier license: other licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.15.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -39,7 +39,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.15.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/text/encoding/unicode.dep.yml b/.licenses/go/golang.org/x/text/encoding/unicode.dep.yml index a8bdcffd4db..e3c2821ff56 100644 --- a/.licenses/go/golang.org/x/text/encoding/unicode.dep.yml +++ b/.licenses/go/golang.org/x/text/encoding/unicode.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/text/encoding/unicode -version: v0.13.0 +version: v0.15.0 type: go summary: Package unicode provides Unicode encodings such as UTF-16. homepage: https://pkg.go.dev/golang.org/x/text/encoding/unicode license: other licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.15.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.15.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/text/internal/utf8internal.dep.yml b/.licenses/go/golang.org/x/text/internal/utf8internal.dep.yml index 7e7335344e0..db95a791f6d 100644 --- a/.licenses/go/golang.org/x/text/internal/utf8internal.dep.yml +++ b/.licenses/go/golang.org/x/text/internal/utf8internal.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/text/internal/utf8internal -version: v0.13.0 +version: v0.15.0 type: go summary: Package utf8internal contains low-level utf8-related constants, tables, etc. homepage: https://pkg.go.dev/golang.org/x/text/internal/utf8internal license: other licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.15.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.15.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/text/runes.dep.yml b/.licenses/go/golang.org/x/text/runes.dep.yml index ebf8c20b2f5..aec13555120 100644 --- a/.licenses/go/golang.org/x/text/runes.dep.yml +++ b/.licenses/go/golang.org/x/text/runes.dep.yml @@ -1,12 +1,12 @@ --- name: golang.org/x/text/runes -version: v0.13.0 +version: v0.15.0 type: go summary: Package runes provide transforms for UTF-8 encoded text. homepage: https://pkg.go.dev/golang.org/x/text/runes license: bsd-3-clause licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.15.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.15.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/genproto/googleapis/rpc/status.dep.yml b/.licenses/go/google.golang.org/genproto/googleapis/rpc/status.dep.yml index cafd8a3e5fd..39ef8d23cab 100644 --- a/.licenses/go/google.golang.org/genproto/googleapis/rpc/status.dep.yml +++ b/.licenses/go/google.golang.org/genproto/googleapis/rpc/status.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/genproto/googleapis/rpc/status -version: v0.0.0-20231012201019-e917dd12ba7a +version: v0.0.0-20240318140521-94a12d6c2237 type: go summary: homepage: https://pkg.go.dev/google.golang.org/genproto/googleapis/rpc/status license: apache-2.0 licenses: -- sources: rpc@v0.0.0-20231012201019-e917dd12ba7a/LICENSE +- sources: rpc@v0.0.0-20240318140521-94a12d6c2237/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc.dep.yml b/.licenses/go/google.golang.org/grpc.dep.yml index a585fa9a3a0..a67b93376ca 100644 --- a/.licenses/go/google.golang.org/grpc.dep.yml +++ b/.licenses/go/google.golang.org/grpc.dep.yml @@ -1,6 +1,6 @@ --- name: google.golang.org/grpc -version: v1.59.0 +version: v1.64.0 type: go summary: Package grpc implements an RPC system called gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc diff --git a/.licenses/go/google.golang.org/grpc/attributes.dep.yml b/.licenses/go/google.golang.org/grpc/attributes.dep.yml index 9befb12adc6..d5a0d7fe501 100644 --- a/.licenses/go/google.golang.org/grpc/attributes.dep.yml +++ b/.licenses/go/google.golang.org/grpc/attributes.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/attributes -version: v1.59.0 +version: v1.64.0 type: go summary: Package attributes defines a generic key/value store used in various gRPC components. homepage: https://pkg.go.dev/google.golang.org/grpc/attributes license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/backoff.dep.yml b/.licenses/go/google.golang.org/grpc/backoff.dep.yml index 0579efa6c6c..e650cee4e1f 100644 --- a/.licenses/go/google.golang.org/grpc/backoff.dep.yml +++ b/.licenses/go/google.golang.org/grpc/backoff.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/backoff -version: v1.59.0 +version: v1.64.0 type: go summary: Package backoff provides configuration options for backoff. homepage: https://pkg.go.dev/google.golang.org/grpc/backoff license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/balancer.dep.yml b/.licenses/go/google.golang.org/grpc/balancer.dep.yml index 21aec050d2f..129002447a6 100644 --- a/.licenses/go/google.golang.org/grpc/balancer.dep.yml +++ b/.licenses/go/google.golang.org/grpc/balancer.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/balancer -version: v1.59.0 +version: v1.64.0 type: go summary: Package balancer defines APIs for load balancing in gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/balancer license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/balancer/base.dep.yml b/.licenses/go/google.golang.org/grpc/balancer/base.dep.yml index 82f7d5e6dcb..a982c5809db 100644 --- a/.licenses/go/google.golang.org/grpc/balancer/base.dep.yml +++ b/.licenses/go/google.golang.org/grpc/balancer/base.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/balancer/base -version: v1.59.0 +version: v1.64.0 type: go summary: Package base defines a balancer base that can be used to build balancers with different picking algorithms. homepage: https://pkg.go.dev/google.golang.org/grpc/balancer/base license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/balancer/grpclb/state.dep.yml b/.licenses/go/google.golang.org/grpc/balancer/grpclb/state.dep.yml index 420a6707984..8ef5bc02e67 100644 --- a/.licenses/go/google.golang.org/grpc/balancer/grpclb/state.dep.yml +++ b/.licenses/go/google.golang.org/grpc/balancer/grpclb/state.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/balancer/grpclb/state -version: v1.59.0 +version: v1.64.0 type: go summary: Package state declares grpclb types to be set by resolvers wishing to pass information to grpclb via resolver.State Attributes. homepage: https://pkg.go.dev/google.golang.org/grpc/balancer/grpclb/state license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/balancer/roundrobin.dep.yml b/.licenses/go/google.golang.org/grpc/balancer/roundrobin.dep.yml index 3222ed332d4..3aa7bf780fd 100644 --- a/.licenses/go/google.golang.org/grpc/balancer/roundrobin.dep.yml +++ b/.licenses/go/google.golang.org/grpc/balancer/roundrobin.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/balancer/roundrobin -version: v1.59.0 +version: v1.64.0 type: go summary: Package roundrobin defines a roundrobin balancer. homepage: https://pkg.go.dev/google.golang.org/grpc/balancer/roundrobin license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/binarylog/grpc_binarylog_v1.dep.yml b/.licenses/go/google.golang.org/grpc/binarylog/grpc_binarylog_v1.dep.yml index a9a5be3046d..c031a2d9113 100644 --- a/.licenses/go/google.golang.org/grpc/binarylog/grpc_binarylog_v1.dep.yml +++ b/.licenses/go/google.golang.org/grpc/binarylog/grpc_binarylog_v1.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/binarylog/grpc_binarylog_v1 -version: v1.59.0 +version: v1.64.0 type: go summary: homepage: https://pkg.go.dev/google.golang.org/grpc/binarylog/grpc_binarylog_v1 license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/channelz.dep.yml b/.licenses/go/google.golang.org/grpc/channelz.dep.yml index 823fc583aa0..439537a6f78 100644 --- a/.licenses/go/google.golang.org/grpc/channelz.dep.yml +++ b/.licenses/go/google.golang.org/grpc/channelz.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/channelz -version: v1.59.0 +version: v1.64.0 type: go summary: Package channelz exports internals of the channelz implementation as required by other gRPC packages. homepage: https://pkg.go.dev/google.golang.org/grpc/channelz license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/codes.dep.yml b/.licenses/go/google.golang.org/grpc/codes.dep.yml index e87033f466c..d02abf09265 100644 --- a/.licenses/go/google.golang.org/grpc/codes.dep.yml +++ b/.licenses/go/google.golang.org/grpc/codes.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/codes -version: v1.59.0 +version: v1.64.0 type: go summary: Package codes defines the canonical error codes used by gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/codes license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/connectivity.dep.yml b/.licenses/go/google.golang.org/grpc/connectivity.dep.yml index 7efc59fcdb5..efe1d2cb38f 100644 --- a/.licenses/go/google.golang.org/grpc/connectivity.dep.yml +++ b/.licenses/go/google.golang.org/grpc/connectivity.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/connectivity -version: v1.59.0 +version: v1.64.0 type: go summary: Package connectivity defines connectivity semantics. homepage: https://pkg.go.dev/google.golang.org/grpc/connectivity license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/credentials.dep.yml b/.licenses/go/google.golang.org/grpc/credentials.dep.yml index 70c2e9d2a41..571cbde0b29 100644 --- a/.licenses/go/google.golang.org/grpc/credentials.dep.yml +++ b/.licenses/go/google.golang.org/grpc/credentials.dep.yml @@ -1,6 +1,6 @@ --- name: google.golang.org/grpc/credentials -version: v1.59.0 +version: v1.64.0 type: go summary: Package credentials implements various credentials supported by gRPC library, which encapsulate all the state needed by a client to authenticate with a server @@ -9,7 +9,7 @@ summary: Package credentials implements various credentials supported by gRPC li homepage: https://pkg.go.dev/google.golang.org/grpc/credentials license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/credentials/insecure.dep.yml b/.licenses/go/google.golang.org/grpc/credentials/insecure.dep.yml index c057209b0ba..94f2ea13d4f 100644 --- a/.licenses/go/google.golang.org/grpc/credentials/insecure.dep.yml +++ b/.licenses/go/google.golang.org/grpc/credentials/insecure.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/credentials/insecure -version: v1.59.0 +version: v1.64.0 type: go summary: Package insecure provides an implementation of the credentials.TransportCredentials interface which disables transport security. homepage: https://pkg.go.dev/google.golang.org/grpc/credentials/insecure license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/encoding.dep.yml b/.licenses/go/google.golang.org/grpc/encoding.dep.yml index a564ded5aba..56ad90afee7 100644 --- a/.licenses/go/google.golang.org/grpc/encoding.dep.yml +++ b/.licenses/go/google.golang.org/grpc/encoding.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/encoding -version: v1.59.0 +version: v1.64.0 type: go summary: Package encoding defines the interface for the compressor and codec, and functions to register and retrieve compressors and codecs. homepage: https://pkg.go.dev/google.golang.org/grpc/encoding license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/encoding/proto.dep.yml b/.licenses/go/google.golang.org/grpc/encoding/proto.dep.yml index cb57fd8dac0..d4e7e06705a 100644 --- a/.licenses/go/google.golang.org/grpc/encoding/proto.dep.yml +++ b/.licenses/go/google.golang.org/grpc/encoding/proto.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/encoding/proto -version: v1.59.0 +version: v1.64.0 type: go summary: Package proto defines the protobuf codec. homepage: https://pkg.go.dev/google.golang.org/grpc/encoding/proto license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/grpclog.dep.yml b/.licenses/go/google.golang.org/grpc/grpclog.dep.yml index 00cdc22eaf5..3dd10072753 100644 --- a/.licenses/go/google.golang.org/grpc/grpclog.dep.yml +++ b/.licenses/go/google.golang.org/grpc/grpclog.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/grpclog -version: v1.59.0 +version: v1.64.0 type: go summary: Package grpclog defines logging for grpc. homepage: https://pkg.go.dev/google.golang.org/grpc/grpclog license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal.dep.yml b/.licenses/go/google.golang.org/grpc/internal.dep.yml index 2dded8fecfd..a181f934a6e 100644 --- a/.licenses/go/google.golang.org/grpc/internal.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal -version: v1.59.0 +version: v1.64.0 type: go summary: Package internal contains gRPC-internal code, to avoid polluting the godoc of the top-level grpc package. homepage: https://pkg.go.dev/google.golang.org/grpc/internal license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/backoff.dep.yml b/.licenses/go/google.golang.org/grpc/internal/backoff.dep.yml index 0b758f3d550..a42fc10226f 100644 --- a/.licenses/go/google.golang.org/grpc/internal/backoff.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/backoff.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/backoff -version: v1.59.0 +version: v1.64.0 type: go summary: Package backoff implement the backoff strategy for gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/backoff license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/balancer/gracefulswitch.dep.yml b/.licenses/go/google.golang.org/grpc/internal/balancer/gracefulswitch.dep.yml index 90492543967..34734fdd910 100644 --- a/.licenses/go/google.golang.org/grpc/internal/balancer/gracefulswitch.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/balancer/gracefulswitch.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/balancer/gracefulswitch -version: v1.59.0 +version: v1.64.0 type: go summary: Package gracefulswitch implements a graceful switch load balancer. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/balancer/gracefulswitch license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/balancerload.dep.yml b/.licenses/go/google.golang.org/grpc/internal/balancerload.dep.yml index e26ecfae4ca..51cfa9f0c78 100644 --- a/.licenses/go/google.golang.org/grpc/internal/balancerload.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/balancerload.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/balancerload -version: v1.59.0 +version: v1.64.0 type: go summary: Package balancerload defines APIs to parse server loads in trailers. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/balancerload license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/binarylog.dep.yml b/.licenses/go/google.golang.org/grpc/internal/binarylog.dep.yml index 10d9ce6506a..24ab72cde06 100644 --- a/.licenses/go/google.golang.org/grpc/internal/binarylog.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/binarylog.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/binarylog -version: v1.59.0 +version: v1.64.0 type: go summary: Package binarylog implementation binary logging as defined in https://github.com/grpc/proposal/blob/master/A16-binary-logging.md. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/binarylog license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/buffer.dep.yml b/.licenses/go/google.golang.org/grpc/internal/buffer.dep.yml index e7e9b96d2b0..eff84fe64bb 100644 --- a/.licenses/go/google.golang.org/grpc/internal/buffer.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/buffer.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/buffer -version: v1.59.0 +version: v1.64.0 type: go summary: Package buffer provides an implementation of an unbounded buffer. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/buffer license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/channelz.dep.yml b/.licenses/go/google.golang.org/grpc/internal/channelz.dep.yml index e362f694600..e81e03a8e7d 100644 --- a/.licenses/go/google.golang.org/grpc/internal/channelz.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/channelz.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/channelz -version: v1.59.0 +version: v1.64.0 type: go -summary: Package channelz defines APIs for enabling channelz service, entry registration/deletion, - and accessing channelz data. +summary: Package channelz defines internal APIs for enabling channelz service, entry + registration/deletion, and accessing channelz data. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/channelz license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/credentials.dep.yml b/.licenses/go/google.golang.org/grpc/internal/credentials.dep.yml index 9e96e53fa62..0370966a4fa 100644 --- a/.licenses/go/google.golang.org/grpc/internal/credentials.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/credentials.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/credentials -version: v1.59.0 +version: v1.64.0 type: go summary: Package credentials defines APIs for parsing SPIFFE ID. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/credentials license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/envconfig.dep.yml b/.licenses/go/google.golang.org/grpc/internal/envconfig.dep.yml index 5bd2910a7c1..b046eaa6041 100644 --- a/.licenses/go/google.golang.org/grpc/internal/envconfig.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/envconfig.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/envconfig -version: v1.59.0 +version: v1.64.0 type: go summary: Package envconfig contains grpc settings configured by environment variables. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/envconfig license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/grpclog.dep.yml b/.licenses/go/google.golang.org/grpc/internal/grpclog.dep.yml index 06459070b61..01c0438d179 100644 --- a/.licenses/go/google.golang.org/grpc/internal/grpclog.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/grpclog.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/grpclog -version: v1.59.0 +version: v1.64.0 type: go summary: Package grpclog (internal) defines depth logging for grpc. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/grpclog license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/grpcrand.dep.yml b/.licenses/go/google.golang.org/grpc/internal/grpcrand.dep.yml index 5c3ef087218..63a4e8275e9 100644 --- a/.licenses/go/google.golang.org/grpc/internal/grpcrand.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/grpcrand.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/grpcrand -version: v1.59.0 +version: v1.64.0 type: go summary: Package grpcrand implements math/rand functions in a concurrent-safe way with a global random source, independent of math/rand's global source. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/grpcrand license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/grpcsync.dep.yml b/.licenses/go/google.golang.org/grpc/internal/grpcsync.dep.yml index 6172b356dbd..d2c371c0850 100644 --- a/.licenses/go/google.golang.org/grpc/internal/grpcsync.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/grpcsync.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/grpcsync -version: v1.59.0 +version: v1.64.0 type: go summary: Package grpcsync implements additional synchronization primitives built upon the sync package. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/grpcsync license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/grpcutil.dep.yml b/.licenses/go/google.golang.org/grpc/internal/grpcutil.dep.yml index 0b2e60035cb..49fc63e508c 100644 --- a/.licenses/go/google.golang.org/grpc/internal/grpcutil.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/grpcutil.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/grpcutil -version: v1.59.0 +version: v1.64.0 type: go summary: Package grpcutil provides utility functions used across the gRPC codebase. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/grpcutil license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/idle.dep.yml b/.licenses/go/google.golang.org/grpc/internal/idle.dep.yml index 690a1350553..0fed46f0982 100644 --- a/.licenses/go/google.golang.org/grpc/internal/idle.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/idle.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/idle -version: v1.59.0 +version: v1.64.0 type: go summary: Package idle contains a component for managing idleness (entering and exiting) based on RPC activity. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/idle license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/metadata.dep.yml b/.licenses/go/google.golang.org/grpc/internal/metadata.dep.yml index ee678ec0a75..253e33632f6 100644 --- a/.licenses/go/google.golang.org/grpc/internal/metadata.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/metadata.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/metadata -version: v1.59.0 +version: v1.64.0 type: go summary: Package metadata contains functions to set and get metadata from addresses. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/metadata license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/pretty.dep.yml b/.licenses/go/google.golang.org/grpc/internal/pretty.dep.yml index 4f482986881..05f9d0891a2 100644 --- a/.licenses/go/google.golang.org/grpc/internal/pretty.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/pretty.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/pretty -version: v1.59.0 +version: v1.64.0 type: go summary: Package pretty defines helper functions to pretty-print structs for logging. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/pretty license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/resolver.dep.yml b/.licenses/go/google.golang.org/grpc/internal/resolver.dep.yml index 8e7d86e8c71..08be9f23a58 100644 --- a/.licenses/go/google.golang.org/grpc/internal/resolver.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/resolver.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/resolver -version: v1.59.0 +version: v1.64.0 type: go summary: Package resolver provides internal resolver-related functionality. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/resolver license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/resolver/dns.dep.yml b/.licenses/go/google.golang.org/grpc/internal/resolver/dns.dep.yml index a22edaca46a..fd2627083cb 100644 --- a/.licenses/go/google.golang.org/grpc/internal/resolver/dns.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/resolver/dns.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/resolver/dns -version: v1.59.0 +version: v1.64.0 type: go summary: Package dns implements a dns resolver to be installed as the default resolver in grpc. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/resolver/dns license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/resolver/dns/internal.dep.yml b/.licenses/go/google.golang.org/grpc/internal/resolver/dns/internal.dep.yml new file mode 100644 index 00000000000..1ef000f158a --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/internal/resolver/dns/internal.dep.yml @@ -0,0 +1,213 @@ +--- +name: google.golang.org/grpc/internal/resolver/dns/internal +version: v1.64.0 +type: go +summary: Package internal contains functionality internal to the dns resolver package. +homepage: https://pkg.go.dev/google.golang.org/grpc/internal/resolver/dns/internal +license: apache-2.0 +licenses: +- sources: grpc@v1.64.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/internal/resolver/passthrough.dep.yml b/.licenses/go/google.golang.org/grpc/internal/resolver/passthrough.dep.yml index e4539c2ed72..ca5e8984cf1 100644 --- a/.licenses/go/google.golang.org/grpc/internal/resolver/passthrough.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/resolver/passthrough.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/resolver/passthrough -version: v1.59.0 +version: v1.64.0 type: go summary: Package passthrough implements a pass-through resolver. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/resolver/passthrough license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/resolver/unix.dep.yml b/.licenses/go/google.golang.org/grpc/internal/resolver/unix.dep.yml index c0497dc623e..6acc344f708 100644 --- a/.licenses/go/google.golang.org/grpc/internal/resolver/unix.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/resolver/unix.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/resolver/unix -version: v1.59.0 +version: v1.64.0 type: go summary: Package unix implements a resolver for unix targets. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/resolver/unix license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/serviceconfig.dep.yml b/.licenses/go/google.golang.org/grpc/internal/serviceconfig.dep.yml index d48a818cd11..94e768671d6 100644 --- a/.licenses/go/google.golang.org/grpc/internal/serviceconfig.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/serviceconfig.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/serviceconfig -version: v1.59.0 +version: v1.64.0 type: go summary: Package serviceconfig contains utility functions to parse service config. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/serviceconfig license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/status.dep.yml b/.licenses/go/google.golang.org/grpc/internal/status.dep.yml index b9e184fb3f1..254ebb52339 100644 --- a/.licenses/go/google.golang.org/grpc/internal/status.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/status.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/status -version: v1.59.0 +version: v1.64.0 type: go summary: Package status implements errors returned by gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/status license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/syscall.dep.yml b/.licenses/go/google.golang.org/grpc/internal/syscall.dep.yml index 9669ed849d3..bb7931aba56 100644 --- a/.licenses/go/google.golang.org/grpc/internal/syscall.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/syscall.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/syscall -version: v1.59.0 +version: v1.64.0 type: go summary: Package syscall provides functionalities that grpc uses to get low-level operating system stats/info. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/syscall license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/transport.dep.yml b/.licenses/go/google.golang.org/grpc/internal/transport.dep.yml index 5dfe7fa30cb..b8c8533ec3a 100644 --- a/.licenses/go/google.golang.org/grpc/internal/transport.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/transport.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/transport -version: v1.59.0 +version: v1.64.0 type: go summary: Package transport defines and implements message oriented communication channel to complete various transactions (e.g., an RPC). homepage: https://pkg.go.dev/google.golang.org/grpc/internal/transport license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/transport/networktype.dep.yml b/.licenses/go/google.golang.org/grpc/internal/transport/networktype.dep.yml index 348fb4cc16e..f5706613bf9 100644 --- a/.licenses/go/google.golang.org/grpc/internal/transport/networktype.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/transport/networktype.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/transport/networktype -version: v1.59.0 +version: v1.64.0 type: go summary: Package networktype declares the network type to be used in the default dialer. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/transport/networktype license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/keepalive.dep.yml b/.licenses/go/google.golang.org/grpc/keepalive.dep.yml index 38e15142618..c15171ea00c 100644 --- a/.licenses/go/google.golang.org/grpc/keepalive.dep.yml +++ b/.licenses/go/google.golang.org/grpc/keepalive.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/keepalive -version: v1.59.0 +version: v1.64.0 type: go summary: Package keepalive defines configurable parameters for point-to-point healthcheck. homepage: https://pkg.go.dev/google.golang.org/grpc/keepalive license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/metadata.dep.yml b/.licenses/go/google.golang.org/grpc/metadata.dep.yml index a83c4b25c6e..8d916439d89 100644 --- a/.licenses/go/google.golang.org/grpc/metadata.dep.yml +++ b/.licenses/go/google.golang.org/grpc/metadata.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/metadata -version: v1.59.0 +version: v1.64.0 type: go summary: Package metadata define the structure of the metadata supported by gRPC library. homepage: https://pkg.go.dev/google.golang.org/grpc/metadata license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/peer.dep.yml b/.licenses/go/google.golang.org/grpc/peer.dep.yml index b714097e75f..bedaa82f60a 100644 --- a/.licenses/go/google.golang.org/grpc/peer.dep.yml +++ b/.licenses/go/google.golang.org/grpc/peer.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/peer -version: v1.59.0 +version: v1.64.0 type: go summary: Package peer defines various peer information associated with RPCs and corresponding utils. homepage: https://pkg.go.dev/google.golang.org/grpc/peer license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/resolver.dep.yml b/.licenses/go/google.golang.org/grpc/resolver.dep.yml index 31a507d9d11..45b14380176 100644 --- a/.licenses/go/google.golang.org/grpc/resolver.dep.yml +++ b/.licenses/go/google.golang.org/grpc/resolver.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/resolver -version: v1.59.0 +version: v1.64.0 type: go summary: Package resolver defines APIs for name resolution in gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/resolver license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/resolver/dns.dep.yml b/.licenses/go/google.golang.org/grpc/resolver/dns.dep.yml new file mode 100644 index 00000000000..50b963dc020 --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/resolver/dns.dep.yml @@ -0,0 +1,214 @@ +--- +name: google.golang.org/grpc/resolver/dns +version: v1.64.0 +type: go +summary: Package dns implements a dns resolver to be installed as the default resolver + in grpc. +homepage: https://pkg.go.dev/google.golang.org/grpc/resolver/dns +license: apache-2.0 +licenses: +- sources: grpc@v1.64.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/serviceconfig.dep.yml b/.licenses/go/google.golang.org/grpc/serviceconfig.dep.yml index 4f4f6774fa1..3bb21af97ef 100644 --- a/.licenses/go/google.golang.org/grpc/serviceconfig.dep.yml +++ b/.licenses/go/google.golang.org/grpc/serviceconfig.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/serviceconfig -version: v1.59.0 +version: v1.64.0 type: go summary: Package serviceconfig defines types and methods for operating on gRPC service configs. homepage: https://pkg.go.dev/google.golang.org/grpc/serviceconfig license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/stats.dep.yml b/.licenses/go/google.golang.org/grpc/stats.dep.yml index 105008978f3..7248d8ed704 100644 --- a/.licenses/go/google.golang.org/grpc/stats.dep.yml +++ b/.licenses/go/google.golang.org/grpc/stats.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/stats -version: v1.59.0 +version: v1.64.0 type: go summary: Package stats is for collecting and reporting various network and RPC stats. homepage: https://pkg.go.dev/google.golang.org/grpc/stats license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/status.dep.yml b/.licenses/go/google.golang.org/grpc/status.dep.yml index f480312b8db..059f7d0308c 100644 --- a/.licenses/go/google.golang.org/grpc/status.dep.yml +++ b/.licenses/go/google.golang.org/grpc/status.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/status -version: v1.59.0 +version: v1.64.0 type: go summary: Package status implements errors returned by gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/status license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/tap.dep.yml b/.licenses/go/google.golang.org/grpc/tap.dep.yml index 027c333b0c2..0aa6d66e246 100644 --- a/.licenses/go/google.golang.org/grpc/tap.dep.yml +++ b/.licenses/go/google.golang.org/grpc/tap.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/tap -version: v1.59.0 +version: v1.64.0 type: go summary: Package tap defines the function handles which are executed on the transport layer of gRPC-Go and related information. homepage: https://pkg.go.dev/google.golang.org/grpc/tap license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.64.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/protobuf/encoding/protojson.dep.yml b/.licenses/go/google.golang.org/protobuf/encoding/protojson.dep.yml index ad959eadc42..9217928c9ef 100644 --- a/.licenses/go/google.golang.org/protobuf/encoding/protojson.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/encoding/protojson.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/encoding/protojson -version: v1.31.0 +version: v1.34.1 type: go summary: Package protojson marshals and unmarshals protocol buffer messages as JSON format. homepage: https://pkg.go.dev/google.golang.org/protobuf/encoding/protojson license: other licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/encoding/prototext.dep.yml b/.licenses/go/google.golang.org/protobuf/encoding/prototext.dep.yml index e68ff674843..e15cfd96242 100644 --- a/.licenses/go/google.golang.org/protobuf/encoding/prototext.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/encoding/prototext.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/encoding/prototext -version: v1.31.0 +version: v1.34.1 type: go summary: Package prototext marshals and unmarshals protocol buffer messages as the textproto format. homepage: https://pkg.go.dev/google.golang.org/protobuf/encoding/prototext license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/encoding/protowire.dep.yml b/.licenses/go/google.golang.org/protobuf/encoding/protowire.dep.yml index 92450adf2dc..d935d1df67c 100644 --- a/.licenses/go/google.golang.org/protobuf/encoding/protowire.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/encoding/protowire.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/encoding/protowire -version: v1.31.0 +version: v1.34.1 type: go summary: Package protowire parses and formats the raw wire encoding. homepage: https://pkg.go.dev/google.golang.org/protobuf/encoding/protowire license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/descfmt.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/descfmt.dep.yml index 1ec4ed0a132..dbeab8d9303 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/descfmt.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/descfmt.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/descfmt -version: v1.31.0 +version: v1.34.1 type: go summary: Package descfmt provides functionality to format descriptors. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/descfmt license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/descopts.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/descopts.dep.yml index e158e422e97..bfa250407e3 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/descopts.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/descopts.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/descopts -version: v1.31.0 +version: v1.34.1 type: go summary: Package descopts contains the nil pointers to concrete descriptor options. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/descopts license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/detrand.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/detrand.dep.yml index 5a3ce24f021..1b4a97a555d 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/detrand.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/detrand.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/detrand -version: v1.31.0 +version: v1.34.1 type: go summary: Package detrand provides deterministically random functionality. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/detrand license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/reflect/protodesc.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/editiondefaults.dep.yml similarity index 89% rename from .licenses/go/google.golang.org/protobuf/reflect/protodesc.dep.yml rename to .licenses/go/google.golang.org/protobuf/internal/editiondefaults.dep.yml index 91aff701f2f..65cfe030690 100644 --- a/.licenses/go/google.golang.org/protobuf/reflect/protodesc.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/editiondefaults.dep.yml @@ -1,13 +1,13 @@ --- -name: google.golang.org/protobuf/reflect/protodesc -version: v1.31.0 +name: google.golang.org/protobuf/internal/editiondefaults +version: v1.34.1 type: go -summary: Package protodesc provides functionality for converting FileDescriptorProto - messages to/from protoreflect.FileDescriptor values. -homepage: https://pkg.go.dev/google.golang.org/protobuf/reflect/protodesc +summary: Package editiondefaults contains the binary representation of the editions + defaults. +homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/editiondefaults license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/encoding/defval.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/encoding/defval.dep.yml index 5eade23cbeb..bcde818c389 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/encoding/defval.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/encoding/defval.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/encoding/defval -version: v1.31.0 +version: v1.34.1 type: go summary: Package defval marshals and unmarshals textual forms of default values. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/encoding/defval license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/encoding/json.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/encoding/json.dep.yml index c954ebf8ba0..ba65ae97ee7 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/encoding/json.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/encoding/json.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/encoding/json -version: v1.31.0 +version: v1.34.1 type: go summary: homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/encoding/json license: other licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/encoding/messageset.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/encoding/messageset.dep.yml index 894b34a4fb2..8cf22dded57 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/encoding/messageset.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/encoding/messageset.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/encoding/messageset -version: v1.31.0 +version: v1.34.1 type: go summary: Package messageset encodes and decodes the obsolete MessageSet wire format. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/encoding/messageset license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/encoding/tag.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/encoding/tag.dep.yml index f08484b0e27..9026707ad0b 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/encoding/tag.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/encoding/tag.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/internal/encoding/tag -version: v1.31.0 +version: v1.34.1 type: go summary: Package tag marshals and unmarshals the legacy struct tags as generated by historical versions of protoc-gen-go. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/encoding/tag license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/encoding/text.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/encoding/text.dep.yml index f225ea4fb27..a9708de07d2 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/encoding/text.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/encoding/text.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/encoding/text -version: v1.31.0 +version: v1.34.1 type: go summary: Package text implements the text format for protocol buffers. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/encoding/text license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/errors.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/errors.dep.yml index abaf8506d4b..ee63cc3d2ef 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/errors.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/errors.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/errors -version: v1.31.0 +version: v1.34.1 type: go summary: Package errors implements functions to manipulate errors. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/errors license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/filedesc.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/filedesc.dep.yml index 5009e130d84..1bc0bc1c221 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/filedesc.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/filedesc.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/filedesc -version: v1.31.0 +version: v1.34.1 type: go summary: Package filedesc provides functionality for constructing descriptors. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/filedesc license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/filetype.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/filetype.dep.yml index 0bf65708c16..c839cb6b49f 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/filetype.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/filetype.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/internal/filetype -version: v1.31.0 +version: v1.34.1 type: go summary: Package filetype provides functionality for wrapping descriptors with Go type information. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/filetype license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/flags.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/flags.dep.yml index 00b7eb5f67e..4ad5ad85489 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/flags.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/flags.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/flags -version: v1.31.0 +version: v1.34.1 type: go summary: Package flags provides a set of flags controlled by build tags. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/flags license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/genid.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/genid.dep.yml index c7cebaba3b5..74669222b46 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/genid.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/genid.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/internal/genid -version: v1.31.0 +version: v1.34.1 type: go summary: Package genid contains constants for declarations in descriptor.proto and the well-known types. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/genid license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/impl.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/impl.dep.yml index 7d99ece2374..58483233938 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/impl.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/impl.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/impl -version: v1.31.0 +version: v1.34.1 type: go summary: homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/impl license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/order.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/order.dep.yml index 7726c99881d..43e239a6b02 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/order.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/order.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/order -version: v1.31.0 +version: v1.34.1 type: go summary: Package order provides ordered access to messages and maps. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/order license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/pragma.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/pragma.dep.yml index 7dac9ae78a6..b8f4d4e9610 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/pragma.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/pragma.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/internal/pragma -version: v1.31.0 +version: v1.34.1 type: go summary: Package pragma provides types that can be embedded into a struct to statically enforce or prevent certain language properties. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/pragma license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/set.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/set.dep.yml index 12d530a0259..9f59966eb2c 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/set.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/set.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/set -version: v1.31.0 +version: v1.34.1 type: go summary: Package set provides simple set data structures for uint64s. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/set license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/strs.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/strs.dep.yml index 4e22c9344cf..a2137bf6689 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/strs.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/strs.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/strs -version: v1.31.0 +version: v1.34.1 type: go summary: Package strs provides string manipulation functionality specific to protobuf. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/strs license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/version.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/version.dep.yml index eea8da5ecaa..29866ee233b 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/version.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/version.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/version -version: v1.31.0 +version: v1.34.1 type: go summary: Package version records versioning information about this module. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/version license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/proto.dep.yml b/.licenses/go/google.golang.org/protobuf/proto.dep.yml index a898c7fb7d6..bcbae244ea7 100644 --- a/.licenses/go/google.golang.org/protobuf/proto.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/proto.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/proto -version: v1.31.0 +version: v1.34.1 type: go summary: Package proto provides functions operating on protocol buffer messages. homepage: https://pkg.go.dev/google.golang.org/protobuf/proto license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/types/descriptorpb.dep.yml b/.licenses/go/google.golang.org/protobuf/protoadapt.dep.yml similarity index 91% rename from .licenses/go/google.golang.org/protobuf/types/descriptorpb.dep.yml rename to .licenses/go/google.golang.org/protobuf/protoadapt.dep.yml index f3ecffce178..86b283d6478 100644 --- a/.licenses/go/google.golang.org/protobuf/types/descriptorpb.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/protoadapt.dep.yml @@ -1,12 +1,12 @@ --- -name: google.golang.org/protobuf/types/descriptorpb -version: v1.31.0 +name: google.golang.org/protobuf/protoadapt +version: v1.34.1 type: go -summary: -homepage: https://pkg.go.dev/google.golang.org/protobuf/types/descriptorpb +summary: Package protoadapt bridges the original and new proto APIs. +homepage: https://pkg.go.dev/google.golang.org/protobuf/protoadapt license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/reflect/protoreflect.dep.yml b/.licenses/go/google.golang.org/protobuf/reflect/protoreflect.dep.yml index 31c905bac2d..d3829449973 100644 --- a/.licenses/go/google.golang.org/protobuf/reflect/protoreflect.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/reflect/protoreflect.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/reflect/protoreflect -version: v1.31.0 +version: v1.34.1 type: go summary: Package protoreflect provides interfaces to dynamically manipulate messages. homepage: https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/reflect/protoregistry.dep.yml b/.licenses/go/google.golang.org/protobuf/reflect/protoregistry.dep.yml index 15277039f14..737474192c5 100644 --- a/.licenses/go/google.golang.org/protobuf/reflect/protoregistry.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/reflect/protoregistry.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/reflect/protoregistry -version: v1.31.0 +version: v1.34.1 type: go summary: Package protoregistry provides data structures to register and lookup protobuf descriptor types. homepage: https://pkg.go.dev/google.golang.org/protobuf/reflect/protoregistry license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/runtime/protoiface.dep.yml b/.licenses/go/google.golang.org/protobuf/runtime/protoiface.dep.yml index 873b8907e04..559ff53fc12 100644 --- a/.licenses/go/google.golang.org/protobuf/runtime/protoiface.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/runtime/protoiface.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/runtime/protoiface -version: v1.31.0 +version: v1.34.1 type: go summary: Package protoiface contains types referenced or implemented by messages. homepage: https://pkg.go.dev/google.golang.org/protobuf/runtime/protoiface license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/runtime/protoimpl.dep.yml b/.licenses/go/google.golang.org/protobuf/runtime/protoimpl.dep.yml index 3c2c47a3827..7687cce6e2c 100644 --- a/.licenses/go/google.golang.org/protobuf/runtime/protoimpl.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/runtime/protoimpl.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/runtime/protoimpl -version: v1.31.0 +version: v1.34.1 type: go summary: Package protoimpl contains the default implementation for messages generated by protoc-gen-go. homepage: https://pkg.go.dev/google.golang.org/protobuf/runtime/protoimpl license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/types/known/anypb.dep.yml b/.licenses/go/google.golang.org/protobuf/types/known/anypb.dep.yml index 643a25f2da8..c787fffcc90 100644 --- a/.licenses/go/google.golang.org/protobuf/types/known/anypb.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/types/known/anypb.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/types/known/anypb -version: v1.31.0 +version: v1.34.1 type: go summary: Package anypb contains generated types for google/protobuf/any.proto. homepage: https://pkg.go.dev/google.golang.org/protobuf/types/known/anypb license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/types/known/durationpb.dep.yml b/.licenses/go/google.golang.org/protobuf/types/known/durationpb.dep.yml index 062f8b2a28c..461ad3f24fd 100644 --- a/.licenses/go/google.golang.org/protobuf/types/known/durationpb.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/types/known/durationpb.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/types/known/durationpb -version: v1.31.0 +version: v1.34.1 type: go summary: Package durationpb contains generated types for google/protobuf/duration.proto. homepage: https://pkg.go.dev/google.golang.org/protobuf/types/known/durationpb license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/types/known/timestamppb.dep.yml b/.licenses/go/google.golang.org/protobuf/types/known/timestamppb.dep.yml index 0c775ebba63..05124ff5fe4 100644 --- a/.licenses/go/google.golang.org/protobuf/types/known/timestamppb.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/types/known/timestamppb.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/types/known/timestamppb -version: v1.31.0 +version: v1.34.1 type: go summary: Package timestamppb contains generated types for google/protobuf/timestamp.proto. homepage: https://pkg.go.dev/google.golang.org/protobuf/types/known/timestamppb license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.34.1/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.34.1/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.prettierignore b/.prettierignore index 3b34afa1ed6..6aabe7366cb 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,6 +4,7 @@ .vs/ .ionide/ +testdata /arduino/libraries/librariesindex/testdata/invalid.json /arduino/security/testdata/ /.licenses/ diff --git a/DistTasks.yml b/DistTasks.yml index 2231c439dc7..1195fd0e5f9 100644 --- a/DistTasks.yml +++ b/DistTasks.yml @@ -19,7 +19,7 @@ version: "3" vars: CONTAINER: "docker.elastic.co/beats-dev/golang-crossbuild" - GO_VERSION: "1.21.1" + GO_VERSION: "1.21.6" tasks: Windows_32bit: @@ -258,4 +258,4 @@ tasks: desc: Copy the JSON schema to dist folder cmds: - mkdir --parents {{.DIST_DIR}} - - cp ./configuration/configuration.schema.json {{.DIST_DIR}}/{{.PROJECT_NAME}}_{{.VERSION}}_configuration.schema.json + - cp ./internal/cli/configuration/configuration.schema.json {{.DIST_DIR}}/{{.PROJECT_NAME}}_{{.VERSION}}_configuration.schema.json diff --git a/README.md b/README.md index 39ecae5f037..18633011a45 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,6 @@ and many other tools needed to use any Arduino compatible board and platform fro [![Deploy Website status](https://github.com/arduino/arduino-cli/actions/workflows/deploy-cobra-mkdocs-versioned-poetry.yml/badge.svg)](https://github.com/arduino/arduino-cli/actions/workflows/deploy-cobra-mkdocs-versioned-poetry.yml) [![Codecov](https://codecov.io/gh/arduino/arduino-cli/branch/master/graph/badge.svg)](https://codecov.io/gh/arduino/arduino-cli) -> **Note:** this software is currently under active development: anything can change at any time, API and UI must be -> considered unstable until we release version 1.0.0. - ## Docs For guidance on installation and development, see the [User documentation]. @@ -33,9 +30,9 @@ contribute your changes to the project. :sparkles: Thanks to all our [contributors]! :sparkles: -### Beta testing +### Testing builds -[Nightly builds] are available for beta testing. +[Nightly builds] are available for testing. ## Security diff --git a/Taskfile.yml b/Taskfile.yml index e19fd011777..d5cbf0131a0 100755 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -48,17 +48,17 @@ tasks: desc: Build the Go code dir: '{{default "./" .GO_MODULE_PATH}}' cmds: - - go build -v {{default "" .EXTRA_FLAGS}} {{.LDFLAGS}} + - go build {{default "" .EXTRA_FLAGS}} {{.LDFLAGS}} # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/deploy-cobra-mkdocs-versioned-poetry/Taskfile.yml go:cli-docs: desc: Generate command line interface reference documentation - dir: ./docsgen + dir: ./internal/docsgen cmds: # Command examples use os.Args[0] so the docs generation binary must have the same filename as the project - go build -o {{.PROJECT_NAME}}{{exeExt}} # The binary is invoked like this instead of `./{{.PROJECT_NAME}}` to remove the `./` chars from the examples - - PATH=. {{.PROJECT_NAME}} ../docs/commands + - PATH=. {{.PROJECT_NAME}} ../../docs/commands # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-go-task/Taskfile.yml go:fix: @@ -95,7 +95,7 @@ tasks: dir: '{{default "./" .GO_MODULE_PATH}}' cmds: - | - go test \ + LANG=en go test \ -v \ -short \ -run '{{default ".*" .GO_TEST_REGEX}}' \ @@ -115,7 +115,7 @@ tasks: - | rm -fr coverage_data mkdir coverage_data - INTEGRATION_GOCOVERDIR={{ .ROOT_DIR }}/coverage_data go test \ + LANG=en INTEGRATION_GOCOVERDIR={{ .ROOT_DIR }}/coverage_data go test \ -v \ -short \ {{ .GO_TEST_PACKAGE }} \ @@ -130,14 +130,14 @@ tasks: desc: Run easyjson code generation cmds: - go install github.com/mailru/easyjson/...@v0.7.7 - - easyjson arduino/cores/packageindex/index.go - - easyjson arduino/libraries/librariesindex/json.go + - easyjson internal/arduino/cores/packageindex/index.go + - easyjson internal/arduino/libraries/librariesindex/json.go go:add-license-headers: desc: Add missing go license headers cmds: - go install github.com/google/addlicense@v1.1.1 - - addlicense -c "ARDUINO SA (http://www.arduino.cc/)" -f ./license_header.tpl **/*.go + - addlicense -c "ARDUINO SA (http://www.arduino.cc/)" -f ./license_header.tpl $(find . -name "*.go" -type f -print0 | xargs -0) # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-markdown-task/Taskfile.yml markdown:check-links: @@ -237,18 +237,16 @@ tasks: desc: Compile protobuf definitions cmds: - '{{ default "protoc" .PROTOC_BINARY }} --proto_path=rpc --go_out=./rpc --go_opt=paths=source_relative --go-grpc_out=./rpc --go-grpc_opt=paths=source_relative ./rpc/cc/arduino/cli/commands/v1/*.proto' - - '{{ default "protoc" .PROTOC_BINARY }} --proto_path=rpc --go_out=./rpc --go_opt=paths=source_relative --go-grpc_out=./rpc --go-grpc_opt=paths=source_relative ./rpc/cc/arduino/cli/settings/v1/*.proto' protoc:docs: desc: Generate docs for protobuf definitions cmds: - '{{ default "protoc" .PROTOC_BINARY }} --doc_out=./docs/rpc --doc_opt=markdown,commands.md --proto_path=rpc ./rpc/cc/arduino/cli/commands/v1/*.proto' - - '{{ default "protoc" .PROTOC_BINARY }} --doc_out=./docs/rpc --doc_opt=markdown,settings.md --proto_path=rpc ./rpc/cc/arduino/cli/settings/v1/*.proto' docs:include-configuration-json-schema: desc: Copy configuration JSON schema to make it available in documentation cmds: - - cp ./configuration/configuration.schema.json ./docs/configuration.schema.json + - cp ./internal/cli/configuration/configuration.schema.json ./docs/configuration.schema.json protoc:check: desc: Perform linting of the protobuf definitions @@ -303,24 +301,24 @@ tasks: i18n:update: desc: Updates i18n files cmds: - - go run ./i18n/cmd/main.go catalog generate . > ./i18n/data/en.po + - go run ./internal/i18n/cmd/main.go catalog generate . > ./internal/i18n/data/en.po i18n:pull: desc: Pull i18n files from transifex cmds: - - go run ./i18n/cmd/main.go transifex pull ./i18n/data + - go run ./internal/i18n/cmd/main.go transifex pull ./internal/i18n/data i18n:push: desc: Push i18n files to transifex cmds: - - go run ./i18n/cmd/main.go transifex push ./i18n/data + - go run ./internal/i18n/cmd/main.go transifex push ./internal/i18n/data i18n:check: desc: Check if the i18n message catalog was updated cmds: - task: i18n:pull - - git add -N ./i18n/data - - git diff --exit-code ./i18n/data + - git add -N ./internal/i18n/data + - git diff --exit-code ./internal/i18n/data # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-mkdocs-task/Taskfile.yml website:check: diff --git a/arduino/builder/export_cmake.go b/arduino/builder/export_cmake.go deleted file mode 100644 index e65776b4e0b..00000000000 --- a/arduino/builder/export_cmake.go +++ /dev/null @@ -1,395 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package builder - -import ( - "fmt" - "io" - "os" - "path/filepath" - "regexp" - "slices" - "strings" - - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/go-paths-helper" - properties "github.com/arduino/go-properties-orderedmap" -) - -var lineMatcher = regexp.MustCompile(`^#line\s\d+\s"`) - -// exportProjectCMake fixdoc -func (b *Builder) exportProjectCMake(importedLibraries libraries.List, includeFolders paths.PathList) error { - // copies the contents of the file named src to the file named - // by dst. The file will be created if it does not already exist. If the - // destination file exists, all it's contents will be replaced by the contents - // of the source file. The file mode will be copied from the source and - // the copied data is synced/flushed to stable storage. - // TODO: Replace with call to go-paths-helper... - copyFile := func(src, dst string) (err error) { - in, err := os.Open(src) - if err != nil { - return - } - defer in.Close() - - out, err := os.Create(dst) - if err != nil { - return - } - defer func() { - if e := out.Close(); e != nil { - err = e - } - }() - - _, err = io.Copy(out, in) - if err != nil { - return - } - - err = out.Sync() - if err != nil { - return - } - - si, err := os.Stat(src) - if err != nil { - return - } - err = os.Chmod(dst, si.Mode()) - if err != nil { - return - } - - return - } - - // recursively copies a directory tree, attempting to preserve permissions. - // Source directory must exist, destination directory must *not* exist. - // Symlinks are ignored and skipped. - // TODO: Replace with call to go-paths-helper... - var copyDir func(src string, dst string, extensions []string) (err error) - copyDir = func(src string, dst string, extensions []string) (err error) { - isAcceptedExtension := func(ext string) bool { - ext = strings.ToLower(ext) - for _, valid := range extensions { - if ext == valid { - return true - } - } - return false - } - - src = filepath.Clean(src) - dst = filepath.Clean(dst) - - si, err := os.Stat(src) - if err != nil { - return err - } - if !si.IsDir() { - return fmt.Errorf(tr("source is not a directory")) - } - - _, err = os.Stat(dst) - if err != nil && !os.IsNotExist(err) { - return - } - if err == nil { - return fmt.Errorf(tr("destination already exists")) - } - - err = os.MkdirAll(dst, si.Mode()) - if err != nil { - return - } - - entries, err := os.ReadDir(src) - if err != nil { - return - } - - for _, dirEntry := range entries { - entry, scopeErr := dirEntry.Info() - if scopeErr != nil { - return - } - - srcPath := filepath.Join(src, entry.Name()) - dstPath := filepath.Join(dst, entry.Name()) - - if entry.IsDir() { - err = copyDir(srcPath, dstPath, extensions) - if err != nil { - return - } - } else { - // Skip symlinks. - if entry.Mode()&os.ModeSymlink != 0 { - continue - } - - if !isAcceptedExtension(filepath.Ext(srcPath)) { - continue - } - - err = copyFile(srcPath, dstPath) - if err != nil { - return - } - } - } - - return - } - - var validExportExtensions = []string{".a", ".properties"} - for ext := range globals.SourceFilesValidExtensions { - validExportExtensions = append(validExportExtensions, ext) - } - var validHeaderExtensions = []string{} - for ext := range globals.HeaderFilesValidExtensions { - validExportExtensions = append(validExportExtensions, ext) - validHeaderExtensions = append(validHeaderExtensions, ext) - } - var validStaticLibExtensions = []string{".a"} - - // If cannot export Cmake project - if b.buildProperties.Get("compiler.export_cmake") == "" { - return nil - } - - // Create new cmake subFolder - clean if the folder is already there - cmakeFolder := b.buildPath.Join("_cmake") - if _, err := cmakeFolder.Stat(); err == nil { - cmakeFolder.RemoveAll() - } - cmakeFolder.MkdirAll() - - // Create lib and build subfolders - libBaseFolder := cmakeFolder.Join("lib") - libBaseFolder.MkdirAll() - buildBaseFolder := cmakeFolder.Join("build") - buildBaseFolder.MkdirAll() - - // Create core subfolder path (don't create it yet) - coreFolder := cmakeFolder.Join("core") - cmakeFile := cmakeFolder.Join("CMakeLists.txt") - - dynamicLibsFromPkgConfig := map[string]bool{} - for _, library := range importedLibraries { - // Copy used libraries in the correct folder - libDir := libBaseFolder.Join(library.DirName) - mcu := b.buildProperties.Get("build.mcu") - copyDir(library.InstallDir.String(), libDir.String(), validExportExtensions) - - // Read cmake options if available - isStaticLib := true - if cmakeOptions, err := properties.LoadFromPath(libDir.Join("src", mcu, "arduino_builder.properties")); err == nil { - // If the library can be linked dynamically do not copy the library folder - if pkgs, ok := cmakeOptions.GetOk("cmake.pkg_config"); ok { - isStaticLib = false - for _, pkg := range strings.Split(pkgs, " ") { - dynamicLibsFromPkgConfig[pkg] = true - } - } - } - - // Remove examples folder - if _, err := libBaseFolder.Join("examples").Stat(); err == nil { - libDir.Join("examples").RemoveAll() - } - - // Remove stray folders contining incompatible or not needed libraries archives - files, _ := utils.FindFilesInFolder(libDir.Join("src"), true, validStaticLibExtensions...) - for _, file := range files { - staticLibDir := file.Parent() - if !isStaticLib || !strings.Contains(staticLibDir.String(), mcu) { - staticLibDir.RemoveAll() - } - } - } - - // Copy core + variant in use + preprocessed sketch in the correct folders - err := copyDir(b.buildProperties.Get("build.core.path"), coreFolder.String(), validExportExtensions) - if err != nil { - fmt.Println(err) - } - err = copyDir(b.buildProperties.Get("build.variant.path"), coreFolder.Join("variant").String(), validExportExtensions) - if err != nil { - fmt.Println(err) - } - - if err := b.preprocessSketch(includeFolders); err != nil { - return err - } - - err = copyDir(b.sketchBuildPath.String(), cmakeFolder.Join("sketch").String(), validExportExtensions) - if err != nil { - fmt.Println(err) - } - - // remove "#line 1 ..." from exported c_make folder sketch - sketchFiles, _ := utils.FindFilesInFolder(cmakeFolder.Join("sketch"), false, validExportExtensions...) - - for _, file := range sketchFiles { - input, err := file.ReadFile() - if err != nil { - fmt.Println(err) - continue - } - - lines := strings.Split(string(input), "\n") - - for i, line := range lines { - if lineMatcher.MatchString(line) { - lines[i] = "" - } - } - output := strings.Join(lines, "\n") - err = file.WriteFile([]byte(output)) - if err != nil { - fmt.Println(err) - } - } - - // Extract CFLAGS, CPPFLAGS and LDFLAGS - var defines []string - var linkerflags []string - var dynamicLibsFromGccMinusL []string - var linkDirectories []string - - b.extractCompileFlags(b.buildProperties, "recipe.c.combine.pattern", &defines, &dynamicLibsFromGccMinusL, &linkerflags, &linkDirectories) - b.extractCompileFlags(b.buildProperties, "recipe.c.o.pattern", &defines, &dynamicLibsFromGccMinusL, &linkerflags, &linkDirectories) - b.extractCompileFlags(b.buildProperties, "recipe.cpp.o.pattern", &defines, &dynamicLibsFromGccMinusL, &linkerflags, &linkDirectories) - - // Extract folders with .h in them for adding in include list - headerFiles, _ := utils.FindFilesInFolder(cmakeFolder, true, validHeaderExtensions...) - foldersContainingHeaders := findUniqueFoldersRelative(headerFiles.AsStrings(), cmakeFolder.String()) - - // Extract folders with .a in them for adding in static libs paths list - staticLibs, _ := utils.FindFilesInFolder(cmakeFolder, true, validStaticLibExtensions...) - - // Generate the CMakeLists global file - - projectName := b.sketch.Name - - cmakelist := "cmake_minimum_required(VERSION 3.5.0)\n" - cmakelist += "INCLUDE(FindPkgConfig)\n" - cmakelist += "project (" + projectName + " C CXX)\n" - cmakelist += "add_definitions (" + strings.Join(defines, " ") + " " + strings.Join(linkerflags, " ") + ")\n" - cmakelist += "include_directories (" + foldersContainingHeaders + ")\n" - - // Make link directories relative - // We can totally discard them since they mostly are outside the core folder - // If they are inside the core they are not getting copied :) - var relLinkDirectories []string - for _, dir := range linkDirectories { - if strings.Contains(dir, cmakeFolder.String()) { - relLinkDirectories = append(relLinkDirectories, strings.TrimPrefix(dir, cmakeFolder.String())) - } - } - - // Add SO_PATHS option for libraries not getting found by pkg_config - cmakelist += "set(EXTRA_LIBS_DIRS \"\" CACHE STRING \"Additional paths for dynamic libraries\")\n" - - linkGroup := "" - for _, lib := range dynamicLibsFromGccMinusL { - // Dynamic libraries should be discovered by pkg_config - cmakelist += "pkg_search_module (" + strings.ToUpper(lib) + " " + lib + ")\n" - relLinkDirectories = append(relLinkDirectories, "${"+strings.ToUpper(lib)+"_LIBRARY_DIRS}") - linkGroup += " " + lib - } - for lib := range dynamicLibsFromPkgConfig { - cmakelist += "pkg_search_module (" + strings.ToUpper(lib) + " " + lib + ")\n" - relLinkDirectories = append(relLinkDirectories, "${"+strings.ToUpper(lib)+"_LIBRARY_DIRS}") - linkGroup += " ${" + strings.ToUpper(lib) + "_LIBRARIES}" - } - cmakelist += "link_directories (" + strings.Join(relLinkDirectories, " ") + " ${EXTRA_LIBS_DIRS})\n" - for _, staticLib := range staticLibs { - // Static libraries are fully configured - lib := staticLib.Base() - lib = strings.TrimPrefix(lib, "lib") - lib = strings.TrimSuffix(lib, ".a") - if !slices.Contains(dynamicLibsFromGccMinusL, lib) { - linkGroup += " " + lib - cmakelist += "add_library (" + lib + " STATIC IMPORTED)\n" - location := strings.TrimPrefix(staticLib.String(), cmakeFolder.String()) - cmakelist += "set_property(TARGET " + lib + " PROPERTY IMPORTED_LOCATION " + "${PROJECT_SOURCE_DIR}" + location + " )\n" - } - } - - // Include source files - // TODO: remove .cpp and .h from libraries example folders - cmakelist += "file (GLOB_RECURSE SOURCES core/*.c* lib/*.c* sketch/*.c*)\n" - - // Compile and link project - cmakelist += "add_executable (" + projectName + " ${SOURCES} ${SOURCES_LIBS})\n" - cmakelist += "target_link_libraries( " + projectName + " -Wl,--as-needed -Wl,--start-group " + linkGroup + " -Wl,--end-group)\n" - - cmakeFile.WriteFile([]byte(cmakelist)) - - return nil -} - -func (b *Builder) extractCompileFlags(buildProperties *properties.Map, recipe string, defines, dynamicLibs, linkerflags, linkDirectories *[]string) { - appendIfNotPresent := func(target []string, elements ...string) []string { - for _, element := range elements { - if !slices.Contains(target, element) { - target = append(target, element) - } - } - return target - } - - command, _ := b.prepareCommandForRecipe(buildProperties, recipe, true) - - for _, arg := range command.GetArgs() { - if strings.HasPrefix(arg, "-D") { - *defines = appendIfNotPresent(*defines, arg) - continue - } - if strings.HasPrefix(arg, "-l") { - *dynamicLibs = appendIfNotPresent(*dynamicLibs, arg[2:]) - continue - } - if strings.HasPrefix(arg, "-L") { - *linkDirectories = appendIfNotPresent(*linkDirectories, arg[2:]) - continue - } - if strings.HasPrefix(arg, "-") && !strings.HasPrefix(arg, "-I") && !strings.HasPrefix(arg, "-o") { - // HACK : from linkerflags remove MMD (no cache is produced) - if !strings.HasPrefix(arg, "-MMD") { - *linkerflags = appendIfNotPresent(*linkerflags, arg) - } - } - } -} - -func findUniqueFoldersRelative(slice []string, base string) string { - var out []string - for _, element := range slice { - path := filepath.Dir(element) - path = strings.TrimPrefix(path, base+"/") - if !slices.Contains(out, path) { - out = append(out, path) - } - } - return strings.Join(out, " ") -} diff --git a/arduino/discovery/discovery.go b/arduino/discovery/discovery.go deleted file mode 100644 index 2e9946d675c..00000000000 --- a/arduino/discovery/discovery.go +++ /dev/null @@ -1,472 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package discovery - -import ( - "encoding/json" - "fmt" - "io" - "strings" - "sync" - "time" - - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/version" - "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" -) - -// To work correctly a Pluggable Discovery must respect the state machine specified on the documentation: -// https://arduino.github.io/arduino-cli/latest/pluggable-discovery-specification/#state-machine -// States a PluggableDiscovery can be in -const ( - Alive int = iota - Idling - Running - Syncing - Dead -) - -// PluggableDiscovery is a tool that detects communication ports to interact -// with the boards. -type PluggableDiscovery struct { - id string - processArgs []string - process *executils.Process - outgoingCommandsPipe io.Writer - incomingMessagesChan <-chan *discoveryMessage - - // All the following fields are guarded by statusMutex - statusMutex sync.Mutex - incomingMessagesError error - state int - eventChan chan<- *Event -} - -type discoveryMessage struct { - EventType string `json:"eventType"` - Message string `json:"message"` - Error bool `json:"error"` - ProtocolVersion int `json:"protocolVersion"` // Used in HELLO command - Ports []*Port `json:"ports"` // Used in LIST command - Port *Port `json:"port"` // Used in add and remove events -} - -func (msg discoveryMessage) String() string { - s := fmt.Sprintf("type: %s", msg.EventType) - if msg.Message != "" { - s = tr("%[1]s, message: %[2]s", s, msg.Message) - } - if msg.ProtocolVersion != 0 { - s = tr("%[1]s, protocol version: %[2]d", s, msg.ProtocolVersion) - } - if len(msg.Ports) > 0 { - s = tr("%[1]s, ports: %[2]s", s, msg.Ports) - } - if msg.Port != nil { - s = tr("%[1]s, port: %[2]s", s, msg.Port) - } - return s -} - -// Port contains metadata about a port to connect to a board. -type Port struct { - Address string `json:"address"` - AddressLabel string `json:"label"` - Protocol string `json:"protocol"` - ProtocolLabel string `json:"protocolLabel"` - HardwareID string `json:"hardwareId,omitempty"` - Properties *properties.Map `json:"properties"` -} - -var tr = i18n.Tr - -// Equals returns true if the given port has the same address and protocol -// of the current port. -func (p *Port) Equals(o *Port) bool { - return p.Address == o.Address && p.Protocol == o.Protocol -} - -// ToRPC converts Port into rpc.Port -func (p *Port) ToRPC() *rpc.Port { - props := p.Properties - if props == nil { - props = properties.NewMap() - } - return &rpc.Port{ - Address: p.Address, - Label: p.AddressLabel, - Protocol: p.Protocol, - ProtocolLabel: p.ProtocolLabel, - HardwareId: p.HardwareID, - Properties: props.AsMap(), - } -} - -// PortFromRPCPort converts an *rpc.Port to a *Port -func PortFromRPCPort(o *rpc.Port) (p *Port) { - if o == nil { - return nil - } - res := &Port{ - Address: o.Address, - AddressLabel: o.Label, - Protocol: o.Protocol, - ProtocolLabel: o.ProtocolLabel, - HardwareID: o.HardwareId, - } - if o.Properties != nil { - res.Properties = properties.NewFromHashmap(o.Properties) - } - return res -} - -func (p *Port) String() string { - if p == nil { - return "none" - } - return p.Address -} - -// Clone creates a copy of this Port -func (p *Port) Clone() *Port { - if p == nil { - return nil - } - res := *p - if p.Properties != nil { - res.Properties = p.Properties.Clone() - } - return &res -} - -// Event is a pluggable discovery event -type Event struct { - Type string - Port *Port - DiscoveryID string -} - -// New create and connect to the given pluggable discovery -func New(id string, args ...string) *PluggableDiscovery { - return &PluggableDiscovery{ - id: id, - processArgs: args, - state: Dead, - } -} - -// GetID returns the identifier for this discovery -func (disc *PluggableDiscovery) GetID() string { - return disc.id -} - -func (disc *PluggableDiscovery) String() string { - return disc.id -} - -func (disc *PluggableDiscovery) jsonDecodeLoop(in io.Reader, outChan chan<- *discoveryMessage) { - decoder := json.NewDecoder(in) - closeAndReportError := func(err error) { - disc.statusMutex.Lock() - disc.state = Dead - disc.incomingMessagesError = err - disc.statusMutex.Unlock() - close(outChan) - logrus.Errorf("stopped discovery %s decode loop: %v", disc.id, err) - } - - for { - var msg discoveryMessage - if err := decoder.Decode(&msg); errors.Is(err, io.EOF) { - // This is fine, we exit gracefully - disc.statusMutex.Lock() - disc.state = Dead - disc.incomingMessagesError = err - disc.statusMutex.Unlock() - close(outChan) - return - } else if err != nil { - closeAndReportError(err) - return - } - logrus.Infof("from discovery %s received message %s", disc.id, msg) - if msg.EventType == "add" { - if msg.Port == nil { - closeAndReportError(errors.New(tr("invalid 'add' message: missing port"))) - return - } - disc.statusMutex.Lock() - if disc.eventChan != nil { - disc.eventChan <- &Event{"add", msg.Port, disc.GetID()} - } - disc.statusMutex.Unlock() - } else if msg.EventType == "remove" { - if msg.Port == nil { - closeAndReportError(errors.New(tr("invalid 'remove' message: missing port"))) - return - } - disc.statusMutex.Lock() - if disc.eventChan != nil { - disc.eventChan <- &Event{"remove", msg.Port, disc.GetID()} - } - disc.statusMutex.Unlock() - } else { - outChan <- &msg - } - } -} - -// State returns the current state of this PluggableDiscovery -func (disc *PluggableDiscovery) State() int { - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - return disc.state -} - -func (disc *PluggableDiscovery) waitMessage(timeout time.Duration) (*discoveryMessage, error) { - select { - case msg := <-disc.incomingMessagesChan: - if msg == nil { - return nil, disc.incomingMessagesError - } - return msg, nil - case <-time.After(timeout): - return nil, fmt.Errorf(tr("timeout waiting for message from %s"), disc.id) - } -} - -func (disc *PluggableDiscovery) sendCommand(command string) error { - logrus.Infof("sending command %s to discovery %s", strings.TrimSpace(command), disc) - data := []byte(command) - for { - n, err := disc.outgoingCommandsPipe.Write(data) - if err != nil { - return err - } - if n == len(data) { - return nil - } - data = data[n:] - } -} - -func (disc *PluggableDiscovery) runProcess() error { - logrus.Infof("starting discovery %s process", disc.id) - proc, err := executils.NewProcess(nil, disc.processArgs...) - if err != nil { - return err - } - stdout, err := proc.StdoutPipe() - if err != nil { - return err - } - stdin, err := proc.StdinPipe() - if err != nil { - return err - } - disc.outgoingCommandsPipe = stdin - - messageChan := make(chan *discoveryMessage) - disc.incomingMessagesChan = messageChan - go disc.jsonDecodeLoop(stdout, messageChan) - - if err := proc.Start(); err != nil { - return err - } - - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - disc.process = proc - disc.state = Alive - logrus.Infof("started discovery %s process", disc.id) - return nil -} - -func (disc *PluggableDiscovery) killProcess() error { - logrus.Infof("killing discovery %s process", disc.id) - if disc.process != nil { - if err := disc.process.Kill(); err != nil { - return err - } - if err := disc.process.Wait(); err != nil { - return err - } - } - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - disc.stopSync() - disc.state = Dead - logrus.Infof("killed discovery %s process", disc.id) - return nil -} - -// Run starts the discovery executable process and sends the HELLO command to the discovery to agree on the -// pluggable discovery protocol. This must be the first command to run in the communication with the discovery. -// If the process is started but the HELLO command fails the process is killed. -func (disc *PluggableDiscovery) Run() (err error) { - if err = disc.runProcess(); err != nil { - return err - } - - defer func() { - // If the discovery process is started successfully but the HELLO handshake - // fails the discovery is an unusable state, we kill the process to avoid - // further issues down the line. - if err == nil { - return - } - if err := disc.killProcess(); err != nil { - // Log failure to kill the process, ideally that should never happen - // but it's best to know it if it does - logrus.Errorf("Killing discovery %s after unsuccessful start: %s", disc.id, err) - } - }() - - if err = disc.sendCommand("HELLO 1 \"arduino-cli " + version.VersionInfo.VersionString + "\"\n"); err != nil { - return err - } - if msg, err := disc.waitMessage(time.Second * 10); err != nil { - return fmt.Errorf(tr("calling %[1]s: %[2]w"), "HELLO", err) - } else if msg.EventType != "hello" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "hello", msg.EventType) - } else if msg.Error { - return errors.Errorf(tr("command failed: %s"), msg.Message) - } else if strings.ToUpper(msg.Message) != "OK" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "OK", msg.Message) - } else if msg.ProtocolVersion > 1 { - return errors.Errorf(tr("protocol version not supported: requested 1, got %d"), msg.ProtocolVersion) - } - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - disc.state = Idling - return nil -} - -// Start initializes and start the discovery internal subroutines. This command must be -// called before List or StartSync. -func (disc *PluggableDiscovery) Start() error { - if err := disc.sendCommand("START\n"); err != nil { - return err - } - if msg, err := disc.waitMessage(time.Second * 10); err != nil { - return fmt.Errorf(tr("calling %[1]s: %[2]w"), "START", err) - } else if msg.EventType != "start" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "start", msg.EventType) - } else if msg.Error { - return errors.Errorf(tr("command failed: %s"), msg.Message) - } else if strings.ToUpper(msg.Message) != "OK" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "OK", msg.Message) - } - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - disc.state = Running - return nil -} - -// Stop stops the discovery internal subroutines and possibly free the internally -// used resources. This command should be called if the client wants to pause the -// discovery for a while. -func (disc *PluggableDiscovery) Stop() error { - if err := disc.sendCommand("STOP\n"); err != nil { - return err - } - if msg, err := disc.waitMessage(time.Second * 10); err != nil { - return fmt.Errorf(tr("calling %[1]s: %[2]w"), "STOP", err) - } else if msg.EventType != "stop" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "stop", msg.EventType) - } else if msg.Error { - return errors.Errorf(tr("command failed: %s"), msg.Message) - } else if strings.ToUpper(msg.Message) != "OK" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "OK", msg.Message) - } - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - disc.stopSync() - disc.state = Idling - return nil -} - -func (disc *PluggableDiscovery) stopSync() { - if disc.eventChan != nil { - disc.eventChan <- &Event{"stop", nil, disc.GetID()} - close(disc.eventChan) - disc.eventChan = nil - } -} - -// Quit terminates the discovery. No more commands can be accepted by the discovery. -func (disc *PluggableDiscovery) Quit() { - _ = disc.sendCommand("QUIT\n") - if _, err := disc.waitMessage(time.Second * 5); err != nil { - logrus.Errorf("Quitting discovery %s: %s", disc.id, err) - } - disc.stopSync() - disc.killProcess() -} - -// List executes an enumeration of the ports and returns a list of the available -// ports at the moment of the call. -func (disc *PluggableDiscovery) List() ([]*Port, error) { - if err := disc.sendCommand("LIST\n"); err != nil { - return nil, err - } - if msg, err := disc.waitMessage(time.Second * 10); err != nil { - return nil, fmt.Errorf(tr("calling %[1]s: %[2]w"), "LIST", err) - } else if msg.EventType != "list" { - return nil, errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "list", msg.EventType) - } else if msg.Error { - return nil, errors.Errorf(tr("command failed: %s"), msg.Message) - } else { - return msg.Ports, nil - } -} - -// StartSync puts the discovery in "events" mode: the discovery will send "add" -// and "remove" events each time a new port is detected or removed respectively. -// After calling StartSync an initial burst of "add" events may be generated to -// report all the ports available at the moment of the start. -// It also creates a channel used to receive events from the pluggable discovery. -// The event channel must be consumed as quickly as possible since it may block the -// discovery if it becomes full. The channel size is configurable. -func (disc *PluggableDiscovery) StartSync(size int) (<-chan *Event, error) { - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - - if err := disc.sendCommand("START_SYNC\n"); err != nil { - return nil, err - } - - if msg, err := disc.waitMessage(time.Second * 10); err != nil { - return nil, fmt.Errorf(tr("calling %[1]s: %[2]w"), "START_SYNC", err) - } else if msg.EventType != "start_sync" { - return nil, errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "start_sync", msg.EventType) - } else if msg.Error { - return nil, errors.Errorf(tr("command failed: %s"), msg.Message) - } else if strings.ToUpper(msg.Message) != "OK" { - return nil, errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "OK", msg.Message) - } - - disc.state = Syncing - // In case there is already an existing event channel in use we close it before creating a new one. - disc.stopSync() - c := make(chan *Event, size) - disc.eventChan = c - return c, nil -} diff --git a/arduino/discovery/discovery_test.go b/arduino/discovery/discovery_test.go deleted file mode 100644 index 27791da6c89..00000000000 --- a/arduino/discovery/discovery_test.go +++ /dev/null @@ -1,73 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package discovery - -import ( - "io" - "testing" - "time" - - "github.com/arduino/arduino-cli/executils" - "github.com/stretchr/testify/require" -) - -func TestDiscoveryStdioHandling(t *testing.T) { - // Build `cat` helper inside testdata/cat - builder, err := executils.NewProcess(nil, "go", "build") - require.NoError(t, err) - builder.SetDir("testdata/cat") - require.NoError(t, builder.Run()) - - // Run cat and test if streaming json works as expected - disc := New("test", "testdata/cat/cat") // copy stdin to stdout - - err = disc.runProcess() - require.NoError(t, err) - - _, err = disc.outgoingCommandsPipe.Write([]byte(`{ "eventType":`)) // send partial JSON - require.NoError(t, err) - msg, err := disc.waitMessage(time.Millisecond * 100) - require.Error(t, err) - require.Nil(t, msg) - - _, err = disc.outgoingCommandsPipe.Write([]byte(`"ev1" }{ `)) // complete previous json and start another one - require.NoError(t, err) - - msg, err = disc.waitMessage(time.Millisecond * 100) - require.NoError(t, err) - require.NotNil(t, msg) - require.Equal(t, "ev1", msg.EventType) - - msg, err = disc.waitMessage(time.Millisecond * 100) - require.Error(t, err) - require.Nil(t, msg) - - _, err = disc.outgoingCommandsPipe.Write([]byte(`"eventType":"ev2" }`)) // complete previous json - require.NoError(t, err) - - msg, err = disc.waitMessage(time.Millisecond * 100) - require.NoError(t, err) - require.NotNil(t, msg) - require.Equal(t, "ev2", msg.EventType) - - require.Equal(t, disc.State(), Alive) - - err = disc.outgoingCommandsPipe.(io.ReadCloser).Close() - require.NoError(t, err) - time.Sleep(time.Millisecond * 100) - - require.Equal(t, disc.State(), Dead) -} diff --git a/arduino/discovery/testdata/cat/.gitignore b/arduino/discovery/testdata/cat/.gitignore deleted file mode 100644 index a7053b145c4..00000000000 --- a/arduino/discovery/testdata/cat/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -cat -cat.exe diff --git a/arduino/httpclient/httpclient.go b/arduino/httpclient/httpclient.go deleted file mode 100644 index 4969ab2cb46..00000000000 --- a/arduino/httpclient/httpclient.go +++ /dev/null @@ -1,127 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package httpclient - -import ( - "net/http" - "net/url" - "time" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" - "github.com/sirupsen/logrus" - "go.bug.st/downloader/v2" -) - -var tr = i18n.Tr - -// DownloadFile downloads a file from a URL into the specified path. An optional config and options may be passed (or nil to use the defaults). -// A DownloadProgressCB callback function must be passed to monitor download progress. -// If a not empty queryParameter is passed, it is appended to the URL for analysis purposes. -func DownloadFile(path *paths.Path, URL string, queryParameter string, label string, downloadCB rpc.DownloadProgressCB, config *downloader.Config, options ...downloader.DownloadOptions) (returnedError error) { - if queryParameter != "" { - URL = URL + "?query=" + queryParameter - } - logrus.WithField("url", URL).Info("Starting download") - downloadCB.Start(URL, label) - defer func() { - if returnedError == nil { - downloadCB.End(true, "") - } else { - downloadCB.End(false, returnedError.Error()) - } - }() - - if config == nil { - c, err := GetDownloaderConfig() - if err != nil { - return err - } - config = c - } - - d, err := downloader.DownloadWithConfig(path.String(), URL, *config, options...) - if err != nil { - return err - } - - err = d.RunAndPoll(func(downloaded int64) { - downloadCB.Update(downloaded, d.Size()) - }, 250*time.Millisecond) - if err != nil { - return err - } - - // The URL is not reachable for some reason - if d.Resp.StatusCode >= 400 && d.Resp.StatusCode <= 599 { - msg := tr("Server responded with: %s", d.Resp.Status) - return &arduino.FailedDownloadError{Message: msg} - } - - return nil -} - -// Config is the configuration of the http client -type Config struct { - UserAgent string - Proxy *url.URL -} - -// New returns a default http client for use in the arduino-cli -func New() (*http.Client, error) { - userAgent := configuration.UserAgent(configuration.Settings) - proxy, err := configuration.NetworkProxy(configuration.Settings) - if err != nil { - return nil, err - } - return NewWithConfig(&Config{UserAgent: userAgent, Proxy: proxy}), nil -} - -// NewWithConfig creates a http client for use in the arduino-cli, with a given configuration -func NewWithConfig(config *Config) *http.Client { - return &http.Client{ - Transport: &httpClientRoundTripper{ - transport: &http.Transport{ - Proxy: http.ProxyURL(config.Proxy), - }, - userAgent: config.UserAgent, - }, - } -} - -// GetDownloaderConfig returns the downloader configuration based on current settings. -func GetDownloaderConfig() (*downloader.Config, error) { - httpClient, err := New() - if err != nil { - return nil, &arduino.InvalidArgumentError{Message: tr("Could not connect via HTTP"), Cause: err} - } - return &downloader.Config{ - HttpClient: *httpClient, - }, nil -} - -type httpClientRoundTripper struct { - transport http.RoundTripper - userAgent string -} - -func (h *httpClientRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { - req.Header.Add("User-Agent", h.userAgent) - return h.transport.RoundTrip(req) -} diff --git a/arduino/libraries/librariesmanager/librariesmanager.go b/arduino/libraries/librariesmanager/librariesmanager.go deleted file mode 100644 index e6db732bd9b..00000000000 --- a/arduino/libraries/librariesmanager/librariesmanager.go +++ /dev/null @@ -1,232 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package librariesmanager - -import ( - "errors" - "fmt" - "os" - "slices" - "strings" - - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/i18n" - paths "github.com/arduino/go-paths-helper" - "github.com/sirupsen/logrus" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -// LibrariesManager keeps the current status of the libraries in the system -// (the list of libraries, revisions, installed paths, etc.) -type LibrariesManager struct { - LibrariesDir []*LibrariesDir - Libraries map[string]libraries.List `json:"libraries"` - - Index *librariesindex.Index - IndexFile *paths.Path - IndexFileSignature *paths.Path - DownloadsDir *paths.Path -} - -// LibrariesDir is a directory containing libraries -type LibrariesDir struct { - Path *paths.Path - Location libraries.LibraryLocation - PlatformRelease *cores.PlatformRelease -} - -var tr = i18n.Tr - -// Names returns an array with all the names of the installed libraries. -func (lm LibrariesManager) Names() []string { - res := make([]string, len(lm.Libraries)) - i := 0 - for n := range lm.Libraries { - res[i] = n - i++ - } - slices.SortFunc(res, func(a, b string) int { - if strings.ToLower(a) < strings.ToLower(b) { - return -1 - } - return 1 - }) - return res -} - -// NewLibraryManager creates a new library manager -func NewLibraryManager(indexDir *paths.Path, downloadsDir *paths.Path) *LibrariesManager { - var indexFile, indexFileSignature *paths.Path - if indexDir != nil { - indexFile = indexDir.Join("library_index.json") - indexFileSignature = indexDir.Join("library_index.json.sig") - } - return &LibrariesManager{ - Libraries: map[string]libraries.List{}, - IndexFile: indexFile, - IndexFileSignature: indexFileSignature, - DownloadsDir: downloadsDir, - Index: librariesindex.EmptyIndex, - } -} - -// LoadIndex reads a library_index.json from a file and returns -// the corresponding Index structure. -func (lm *LibrariesManager) LoadIndex() error { - logrus.WithField("index", lm.IndexFile).Info("Loading libraries index file") - index, err := librariesindex.LoadIndex(lm.IndexFile) - if err != nil { - lm.Index = librariesindex.EmptyIndex - return err - } - lm.Index = index - return nil -} - -// AddLibrariesDir adds path to the list of directories -// to scan when searching for libraries. If a path is already -// in the list it is ignored. -func (lm *LibrariesManager) AddLibrariesDir(path *paths.Path, location libraries.LibraryLocation) { - for _, dir := range lm.LibrariesDir { - if dir.Path.EquivalentTo(path) { - return - } - } - logrus.WithField("dir", path).WithField("location", location.String()).Info("Adding libraries dir") - lm.LibrariesDir = append(lm.LibrariesDir, &LibrariesDir{ - Path: path, - Location: location, - }) -} - -// AddPlatformReleaseLibrariesDir add the libraries directory in the -// specified PlatformRelease to the list of directories to scan when -// searching for libraries. -func (lm *LibrariesManager) AddPlatformReleaseLibrariesDir(plaftormRelease *cores.PlatformRelease, location libraries.LibraryLocation) { - path := plaftormRelease.GetLibrariesDir() - if path == nil { - return - } - for _, dir := range lm.LibrariesDir { - if dir.Path.EquivalentTo(path) { - return - } - } - logrus.WithField("dir", path).WithField("location", location.String()).Info("Adding libraries dir") - lm.LibrariesDir = append(lm.LibrariesDir, &LibrariesDir{ - Path: path, - Location: location, - PlatformRelease: plaftormRelease, - }) -} - -// RescanLibraries reload all installed libraries in the system. -func (lm *LibrariesManager) RescanLibraries() []*status.Status { - lm.clearLibraries() - statuses := []*status.Status{} - for _, dir := range lm.LibrariesDir { - if errs := lm.LoadLibrariesFromDir(dir); len(errs) > 0 { - statuses = append(statuses, errs...) - } - } - return statuses -} - -func (lm *LibrariesManager) getLibrariesDir(installLocation libraries.LibraryLocation) (*paths.Path, error) { - for _, dir := range lm.LibrariesDir { - if dir.Location == installLocation { - return dir.Path, nil - } - } - switch installLocation { - case libraries.User: - return nil, errors.New(tr("user directory not set")) - case libraries.IDEBuiltIn: - return nil, errors.New(tr("built-in libraries directory not set")) - default: - return nil, fmt.Errorf("libraries directory not set: %s", installLocation.String()) - } -} - -// LoadLibrariesFromDir loads all libraries in the given directory. Returns -// nil if the directory doesn't exists. -func (lm *LibrariesManager) LoadLibrariesFromDir(librariesDir *LibrariesDir) []*status.Status { - statuses := []*status.Status{} - subDirs, err := librariesDir.Path.ReadDir() - if os.IsNotExist(err) { - return statuses - } - if err != nil { - s := status.Newf(codes.FailedPrecondition, tr("reading dir %[1]s: %[2]s"), librariesDir.Path, err) - return append(statuses, s) - } - subDirs.FilterDirs() - subDirs.FilterOutHiddenFiles() - - for _, subDir := range subDirs { - library, err := libraries.Load(subDir, librariesDir.Location) - if err != nil { - s := status.Newf(codes.Internal, tr("loading library from %[1]s: %[2]s"), subDir, err) - statuses = append(statuses, s) - continue - } - library.ContainerPlatform = librariesDir.PlatformRelease - alternatives := lm.Libraries[library.Name] - alternatives.Add(library) - lm.Libraries[library.Name] = alternatives - } - - return statuses -} - -// LoadLibraryFromDir loads one single library from the libRootDir. -// libRootDir must point to the root of a valid library. -// An error is returned if the path doesn't exist or loading of the library fails. -func (lm *LibrariesManager) LoadLibraryFromDir(libRootDir *paths.Path, location libraries.LibraryLocation) error { - if libRootDir.NotExist() { - return fmt.Errorf(tr("library path does not exist: %s"), libRootDir) - } - - library, err := libraries.Load(libRootDir, location) - if err != nil { - return fmt.Errorf(tr("loading library from %[1]s: %[2]s"), libRootDir, err) - } - - alternatives := lm.Libraries[library.Name] - alternatives.Add(library) - lm.Libraries[library.Name] = alternatives - return nil -} - -// FindByReference return the installed libraries matching the Reference -// name and version or, if the version is nil, the libraries installed -// in the installLocation. -func (lm *LibrariesManager) FindByReference(libRef *librariesindex.Reference, installLocation libraries.LibraryLocation) libraries.List { - alternatives := lm.Libraries[libRef.Name] - if alternatives == nil { - return nil - } - return alternatives.FilterByVersionAndInstallLocation(libRef.Version, installLocation) -} - -func (lm *LibrariesManager) clearLibraries() { - for k := range lm.Libraries { - delete(lm.Libraries, k) - } -} diff --git a/arduino/serialutils/serialutils.go b/arduino/serialutils/serialutils.go deleted file mode 100644 index 7c6bac6ea98..00000000000 --- a/arduino/serialutils/serialutils.go +++ /dev/null @@ -1,216 +0,0 @@ -// This file is part of arduino-cli -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package serialutils - -import ( - "fmt" - "runtime" - "strings" - "time" - - "github.com/arduino/arduino-cli/i18n" - "github.com/pkg/errors" - "go.bug.st/serial" -) - -var tr = i18n.Tr - -// TouchSerialPortAt1200bps open and close the serial port at 1200 bps. This -// is used on many Arduino boards as a signal to put the board in "bootloader" -// mode. -func TouchSerialPortAt1200bps(port string) error { - // Open port - p, err := serial.Open(port, &serial.Mode{BaudRate: 1200}) - if err != nil { - return errors.WithMessage(err, tr("opening port at 1200bps")) - } - - if runtime.GOOS != "windows" { - // This is not required on Windows - // TODO: Investigate if it can be removed for other OS too - - // Set DTR to false - if err = p.SetDTR(false); err != nil { - p.Close() - return errors.WithMessage(err, tr("setting DTR to OFF")) - } - } - - // Close serial port - p.Close() - - // Scanning for available ports seems to open the port or - // otherwise assert DTR, which would cancel the WDT reset if - // it happens within 250 ms. So we wait until the reset should - // have already occurred before going on. - time.Sleep(500 * time.Millisecond) - - return nil -} - -func getPortMap() (map[string]bool, error) { - ports, err := serial.GetPortsList() - if err != nil { - return nil, errors.WithMessage(err, tr("listing serial ports")) - } - res := map[string]bool{} - for _, port := range ports { - res[port] = true - } - return res, nil -} - -// ResetProgressCallbacks is a struct that defines a bunch of function callback -// to observe the Reset function progress. -type ResetProgressCallbacks struct { - // TouchingPort is called to signal the 1200-bps touch of the reported port - TouchingPort func(port string) - // WaitingForNewSerial is called to signal that we are waiting for a new port - WaitingForNewSerial func() - // BootloaderPortFound is called to signal that the wait is completed and to - // report the port found, or the empty string if no ports have been found and - // the wait has timed-out. - BootloaderPortFound func(port string) - // Debug reports messages useful for debugging purposes. In normal conditions - // these messages should not be displayed to the user. - Debug func(msg string) -} - -// Reset a board using the 1200 bps port-touch and wait for new ports. -// Both reset and wait are optional: -// - if port is "" touch will be skipped -// - if wait is false waiting will be skipped -// If wait is true, this function will wait for a new port to appear and returns that -// one, otherwise the empty string is returned if the new port can not be detected or -// if the wait parameter is false. -// If dryRun is set to true this function will only emulate the port reset without actually -// performing it, this is useful to mockup for unit-testing and CI. -// In dryRun mode if the `portToTouch` ends with `"999"` and wait is true, Reset will -// return a new "bootloader" port as `portToTouch+"0"`. -// The error is set if the port listing fails. -func Reset(portToTouch string, wait bool, cb *ResetProgressCallbacks, dryRun bool) (string, error) { - getPorts := getPortMap // non dry-run default - if dryRun { - emulatedPort := portToTouch - getPorts = func() (map[string]bool, error) { - res := map[string]bool{} - if emulatedPort != "" { - res[emulatedPort] = true - } - if strings.HasSuffix(emulatedPort, "999") { - emulatedPort += "0" - } else if emulatedPort == "" { - emulatedPort = "newport" - } - return res, nil - } - } - - last, err := getPorts() - if cb != nil && cb.Debug != nil { - cb.Debug(fmt.Sprintf("LAST: %v", last)) - } - if err != nil { - return "", err - } - - if portToTouch != "" && last[portToTouch] { - if cb != nil && cb.Debug != nil { - cb.Debug(fmt.Sprintf("TOUCH: %v", portToTouch)) - } - if cb != nil && cb.TouchingPort != nil { - cb.TouchingPort(portToTouch) - } - if dryRun { - // do nothing! - } else { - if err := TouchSerialPortAt1200bps(portToTouch); err != nil && !wait { - return "", errors.Errorf(tr("TOUCH: error during reset: %s", err)) - } - } - } - - if !wait { - return "", nil - } - if cb != nil && cb.WaitingForNewSerial != nil { - cb.WaitingForNewSerial() - } - - deadline := time.Now().Add(10 * time.Second) - if dryRun { - // use a much lower timeout in dryRun - deadline = time.Now().Add(100 * time.Millisecond) - } - for time.Now().Before(deadline) { - now, err := getPorts() - if err != nil { - return "", err - } - if cb != nil && cb.Debug != nil { - cb.Debug(fmt.Sprintf("WAIT: %v", now)) - } - hasNewPorts := false - for p := range now { - if !last[p] { - hasNewPorts = true - break - } - } - - if hasNewPorts { - if cb != nil && cb.Debug != nil { - cb.Debug("New ports found!") - } - - // on OS X, if the port is opened too quickly after it is detected, - // a "Resource busy" error occurs, add a delay to workaround. - // This apply to other platforms as well. - time.Sleep(time.Second) - - // Some boards have a glitch in the bootloader: some user experienced - // the USB serial port appearing and disappearing rapidly before - // settling. - // This check ensure that the port is stable after one second. - check, err := getPorts() - if err != nil { - return "", err - } - if cb != nil && cb.Debug != nil { - cb.Debug(fmt.Sprintf("CHECK: %v", check)) - } - for p := range check { - if !last[p] { - if cb != nil && cb.BootloaderPortFound != nil { - cb.BootloaderPortFound(p) - } - return p, nil // Found it! - } - } - if cb != nil && cb.Debug != nil { - cb.Debug("Port check failed... still waiting") - } - } - - last = now - time.Sleep(250 * time.Millisecond) - } - - if cb != nil && cb.BootloaderPortFound != nil { - cb.BootloaderPortFound("") - } - return "", nil -} diff --git a/commands/board/board.go b/commands/board/board.go deleted file mode 100644 index f4da2ff6ae4..00000000000 --- a/commands/board/board.go +++ /dev/null @@ -1,20 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package board - -import "github.com/arduino/arduino-cli/i18n" - -var tr = i18n.Tr diff --git a/commands/board/testdata/package_index.json b/commands/board/testdata/package_index.json deleted file mode 100644 index e36f45cb5b0..00000000000 --- a/commands/board/testdata/package_index.json +++ /dev/null @@ -1,2523 +0,0 @@ -{ - "packages": [ - { - "name": "arduino", - "maintainer": "Arduino", - "websiteURL": "http://www.arduino.cc/", - "email": "packages@arduino.cc", - "help": { - "online": "http://www.arduino.cc/en/Reference/HomePage" - }, - "platforms": [ - { - "name": "Arduino AVR Boards", - "architecture": "avr", - "version": "1.8.3", - "category": "Arduino", - "help": { - "online": "http://www.arduino.cc/en/Reference/HomePage" - }, - "url": "http://downloads.arduino.cc/cores/avr-1.8.3.tar.bz2", - "archiveFileName": "avr-1.8.3.tar.bz2", - "checksum": "SHA-256:de8a9b982477762d3d3e52fc2b682cdd8ff194dc3f1d46f4debdea6a01b33c14", - "size": "4941548", - "boards": [ - { "name": "Arduino Yún" }, - { "name": "Arduino Uno" }, - { "name": "Arduino Uno WiFi" }, - { "name": "Arduino Diecimila" }, - { "name": "Arduino Nano" }, - { "name": "Arduino Mega" }, - { "name": "Arduino MegaADK" }, - { "name": "Arduino Leonardo" }, - { "name": "Arduino Leonardo Ethernet" }, - { "name": "Arduino Micro" }, - { "name": "Arduino Esplora" }, - { "name": "Arduino Mini" }, - { "name": "Arduino Ethernet" }, - { "name": "Arduino Fio" }, - { "name": "Arduino BT" }, - { "name": "Arduino LilyPadUSB" }, - { "name": "Arduino Lilypad" }, - { "name": "Arduino Pro" }, - { "name": "Arduino ATMegaNG" }, - { "name": "Arduino Robot Control" }, - { "name": "Arduino Robot Motor" }, - { "name": "Arduino Gemma" }, - { "name": "Adafruit Circuit Playground" }, - { "name": "Arduino Yún Mini" }, - { "name": "Arduino Industrial 101" }, - { "name": "Linino One" } - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "avr-gcc", - "version": "7.3.0-atmel3.6.1-arduino7" - }, - { - "packager": "arduino", - "name": "avrdude", - "version": "6.3.0-arduino17" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.3.0" - } - ] - } - ], - "tools": [ - { - "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", - "checksum": "SHA-256:ebe96b34c4f434667cab0187b881ed585e7c7eb990fe6b69be3c81ec7e11e845", - "size": "44423906" - }, - { - "host": "i686-mingw32", - "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", - "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", - "checksum": "SHA-256:fd8c111c861144f932728e00abd3f7d1107e186eb9cd6083a54c7236ea78b7c2", - "size": "84537449" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-mac.tar.gz", - "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-mac.tar.gz", - "checksum": "SHA-256:3598acf21600f17a8e4a4e8e193dc422b894dc09384759b270b2ece5facb59c2", - "size": "52518522" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-linux64.tar.gz", - "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-linux64.tar.gz", - "checksum": "SHA-256:d23f6626148396d6ec42a5b4d928955a703e0757829195fa71a939e5b86eecf6", - "size": "51395093" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-linux32.tar.gz", - "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-linux32.tar.gz", - "checksum": "SHA-256:ba1994235f69c526c564f65343f22ddbc9822b2ea8c5ee07dd79d89f6ace2498", - "size": "51029223" - } - ] - }, - { - "name": "arm-none-eabi-gcc", - "version": "7-2017q4", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2019-q4-major-linuxarm.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-7-2019-q4-major-linuxarm.tar.bz2", - "checksum": "SHA-256:34180943d95f759c66444a40b032f7dd9159a562670fc334f049567de140c51b", - "size": "96613739" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2018-q2-update-linuxarm64.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-7-2018-q2-update-linuxarm64.tar.bz2", - "checksum": "SHA-256:6fb5752fb4d11012bd0a1ceb93a19d0641ff7cf29d289b3e6b86b99768e66f76", - "size": "99558726" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2017-q4-major-win32-arduino1.zip", - "archiveFileName": "gcc-arm-none-eabi-7-2017-q4-major-win32-arduino1.zip", - "checksum": "SHA-256:96dd0091856f4d2eb21046eba571321feecf7d50b9c156f708b2a8b683903382", - "size": "131761924" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2017-q4-major-mac.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-7-2017-q4-major-mac.tar.bz2", - "checksum": "SHA-256:89b776c7cf0591c810b5b60067e4dc113b5b71bc50084a536e71b894a97fdccb", - "size": "104550003" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2017-q4-major-linux64.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-7-2017-q4-major-linux64.tar.bz2", - "checksum": "SHA-256:96a029e2ae130a1210eaa69e309ea40463028eab18ba19c1086e4c2dafe69a6a", - "size": "99857645" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2018-q2-update-linux32.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-7-2018-q2-update-linux32.tar.bz2", - "checksum": "SHA-256:090a0bc2b1956bc49392dff924a6c30fa57c88130097b1972204d67a45ce3cf3", - "size": "97427309" - } - ] - }, - { - "name": "bossac", - "version": "1.3-arduino", - "systems": [ - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-i686-linux-gnu.tar.bz2", - "archiveFileName": "bossac-1.3a-arduino-i686-linux-gnu.tar.bz2", - "checksum": "SHA-256:d6d10362f40729a7877e43474fcf02ad82cf83321cc64ca931f5c82b2d25d24f", - "size": "147359" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-x86_64-pc-linux-gnu.tar.bz2", - "archiveFileName": "bossac-1.3a-arduino-x86_64-pc-linux-gnu.tar.bz2", - "checksum": "SHA-256:c1daed033251296768fa8b63ad283e053da93427c0f3cd476a71a9188e18442c", - "size": "26179" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-i686-mingw32.tar.bz2", - "archiveFileName": "bossac-1.3a-arduino-i686-mingw32.tar.bz2", - "checksum": "SHA-256:a37727622e0f86cb4f2856ad0209568a5d804234dba3dc0778829730d61a5ec7", - "size": "265647" - }, - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-i386-apple-darwin11.tar.bz2", - "archiveFileName": "bossac-1.3a-arduino-i386-apple-darwin11.tar.bz2", - "checksum": "SHA-256:40770b225753e7a52bb165e8f37e6b760364f5c5e96048168d0178945bd96ad6", - "size": "39475" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.8.1-arduino2", - "systems": [ - { - "size": "24443285", - "checksum": "SHA-256:c19a7526235c364d7f62ec1a993d9b495973ba1813869ccf0241c65905896852", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.8.1-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "27152002", - "checksum": "SHA-256:24a931877bee5f36dc00a88877219a6d2f6a1fb7abb989fd04556b8432d2e14e", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "25876628", - "checksum": "SHA-256:2d701b4efbc8cec62dc299cde01730c5eebcf23d7e4393db8cf7744a9bf1d3de", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "46046691", - "checksum": "SHA-256:2eafb49fb803fa4d2c32d35e24c0b372fcd520ca0a790fa537a847179e382000", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.8.1-arduino2-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-i686-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.0.1-arduino2", - "systems": [ - { - "size": "264965", - "checksum": "SHA-256:71117cce0096dad6c091e2c34eb0b9a3386d3aec7d863d2da733d9e5eac3a6b1", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.0.1-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "292541", - "checksum": "SHA-256:2489004d1d98177eaf69796760451f89224007c98b39ebb5577a9a34f51425f1", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "283209", - "checksum": "SHA-256:6f633dd6270ad0d9ef19507bcbf8697b414a15208e4c0f71deec25ef89cdef3f", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "241618", - "checksum": "SHA-256:6c5483800ba753c80893607e30cade8ab77b182808fcc5ea15fa3019c63d76ae", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.0.1-arduino2-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-i686-mingw32.zip" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.8.1-arduino3", - "systems": [ - { - "size": "24447175", - "checksum": "SHA-256:28e207c66b3dc405367d0c5e68ce3c278e5ec3abb0e4974e7927fe0f9a532c40", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.8.1-arduino3-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-i386-apple-darwin11.tar.bz2" - }, - { - "size": "30556996", - "checksum": "SHA-256:028340abec6eb3085b82404dfc7ed143e1bb05b2da961b539ddcdba4a6f65533", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino3-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "28768022", - "checksum": "SHA-256:37796548ba9653267568f959cd8c7ebfe5b4bce4599898cf9f876d64e616cb87", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino3-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "46046917", - "checksum": "SHA-256:d6f0527793f9800f060408392a99eb290ed205730edbae43a1a25cbf6b6b588f", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.8.1-arduino3-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-i686-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.0.1-arduino3", - "systems": [ - { - "size": "264682", - "checksum": "SHA-256:df7cd4a76e45ab3767eb964f845f4d5e9d643df950ec32812923da1e9843d072", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.0.1-arduino3-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-i386-apple-darwin11.tar.bz2" - }, - { - "size": "748634", - "checksum": "SHA-256:bb7bff48f20a68e1fe559c3f3f644574df12ab5c98eb6a1491079f3c760434ad", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino3-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "495482", - "checksum": "SHA-256:96a0cfb83fe0452366159e3bf4e19ff10906a8957d1feafd3d98b49ab4b14405", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino3-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "241619", - "checksum": "SHA-256:ea59bfc2ee85039c85318b2ba52c47ef0573513444a785b72f59b22586a950f9", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.0.1-arduino3-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-i686-mingw32.zip" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.8.1-arduino5", - "systems": [ - { - "size": "24403768", - "checksum": "SHA-256:c8ffcd2db7a651b48ab4ea19db4b34fbae3e7f0210a0f294592af2bdabf2154b", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-4.8.1-arduino5-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "24437400", - "checksum": "SHA-256:111b3ef00d737d069eb237a8933406cbb928e4698689e24663cffef07688a901", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.8.1-arduino5-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i386-apple-darwin11.tar.bz2" - }, - { - "size": "27093036", - "checksum": "SHA-256:9054fcc174397a419ba56c4ce1bfcbcad275a6a080cc144905acc9b0351ee9cc", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino5-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "25882375", - "checksum": "SHA-256:7648b7f549b37191da0b0be53bae791b652f82ac3cb4e7877f85075aaf32141f", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino5-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "46044779", - "checksum": "SHA-256:d4303226a7b41d3c445d901b5aa5903458def3fc7b7ff4ffef37cabeb37d424d", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.8.1-arduino5-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i686-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.0.1-arduino5", - "systems": [ - { - "size": "267095", - "checksum": "SHA-256:23ea1341dbc117ec067f2eb1a498ad2bdd7d11fff0143c00b2e018c39804f6b4", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.0.1-arduino5-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "264894", - "checksum": "SHA-256:41af8d3b0a586853c8317b4fb5163ca0db594a1870ddf680fd988c42166fc3e5", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.0.1-arduino5-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-i386-apple-darwin11.tar.bz2" - }, - { - "size": "292629", - "checksum": "SHA-256:d826cca7383461f7e8adde686372cf900e9cb3afd639555cf2d6c645b283a476", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino5-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "283121", - "checksum": "SHA-256:5933d66927bce46ababa9b68a8b7f1d53f68c4f3ff7a5ce4b85d7cf4e6c6bfee", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino5-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "241634", - "checksum": "SHA-256:41f667f1f6a0ab8df46b4ffacd023176dcdef331d6db3b74bddd37d18cca0a44", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.0.1-arduino5-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-i686-mingw32.zip" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.9.2-atmel3.5.3-arduino", - "systems": [ - { - "size": "27046965", - "checksum": "SHA-256:adeee70be27cc3ee0e4b9e844610d9c534c7b21dae24ec3fa49808c2f04958de", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-i386-apple-darwin11.tar.bz2" - }, - { - "size": "27400001", - "checksum": "SHA-256:02dba9ee77694c23a4c304416a3808949c8faedf07f25a225a4189d850615ec6", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "29904544", - "checksum": "SHA-256:0711e885c0430859e7fea3831af8c69a0c25f92a90ecfda9281799a0acec7455", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "29077606", - "checksum": "SHA-256:fe0bb1d6369694779ceb671d457ccadbeafe855a11f6746b7db20055cea4df33", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "43847566", - "checksum": "SHA-256:445ce3117e87be7e196809fbbea373976160689b6d4b43dbf185eb4c914d1469", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-i686-mingw32.zip" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.9.2-atmel3.5.3-arduino2", - "systems": [ - { - "size": "27400889", - "checksum": "SHA-256:77f300d519bc6b9a25df17b36cb303218e9a258c059b2f6bff8f71a0d8f96821", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "27048070", - "checksum": "SHA-256:311258af188defe24a4b341e4e1f4dc93ca6c80516d3e3b55a2fc07a7050248b", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "43847945", - "checksum": "SHA-256:f8e6ede8746c70be01ec79a30803277cd94360cc5b2e104762da0fbcf536fcc6", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-mingw32.zip" - }, - { - "size": "29292729", - "checksum": "SHA-256:f108951e7c4dc90926d1fc76cc27549f6ea63c702a2bb7ff39647a19ae86ec68", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "29882960", - "checksum": "SHA-256:3903a6d1bb9fdd91727e504b5993d5501f119bcb7f99f7aee98a2101e5629188", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-x86_64-pc-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.9.2-atmel3.5.4-arduino2", - "systems": [ - { - "size": "27764772", - "checksum": "SHA-256:ee36009e19bd238d1f6351cbc9aa5db69714761f67dec4c1d69d5d5d7758720c", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.4-arduino2-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.4-arduino2-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "28574644", - "checksum": "SHA-256:67b3ed3555eacf0b4fc6f62240773b9f0220171fe4de26bb8d711547fc884730", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.4-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.4-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "44386446", - "checksum": "SHA-256:6044551cd729d88ea6ffcccf10aad1934c5b164d61f4f5890b0e78524ffff853", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.4-arduino2-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.4-arduino2-i686-mingw32.zip" - }, - { - "size": "29723974", - "checksum": "SHA-256:63a9d4cebbac06fd5fa8f48a2e2ba7d513837dcddc97f560129b4e466af901b5", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.4-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.4-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "30374404", - "checksum": "SHA-256:19480217f1524d78467b83cd742f503182bbcc76b5440093261f146828aa588c", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.4-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.4-arduino2-x86_64-pc-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "avr-gcc", - "version": "5.4.0-atmel3.6.1-arduino2", - "systems": [ - { - "size": "31449123", - "checksum": "SHA-256:6741f95cc3182a8729cf9670eb13d8dc5a19e881639ca61e53a2d78346a4e99f", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "33141295", - "checksum": "SHA-256:0fa9e4f2d6d09782dbc84dd91a302849cde2f192163cb9f29484c5f32785269a", - "host": "aarch64-linux-gnu", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "31894498", - "checksum": "SHA-256:abc50137543ba73e227b4d1b8510fff50a474bacd24f2c794f852904963849f8", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "45923772", - "checksum": "SHA-256:7eb5691a379b547798fae535b05d68bc02d3969f12d051b8a5a5f2f350ab0a7f", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-i686-w64-mingw32.zip" - }, - { - "size": "33022916", - "checksum": "SHA-256:51f87e04f3cdaa73565c751051ac118e02904ad8478f1475b300e1bffcd5538f", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "33522375", - "checksum": "SHA-256:05422b0d73b10357c12ea938f02cf50529422b89a4722756e70024aed3e69185", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-x86_64-pc-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "avr-gcc", - "version": "7.3.0-atmel3.6.1-arduino5", - "systems": [ - { - "size": "34462042", - "checksum": "SHA-256:f4acd5531c6b82c715e2edfa0aadb13fb718b4095b3ea1aa1f7fbde680069639", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "39381972", - "checksum": "SHA-256:dd9c70190be370a44fb47dab1514de6d8852b861dfa527964b65c740d8d50c10", - "host": "aarch64-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "38492678", - "checksum": "SHA-256:f48706317f04452544ab90e75bd1bb193f8af2cb1002f53aa702f27202c1b38f", - "host": "x86_64-apple-darwin14", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-x86_64-apple-darwin14.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-x86_64-apple-darwin14.tar.bz2" - }, - { - "size": "53727984", - "checksum": "SHA-256:6d4a5d089a36e5b5252befc73da204555b49e376ce7577ee19ca7f028b295830", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-i686-w64-mingw32.zip" - }, - { - "size": "38710087", - "checksum": "SHA-256:2ff12739d7ed09688d6b3c2c126e8df69b5bda1a07ab558799f0e576571e0e1d", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "39114120", - "checksum": "SHA-256:3effed8ffa1978b6e4a46f1aa2acc629e440b4d77244f71f9b79a916025206fb", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-x86_64-pc-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "avr-gcc", - "version": "7.3.0-atmel3.6.1-arduino7", - "systems": [ - { - "size": "34683056", - "checksum": "SHA-256:3903553d035da59e33cff9941b857c3cb379cb0638105dfdf69c97f0acc8e7b5", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "38045723", - "checksum": "SHA-256:03d322b9df6da17289e9e7c6233c34a8535d9c645c19efc772ba19e56914f339", - "host": "aarch64-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "36684546", - "checksum": "SHA-256:f6ed2346953fcf88df223469088633eb86de997fa27ece117fd1ef170d69c1f8", - "host": "x86_64-apple-darwin14", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-x86_64-apple-darwin14.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-x86_64-apple-darwin14.tar.bz2" - }, - { - "size": "52519412", - "checksum": "SHA-256:a54f64755fff4cb792a1495e5defdd789902a2a3503982e81b898299cf39800e", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-i686-w64-mingw32.zip" - }, - { - "size": "37176991", - "checksum": "SHA-256:954bbffb33545bcdcd473af993da2980bf32e8461ff55a18e0eebc7b2ef69a4c", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "37630618", - "checksum": "SHA-256:bd8c37f6952a2130ac9ee32c53f6a660feb79bee8353c8e289eb60fdcefed91e", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-x86_64-pc-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino2", - "systems": [ - { - "size": "643484", - "checksum": "SHA-256:26af86137d8a872f64d217cb262734860b36fe26d6d34faf72e951042f187885", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino2-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "653968", - "checksum": "SHA-256:32525ea3696c861030e1a6006a5f11971d1dad331e45bfa68dac35126476b04f", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.3.0-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "745081", - "checksum": "SHA-256:9635af5a35bdca11804c07582d7beec458140fb6e3308168c3deda18dc6790fa", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "731802", - "checksum": "SHA-256:790b6cb610c48e73a2a0f65dcee9903d2fd7f1b0a1f75008a9a21f50a60c7251", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "608496", - "checksum": "SHA-256:8eaf98ea41fbd4450483488ef31710cbcc43c0412dbc8e1e1b582feaab6eca30", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino2-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino6", - "systems": [ - { - "size": "644600", - "checksum": "SHA-256:2426207423d58eb0e5fc4df9493418f1cb54ba3f328fdc7c3bb582f920b9cbe7", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino6-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino6-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "696273", - "checksum": "SHA-256:d9a039c9e92d3dbb2011e75e6c044a1a4a2789e2fbf8386b1d580994811be084", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.3.0-arduino6-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino6-i386-apple-darwin11.tar.bz2" - }, - { - "size": "746653", - "checksum": "SHA-256:97b4875cad6110c70101bb776f3ac37b64a2e73f036cd0b10afb6f4be96a6621", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino6-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino6-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "733127", - "checksum": "SHA-256:5f4bc4b0957b1d34cec9908b7f84a7c297b894b39fe16a4992c284b24c00d6fb", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino6-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino6-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "645859", - "checksum": "SHA-256:7468a1bcdfa459d175a095b102c0de28efc466accfb104305fbcad7832659ddc", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino6-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino6-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino8", - "systems": [ - { - "size": "644550", - "checksum": "SHA-256:25a6834ae48019fccf37024236a1f79fe21760414292a4f3fa058d937ceee1ce", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino8-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino8-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "697268", - "checksum": "SHA-256:be8a33a7ec01bb7123279466ffa31371e0aa4fccefffcc23ce71810b59531947", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.3.0-arduino8-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino8-i386-apple-darwin11.tar.bz2" - }, - { - "size": "711544", - "checksum": "SHA-256:85f38d02e2398d3b7f93da2ca8b830ee65bb73f66cc7a7b30c466d3cebf2da6e", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino8-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino8-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "701718", - "checksum": "SHA-256:8e2e4bc71d22e9d11ed143763b97f3aa2d164cdeee678a9deaf5b36e245b2d20", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino8-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino8-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "645996", - "checksum": "SHA-256:3a7592f6c33efd658b820c73d1058d3c868a297cbddb37da5644973c3b516d5e", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino8-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino8-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino9", - "systems": [ - { - "size": "644550", - "checksum": "SHA-256:25a6834ae48019fccf37024236a1f79fe21760414292a4f3fa058d937ceee1ce", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino9-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "697309", - "checksum": "SHA-256:bfa06bc042dff252d3a8eded98da159484e75b46d2697da4d9446dcd2aea8465", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.3.0-arduino9-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-i386-apple-darwin11.tar.bz2" - }, - { - "size": "711229", - "checksum": "SHA-256:c8cccb84e2fe49ee837b24f0a60a99e9c371dae26e84c5b0b22b6b6aab2f1f6a", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino9-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "701590", - "checksum": "SHA-256:4235a2d58e3c3224c603d6c5f0610507ed6c48ebf4051fdcce9f77a7646e218b", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino9-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "645974", - "checksum": "SHA-256:f3c5cfa8d0b3b0caee81c5b35fb6acff89c342ef609bf4266734c6266a256d4f", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino9-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino14", - "systems": [ - { - "size": "219616", - "checksum": "SHA-256:d1a06275490d59a431c419788bbc53ffd5a79510dac1a35e63cf488621ba5589", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino14-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "229688", - "checksum": "SHA-256:439f5de150695e3732dd598bb182dae6ec1e3a5cdb580f855d9b58e485e84e66", - "host": "aarch64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino14-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "256917", - "checksum": "SHA-256:47d03991522722ce92120c60c4118685b7861909d895f34575001137961e4a63", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.3.0-arduino14-i386-apple-darwin12.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-i386-apple-darwin11.tar.bz2" - }, - { - "size": "253366", - "checksum": "SHA-256:7986e8f3059353dc08f9234f7dbc98d9b2fa2242f046f02a8243a060f7358bfc", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino14-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "244293", - "checksum": "SHA-256:4f100e3843c635064997df91d2a079ab15cd30d1d7fa227280abe6a7c3bc74ca", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino14-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "328363", - "checksum": "SHA-256:69293e0de2eff8de89f553477795c25005f674a320bbba4b0222beb0194aa297", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino14-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino16", - "systems": [ - { - "size": "219642", - "checksum": "SHA-256:6fc443445440f0e2d95d70013ed075bceffc2a1babc1e7d4f1ae69c3fe268c57", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino16-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "229997", - "checksum": "SHA-256:7a2726ab2fd18b910abc3d9dd33c4b40d18c34cf12c46f3367932e7fd87c0197", - "host": "aarch64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino16-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "279172", - "checksum": "SHA-256:f93dc12a4b30a335ab24b3c628e6cad0ebf2f8adfb7ef50f87c0fc17165b2156", - "host": "x86_64-apple-darwin15", - "archiveFileName": "avrdude-6.3.0-arduino16-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-i386-apple-darwin11.tar.bz2" - }, - { - "size": "254085", - "checksum": "SHA-256:57856d6e388d333d924afa3e2d5525161dbe0dc670e7caae2720e249606175a7", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino16-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "244393", - "checksum": "SHA-256:bdf73358991243a9a8de11a42c80c4ec4b14c82f2222cb0c3c181f62656c41fb", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino16-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "328456", - "checksum": "SHA-256:781c16a8bf813fa68fc0f47d427279053c9e098c3aed7165449ac4f0137304dd", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino16-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino17", - "systems": [ - { - "size": "219631", - "checksum": "SHA-256:2a8e68c5d803aa6f902ef219f177ec3a4c28275d85cbe272962ad2cd374f50d1", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino17-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "229852", - "checksum": "SHA-256:6cf948f751acfe7b96684537f2291c766ec8b54b4f7dc95539864821456fa9fc", - "host": "aarch64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino17-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "279045", - "checksum": "SHA-256:120cc9edaae699e7e9ac50b1b8eb0e7d51fdfa555bac54233c2511e6ee5418c9", - "host": "x86_64-apple-darwin12", - "archiveFileName": "avrdude-6.3.0-arduino17-x86_64-apple-darwin12.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-x86_64-apple-darwin12.tar.bz2" - }, - { - "size": "254271", - "checksum": "SHA-256:accdfb920af2aabf4f7461d2ac73c0751760f525216dc4e7657427a78c60d13d", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino17-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "244550", - "checksum": "SHA-256:5c8cc6c17db9300e1451fe41cd7178b0442b4490ee6fdbc0aed9811aef96c05f", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino17-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "328460", - "checksum": "SHA-256:e99188873c7c5ad8f8f906f068c33600e758b2e36cce3adbd518a21bd266749d", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino17-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "arduinoOTA", - "version": "1.0.0", - "systems": [ - { - "size": "2044124", - "checksum": "SHA-256:850a86876403cb45c944590a8cc7f9d8ef6d53ed853f7a9593ec395c4c1c6b2d", - "host": "i686-linux-gnu", - "archiveFileName": "arduinoOTA-1.0.0-linux32.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.0.0-linux32.tar.bz2" - }, - { - "size": "2178772", - "checksum": "SHA-256:f01f25e02787492a8a30414230635adae76ed85228045437433892d185991f9e", - "host": "x86_64-linux-gnu", - "archiveFileName": "arduinoOTA-1.0.0-linux64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.0.0-linux64.tar.bz2" - }, - { - "size": "1961623", - "checksum": "SHA-256:0ca6c0a93bfad50be0b6e62dc51ba6c3267b809bab4ec91ef9606ab7d838e46b", - "host": "arm-linux-gnueabihf", - "archiveFileName": "arduinoOTA-1.0.0-linuxarm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.0.0-linuxarm.tar.bz2" - }, - { - "size": "2180617", - "checksum": "SHA-256:e63c6034da2c1a7fe453eaa29c22df88627cc0aa3c5cbab7635c19367b74ee59", - "host": "i386-apple-darwin11", - "archiveFileName": "arduinoOTA-1.0.0-osx.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.0.0-osx.tar.bz2" - }, - { - "size": "2247970", - "checksum": "SHA-256:7bced1489217e07661ea1e75702a10a874b54f6146e2414ee47684c7eac014d1", - "host": "i686-mingw32", - "archiveFileName": "arduinoOTA-1.0.0-windows.zip", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.0.0-windows.zip" - } - ] - }, - { - "name": "arduinoOTA", - "version": "1.1.1", - "systems": [ - { - "size": "2045036", - "checksum": "SHA-256:7ac91ef1d5b357c0ceb790be02ef54986db598ba5a42fffbd6c8ecbdd6a271ef", - "host": "i686-linux-gnu", - "archiveFileName": "arduinoOTA-1.1.1-linux_386.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.1.1-linux_386.tar.bz2" - }, - { - "size": "2178288", - "checksum": "SHA-256:eb5ad0a457dd7f610f7f9b85454399c36755673d61a16f9d07cdfcbbb32ec277", - "host": "x86_64-linux-gnu", - "archiveFileName": "arduinoOTA-1.1.1-linux_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.1.1-linux_amd64.tar.bz2" - }, - { - "size": "1962115", - "checksum": "SHA-256:e4880d83df3d3f6f4b7b7bcde161e80a0556877468803a3c6066ee4ad18a374c", - "host": "arm-linux-gnueabihf", - "archiveFileName": "arduinoOTA-1.1.1-linux_arm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.1.1-linux_arm.tar.bz2" - }, - { - "size": "2181376", - "checksum": "SHA-256:a1ce7cf578982f3af5e4fab6b5839e44830d7a41cb093faba5c4b45952a6fa55", - "host": "i386-apple-darwin11", - "archiveFileName": "arduinoOTA-1.1.1-darwin_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.1.1-darwin_amd64.tar.bz2" - }, - { - "size": "2248431", - "checksum": "SHA-256:b2d3610c77f969a68cd75b6ea66bf63ec10c263937009d99147fbcd975c90006", - "host": "i686-mingw32", - "archiveFileName": "arduinoOTA-1.1.1-windows_386.zip", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.1.1-windows_386.zip" - } - ] - }, - { - "name": "arduinoOTA", - "version": "1.2.0", - "systems": [ - { - "size": "1839854", - "checksum": "SHA-256:7157a0b56620fb43b8dfb4afd958f8b294476a5ce4322c212167ca5d4092f2d9", - "host": "i686-linux-gnu", - "archiveFileName": "arduinoOTA-1.2.0-linux_386.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.0-linux_386.tar.bz2" - }, - { - "size": "1974030", - "checksum": "SHA-256:f672c1c407c4cb10729a1d891bdb8b010e2043e5415e1c2559bf39cdeaede78c", - "host": "x86_64-linux-gnu", - "archiveFileName": "arduinoOTA-1.2.0-linux_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.0-linux_amd64.tar.bz2" - }, - { - "size": "1787138", - "checksum": "SHA-256:ac49ffcd3239a6a52215f89dbda012d28f1296e6d79fc0efc3df06f919105744", - "host": "arm-linux-gnueabihf", - "archiveFileName": "arduinoOTA-1.2.0-linux_arm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.0-linux_arm.tar.bz2" - }, - { - "size": "1992476", - "checksum": "SHA-256:160e83e77d7a60514ca40fedf34f539124aac4b9ae0e2bfdf8fda11d958de38f", - "host": "i386-apple-darwin11", - "archiveFileName": "arduinoOTA-1.2.0-darwin_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.0-darwin_amd64.tar.bz2" - }, - { - "size": "2003964", - "checksum": "SHA-256:9d26747093ab7966bfeffced9dbd7def0e164bba0db89f5efb3f7f8011496c8f", - "host": "i686-mingw32", - "archiveFileName": "arduinoOTA-1.2.0-windows_386.zip", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.0-windows_386.zip" - } - ] - }, - { - "name": "arduinoOTA", - "version": "1.2.1", - "systems": [ - { - "size": "2133779", - "checksum": "SHA-256:2ffdf64b78486c1d0bf28dc23d0ca36ab75ca92e84b9487246da01888abea6d4", - "host": "i686-linux-gnu", - "archiveFileName": "arduinoOTA-1.2.1-linux_386.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-linux_386.tar.bz2" - }, - { - "size": "2257689", - "checksum": "SHA-256:5b82310d53688480f34a916aac31cd8f2dd2be65dd8fa6c2445262262e1948f9", - "host": "x86_64-linux-gnu", - "archiveFileName": "arduinoOTA-1.2.1-linux_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-linux_amd64.tar.bz2" - }, - { - "size": "2093132", - "checksum": "SHA-256:ad54b3dcd586212941fd992bab573b53d13207a419a3f2981c970a085ae0e9e0", - "host": "arm-linux-gnueabihf", - "archiveFileName": "arduinoOTA-1.2.1-linux_arm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-linux_arm.tar.bz2" - }, - { - "size": "2093132", - "checksum": "SHA-256:ad54b3dcd586212941fd992bab573b53d13207a419a3f2981c970a085ae0e9e0", - "host": "aarch64-linux-gnu", - "archiveFileName": "arduinoOTA-1.2.1-linux_arm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-linux_arm.tar.bz2" - }, - { - "size": "2244088", - "checksum": "SHA-256:93a6d9f9c0c765d237be1665bf7a0a8e2b0b6d2a8531eae92db807f5515088a7", - "host": "i386-apple-darwin11", - "archiveFileName": "arduinoOTA-1.2.1-darwin_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-darwin_amd64.tar.bz2" - }, - { - "size": "2237511", - "checksum": "SHA-256:e1ebf21f2c073fce25c09548c656da90d4ef6c078401ec6f323e0c58335115e5", - "host": "i686-mingw32", - "archiveFileName": "arduinoOTA-1.2.1-windows_386.zip", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-windows_386.zip" - } - ] - }, - { - "name": "arduinoOTA", - "version": "1.3.0", - "systems": [ - { - "size": "2633516", - "checksum": "SHA-256:3e7f59d6fbc7a724598303f0d3289d0c4fd137a8973437980658379a024887b2", - "host": "i686-linux-gnu", - "archiveFileName": "arduinoOTA-1.3.0-linux_386.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-linux_386.tar.bz2" - }, - { - "size": "2716248", - "checksum": "SHA-256:aa45ee2441ffc3a122daec5802941d1fa2ac47adf5c5c481b5e0daa4dc259ffa", - "host": "x86_64-linux-gnu", - "archiveFileName": "arduinoOTA-1.3.0-linux_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-linux_amd64.tar.bz2" - }, - { - "size": "2567435", - "checksum": "SHA-256:1888587409b56aef4ba0ab0e6703b3dccba7cc3a022756ba9b908247e5d5a656", - "host": "arm-linux-gnueabihf", - "archiveFileName": "arduinoOTA-1.3.0-linux_arm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-linux_arm.tar.bz2" - }, - { - "size": "2472427", - "checksum": "SHA-256:835ed8f37cffac37e979d1b0f6041559592d3d98be52f0e8611b76c4858e4113", - "host": "aarch64-linux-gnu", - "archiveFileName": "arduinoOTA-1.3.0-linux_arm64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-linux_arm64.tar.bz2" - }, - { - "size": "2766116", - "checksum": "SHA-256:d5d0f82ff829c0e434d12a2ee640a6fbd78f893ab37782edbb8b5bf2359d119e", - "host": "i386-apple-darwin11", - "archiveFileName": "arduinoOTA-1.3.0-darwin_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-darwin_amd64.tar.bz2" - }, - { - "size": "2768948", - "checksum": "SHA-256:051943844eee442460d2c709edefadca184287fffd2b6c100dd53aa742aa05f6", - "host": "i686-mingw32", - "archiveFileName": "arduinoOTA-1.3.0-windows_386.zip", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-windows_386.zip" - } - ] - }, - { - "name": "bossac", - "version": "1.5-arduino", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-arm-linux-gnueabihf.tar.bz2", - "archiveFileName": "bossac-1.5-arduino2-arm-linux-gnueabihf.tar.bz2", - "checksum": "SHA-256:7b61b7814e5b57bcbd853439fc9cd3e98af4abfdd369bf039c6917f9599e44b9", - "size": "199550" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-mingw32.tar.gz", - "archiveFileName": "bossac-1.5-arduino2-mingw32.tar.gz", - "checksum": "SHA-256:9d849a34f0b26c25c6a8c4d741cd749dea238cade73b57a3048f248c431d9cc9", - "size": "222283" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-i386-apple-darwin14.3.0.tar.gz", - "archiveFileName": "bossac-1.5-arduino2-i386-apple-darwin14.3.0.tar.gz", - "checksum": "SHA-256:8f07e50a1f887cb254092034c6a4482d73209568cd83cb624d6625d66794f607", - "size": "64120" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.5-arduino2-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:42785329155dcb39872d4d30a2a9d31e0f0ce3ae7e34a3ed3d840cbc909c4657", - "size": "30431" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-i486-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.5-arduino2-i486-linux-gnu.tar.gz", - "checksum": "SHA-256:ac56e553bbd6d992fa5592ace90996806230ab582f2bf9f8590836fec9dabef6", - "size": "29783" - } - ] - }, - { - "name": "bossac", - "version": "1.6-arduino", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-mingw32.tar.gz", - "archiveFileName": "bossac-1.6-arduino-mingw32.tar.gz", - "checksum": "SHA-256:b59d64d3f7a43c894d0fba2dd1241bbaeefedf8c902130a24d8ec63b08f9ff6a", - "size": "222517" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-i386-apple-darwin14.4.0.tar.gz", - "archiveFileName": "bossac-1.6-arduino-i386-apple-darwin14.4.0.tar.gz", - "checksum": "SHA-256:6b3b686a782b6587c64c85db80085c9089c5ea1b051e49e5af17b3c6109c8efa", - "size": "64538" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.6-arduino-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:2ce7a54d609b4ce3b678147202b2556dd1ce5b318de48a018c676521b994c7a7", - "size": "30649" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-i486-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.6-arduino-i486-linux-gnu.tar.gz", - "checksum": "SHA-256:5c320bf5cfdbf03e3f648642e6de325e459a061fcf96b2215cb955263f7467b2", - "size": "30072" - } - ] - }, - { - "name": "bossac", - "version": "1.6.1-arduino", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-arm-linux-gnueabihf.tar.bz2", - "archiveFileName": "bossac-1.6.1-arduino-arm-linux-gnueabihf.tar.bz2", - "checksum": "SHA-256:8c4e63db982178919c824e7a35580dffc95c3426afa7285de3eb583982d4d391", - "size": "201341" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-mingw32.tar.gz", - "archiveFileName": "bossac-1.6.1-arduino-mingw32.tar.gz", - "checksum": "SHA-256:d59f43e2e83a337d04c4ae88b195a4ee175b8d87fff4c43144d23412a4a9513b", - "size": "222918" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-i386-apple-darwin14.5.0.tar.gz", - "archiveFileName": "bossac-1.6.1-arduino-i386-apple-darwin14.5.0.tar.gz", - "checksum": "SHA-256:2f80ef569a3fb19da60ab3489e49d8fe7d4699876acf30ff4938c632230a09aa", - "size": "64587" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.6.1-arduino-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:b78afc66c00ccfdd69a08bd3959c260a0c64ccce78a71d5a1135ae4437ff40db", - "size": "30869" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-i486-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.6.1-arduino-i486-linux-gnu.tar.gz", - "checksum": "SHA-256:1e211347569d75193b337296a10dd25b0ce04419e3d7dc644355178b6b514f92", - "size": "30320" - } - ] - }, - { - "name": "bossac", - "version": "1.7.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-mingw32.tar.gz", - "archiveFileName": "bossac-1.7.0-mingw32.tar.gz", - "checksum": "SHA-256:9ef7d11b4fabca0adc17102a0290957d5cc26ce46b422c3a5344722c80acc7b2", - "size": "243066" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-i386-apple-darwin15.6.0.tar.gz", - "archiveFileName": "bossac-1.7.0-i386-apple-darwin15.6.0.tar.gz", - "checksum": "SHA-256:feac36ab38876c163dcf51bdbcfbed01554eede3d41c59a0e152e170fe5164d2", - "size": "63822" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.7.0-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:9475c0c8596c1ba12dcbce60e48fef7559087fa8eccbea7bab732113f3c181ee", - "size": "31373" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-i686-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.7.0-i686-linux-gnu.tar.gz", - "checksum": "SHA-256:17003b0bdc698d52eeb91b09c34aec501c6e0285b4aa88659ab7cc407a451a4d", - "size": "31086" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arm-linux-gnueabihf.tar.gz", - "archiveFileName": "bossac-1.7.0-arm-linux-gnueabihf.tar.gz", - "checksum": "SHA-256:09e46d0af61b2189caaac0bc6d4dd15cb22c167fdedc56ec98602dd5f10e68e0", - "size": "27382" - } - ] - }, - { - "name": "bossac", - "version": "1.7.0-arduino3", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-windows.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-windows.tar.gz", - "checksum": "SHA-256:62745cc5a98c26949ec9041ef20420643c561ec43e99dae659debf44e6836526", - "size": "3607421" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-osx.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-osx.tar.gz", - "checksum": "SHA-256:adb3c14debd397d8135e9e970215c6972f0e592c7af7532fa15f9ce5e64b991f", - "size": "75510" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-linux64.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-linux64.tar.gz", - "checksum": "SHA-256:1ae54999c1f97234a5c603eb99ad39313b11746a4ca517269a9285afa05f9100", - "size": "207271" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-linux32.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-linux32.tar.gz", - "checksum": "SHA-256:4ac4354746d1a09258f49a43ef4d1baf030d81c022f8434774268b00f55d3ec3", - "size": "193577" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-linuxarm.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-linuxarm.tar.gz", - "checksum": "SHA-256:626c6cc548046901143037b782bf019af1663bae0d78cf19181a876fb9abbb90", - "size": "193941" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-linuxaarch64.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-linuxaarch64.tar.gz", - "checksum": "SHA-256:a098b2cc23e29f0dc468416210d097c4a808752cd5da1a7b9b8b7b931a04180b", - "size": "268365" - } - ] - }, - { - "name": "bossac", - "version": "1.8.0-48-gb176eee", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.8-48-gb176eee-i686-w64-mingw32.tar.gz", - "archiveFileName": "bossac-1.8-48-gb176eee-i686-w64-mingw32.tar.gz", - "checksum": "SHA-256:4523a6897f3dfd673fe821c5cfbac8d6a12782e7a36b312b9ee7d41deec2a10a", - "size": "91219" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.8-48-gb176eee-i386-apple-darwin16.1.0.tar.gz", - "archiveFileName": "bossac-1.8-48-gb176eee-i386-apple-darwin16.1.0.tar.gz", - "checksum": "SHA-256:581ecc16021de36638ae14e9e064ffb4a1d532a11502f4252da8bcdf5ce1d649", - "size": "39150" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.8-48-gb176eee-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.8-48-gb176eee-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:1347eec67f5b90b785abdf6c8a8aa59129d0c016de7ff9b5ac1690378eacca3c", - "size": "37798" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.8-48-gb176eee-i486-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.8-48-gb176eee-i486-linux-gnu.tar.gz", - "checksum": "SHA-256:4c7492f876b8269aa9d8bcaad3aeda31acf1a0292383093b6d9f5f1d23fdafc3", - "size": "37374" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/bossac-1.8-48-gb176eee-arm-linux-gnueabihf.tar.gz", - "archiveFileName": "bossac-1.8-48-gb176eee-arm-linux-gnueabihf.tar.gz", - "checksum": "SHA-256:2001e4a592f3aefd22f213b1ddd6f5d8d5e74bd04080cf1b97c24cbaa81b10ed", - "size": "34825" - } - ] - }, - { - "name": "bossac", - "version": "1.9.1-arduino1", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-windows.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-windows.tar.gz", - "checksum": "SHA-256:fe2d6ef78ca711c78e104e258357ed06b09e95e9356dc72d8d2c9f6670af4b7a", - "size": "1260118" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-osx.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-osx.tar.gz", - "checksum": "SHA-256:c356632f98d5bae9b4f5d3ad823a5ee89b23078c2b835e8ac39a208f4855b0e6", - "size": "47835" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-linux64.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-linux64.tar.gz", - "checksum": "SHA-256:d3d324a3503a8db825c01f3b38519e4d4824c4d0e42cb399a16c1e074f9a9a86", - "size": "399453" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-linux32.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-linux32.tar.gz", - "checksum": "SHA-256:eec622b8b5a8642af94ec23febfe14c928edd734f144db73b146bf6708d2057f", - "size": "384792" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-linuxarm.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-linuxarm.tar.gz", - "checksum": "SHA-256:b42061d2fa2dbd6910d0d295e024f2cff7bb44f3e2ecc0bc2fe71a1f31b0ecba", - "size": "361799" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-linuxaarch64.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-linuxaarch64.tar.gz", - "checksum": "SHA-256:b271013841e1e25ee55f241e8c50a56ed775d3b322844e1e3099231ba17f3868", - "size": "442657" - } - ] - }, - { - "name": "bossac", - "version": "1.9.1-arduino2", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-windows.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-windows.tar.gz", - "checksum": "SHA-256:5c994d04354f0db8e4bea136f49866d2ba537f0af74b2e78026f2d4fc75e3e39", - "size": "1260628" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-osx.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-osx.tar.gz", - "checksum": "SHA-256:b7732129364a378676604db6579c9b8dab50dd965fb50d7a3afff1839c97ff80", - "size": "47870" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-linux64.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-linux64.tar.gz", - "checksum": "SHA-256:9eb549874391521999cee13dc823a2cfc8866b8246945339a281808d99c72d2c", - "size": "399532" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-linux32.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-linux32.tar.gz", - "checksum": "SHA-256:10d69f53f169f25afee2dd583dfd9dc803c10543e6c5260d106725cb0d174900", - "size": "384951" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-linuxarm.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-linuxarm.tar.gz", - "checksum": "SHA-256:c9539d161d23231b5beb1d09a71829744216c7f5bc2857a491999c3e567f5b19", - "size": "361915" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-linuxaarch64.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-linuxaarch64.tar.gz", - "checksum": "SHA-256:c167fa0ea223966f4d21f5592da3888bcbfbae385be6c5c4e41f8abff35f5cb1", - "size": "442853" - } - ] - }, - { - "name": "openocd", - "version": "0.9.0-arduino", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-arm-linux-gnueabihf.tar.bz2", - "archiveFileName": "OpenOCD-0.9.0-dev-arduino-arm-linux-gnueabihf.tar.bz2", - "checksum": "SHA-256:a84e7c4cba853f2c937d77286f8a0ca317447d3873e51cbd2a2d41424e044a18", - "size": "1402283" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-i686-pc-cygwin.tar.bz2", - "archiveFileName": "OpenOCD-0.9.0-arduino-i686-pc-cygwin.tar.bz2", - "checksum": "SHA-256:5310bdd3730168a33b09b68558e908ca8b2fec25620c488f50a5fb35d0d1effd", - "size": "2360705" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-x86_64-apple-darwin14.3.0.tar.bz2", - "archiveFileName": "OpenOCD-0.9.0-arduino-x86_64-apple-darwin14.3.0.tar.bz2", - "checksum": "SHA-256:ef90769c07b8018cec3a5054e690ac6c196e03720e102ac5038c3f9da4e44782", - "size": "2275101" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-x86_64-linux-gnu.tar.bz2", - "archiveFileName": "OpenOCD-0.9.0-arduino-x86_64-linux-gnu.tar.bz2", - "checksum": "SHA-256:c350409f7badf213dfcc516ea34289461ad92d87806e8e33945508a2c6b2c0b3", - "size": "1210796" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-i486-linux-gnu.tar.bz2", - "archiveFileName": "OpenOCD-0.9.0-arduino-i486-linux-gnu.tar.bz2", - "checksum": "SHA-256:4c9793dfd7822b0fc959d039e5ecabfa89092ee2911abfdc7b5905deb171499a", - "size": "1129654" - } - ] - }, - { - "name": "openocd", - "version": "0.9.0-arduino5-static", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino5-static-arm-linux-gnueabihf.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino5-static-arm-linux-gnueabihf.tar.bz2", - "checksum": "SHA-256:cef48c1448664612dd25168f0a56962aec4ce2f1d7c06dafd86a1b606dc8ae20", - "size": "1319000" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino5-static-i686-w64-mingw32.zip", - "archiveFileName": "openocd-0.9.0-arduino5-static-i686-w64-mingw32.zip", - "checksum": "SHA-256:54c70a0bfa1b0a3a592d6ee9ab532f9715e1dede2e7d46a3232abd72de274c5a", - "size": "1641209" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino5-static-x86_64-apple-darwin15.6.0.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino5-static-x86_64-apple-darwin15.6.0.tar.bz2", - "checksum": "SHA-256:14be5c5400e1a32c3d6a15f9c8d2f438634974ab263ff437b91b527e5b5d53a4", - "size": "1235752" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino5-static-x86_64-linux-gnu.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino5-static-x86_64-linux-gnu.tar.bz2", - "checksum": "SHA-256:8e378bdcd71c93a39818c16b49b91128c8028e3d9675551ba7eff39462391ba2", - "size": "1393855" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino5-static-i686-linux-gnu.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino5-static-i686-linux-gnu.tar.bz2", - "checksum": "SHA-256:8e0787f54e204fe6e9071b2b7edf8a5e695492696f1182d447647fe5c0bd55bd", - "size": "1341739" - } - ] - }, - { - "name": "openocd", - "version": "0.9.0-arduino6-static", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino6-static-arm-linux-gnueabihf.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino6-static-arm-linux-gnueabihf.tar.bz2", - "checksum": "SHA-256:5d596c90510f80d66f64a3615d74063a6a61f07b79be475592a3c76bf0deb3ca", - "size": "1319020" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino6-static-i686-w64-mingw32.zip", - "archiveFileName": "openocd-0.9.0-arduino6-static-i686-w64-mingw32.zip", - "checksum": "SHA-256:dde6c8cd42c179e819eeebee1d09829b0768ecb89b75fb10e1f053c1c65f9cf1", - "size": "1641514" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino6-static-x86_64-apple-darwin15.6.0.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino6-static-x86_64-apple-darwin15.6.0.tar.bz2", - "checksum": "SHA-256:00cd65339bc981ff0d4ab4876df8f89b1e60e476441fabca31d5fc2968bad9be", - "size": "1222523" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino6-static-x86_64-linux-gnu.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino6-static-x86_64-linux-gnu.tar.bz2", - "checksum": "SHA-256:d2f58bbd0661b755fdb8a307d197f119d838b066f5510b25ee766e47d1774543", - "size": "1394293" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino6-static-i686-linux-gnu.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino6-static-i686-linux-gnu.tar.bz2", - "checksum": "SHA-256:88d948c2062c73c0c93e649e099aaac4b009018cff365f44cfc5b47907043dc9", - "size": "1340444" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino7", - "systems": [ - { - "size": "1638575", - "checksum": "SHA-256:f8e0d783e80a3d5f75ee82e9542315871d46e1e283a97447735f1cbcd8986b06", - "host": "arm-linux-gnueabihf", - "archiveFileName": "openocd-0.10.0-arduino7-static-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "1580739", - "checksum": "SHA-256:d47d728a9a8d98f28dc22e31d7127ced9de0d5e268292bf935e050ef1d2bdfd0", - "host": "aarch64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino7-static-aarch64-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-aarch64-linux-gnu.tar.bz2" - }, - { - "size": "1498970", - "checksum": "SHA-256:1e539a587a0c54a551ce0dc542af10a2520b1c93bbfe2ca4ebaef4c83411df1a", - "host": "i386-apple-darwin11", - "archiveFileName": "openocd-0.10.0-arduino7-static-x86_64-apple-darwin13.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-x86_64-apple-darwin13.tar.bz2" - }, - { - "size": "1701581", - "checksum": "SHA-256:91d418bd309ec1e98795c622cd25c936aa537c0b3828fa5bcb191389378a1b27", - "host": "x86_64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino7-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "1626347", - "checksum": "SHA-256:08a18f39d72a5626383503053a30a5da89eed7fdccb6f514b20b77403eb1b2b4", - "host": "i686-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino7-static-i686-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-i686-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "2016965", - "checksum": "SHA-256:f251aec5471296e18aa540c3078d66475357a76a77c16c06a2d9345f4e12b3d5", - "host": "i686-mingw32", - "archiveFileName": "openocd-0.10.0-arduino7-static-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino8", - "systems": [ - { - "size": "1714346", - "checksum": "SHA-256:86c4ea3086b4a1475fd8a1e1daf4585748be093dad4160e816b1bf2502501fb2", - "host": "arm-linux-gnueabihf", - "archiveFileName": "openocd-0.10.0-arduino8-static-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "1778371", - "checksum": "SHA-256:500cb112ee92092bbfce69649b90d0284752c5766f5aaf5c24dc754100788ef9", - "host": "aarch64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino8-static-aarch64-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-aarch64-linux-gnu.tar.bz2" - }, - { - "size": "1653652", - "checksum": "SHA-256:584b513ebbc4a645a68234d964ba56f042aaf7668d84ba47398a07a294516cc4", - "host": "i386-apple-darwin11", - "archiveFileName": "openocd-0.10.0-arduino8-static-x86_64-apple-darwin13.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-x86_64-apple-darwin13.tar.bz2" - }, - { - "size": "1845547", - "checksum": "SHA-256:455d4123146bf6b4b095de86d3340fd01e39bba9c70b2f0bb8e979ac4dddac39", - "host": "x86_64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino8-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "1781892", - "checksum": "SHA-256:5b44889984daefa966b8251edb98445169107ca32f974ca598d4c59e7d2c8901", - "host": "i686-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino8-static-i686-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-i686-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "2190397", - "checksum": "SHA-256:35a92f32f2762ef9405d2c684ec7bea2e70c01068f380251aecd9290f5bd5b24", - "host": "i686-mingw32", - "archiveFileName": "openocd-0.10.0-arduino8-static-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino9", - "systems": [ - { - "size": "1714657", - "checksum": "SHA-256:b814b16b52cef21eacf456cc7a89d7b5d4cb1385bfb8fb82963b7d8151824d93", - "host": "aarch64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino9-static-aarch64-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-aarch64-linux-gnu.tar.bz2" - }, - { - "size": "1778177", - "checksum": "SHA-256:f0443e771f5e3a779949498d3c9bfffd1dd27cdf0ad7136a2db5e80447a7175a", - "host": "arm-linux-gnueabihf", - "archiveFileName": "openocd-0.10.0-arduino9-static-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "1782958", - "checksum": "SHA-256:a22872918df899cb808f9286141d42438ae5611156c143cfb692069f52a2bddd", - "host": "i686-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino9-static-i686-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-i686-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "2190484", - "checksum": "SHA-256:f53f9a2b7f48a2ebc00ea9196bf559d15987d3779bcea4118ebec8925da5a1f6", - "host": "i686-mingw32", - "archiveFileName": "openocd-0.10.0-arduino9-static-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-i686-w64-mingw32.zip" - }, - { - "size": "1655311", - "checksum": "SHA-256:6d47f97919f317bb6e5f1f903127604271d66d149f4625f29b8e0eb5f6c94c64", - "host": "i386-apple-darwin11", - "archiveFileName": "openocd-0.10.0-arduino9-static-x86_64-apple-darwin13.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-x86_64-apple-darwin13.tar.bz2" - }, - { - "size": "1844365", - "checksum": "SHA-256:f624552b5ba56aa78d0c1a0e5d18cf2b5694db2ed44080968e22aa1af8f23c1b", - "host": "x86_64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino9-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino12", - "systems": [ - { - "size": "1778706", - "checksum": "SHA-256:86e15186a44b87c00f5ddd9c05849d2ec107783dd18a5ac984ce2a71e34084ed", - "host": "aarch64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino12-static-aarch64-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-aarch64-linux-gnu.tar.bz2" - }, - { - "size": "1855234", - "checksum": "SHA-256:5c6ca6189f61894ee77b29bc342f96cd14e4d7627fabeb2a8d2e2c534316cc38", - "host": "arm-linux-gnueabihf", - "archiveFileName": "openocd-0.10.0-arduino12-static-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "1844359", - "checksum": "SHA-256:4938742d3fec62941187666b8ded44d8f6c7a404920ff49d97fca484b9fd08af", - "host": "i686-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino12-static-i686-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-i686-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "2276602", - "checksum": "SHA-256:1e23c0f1f809725db3e1f8d1e1f460a37fb7b2cf95e93c6e328e527501ab084c", - "host": "i686-mingw32", - "archiveFileName": "openocd-0.10.0-arduino12-static-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-i686-w64-mingw32.zip" - }, - { - "size": "1723600", - "checksum": "SHA-256:b40d135449401870302bec073326d6f1df79da38d9dd21326314a5a90189a06e", - "host": "i386-apple-darwin11", - "archiveFileName": "openocd-0.10.0-arduino12-static-x86_64-apple-darwin13.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-x86_64-apple-darwin13.tar.bz2" - }, - { - "size": "1918845", - "checksum": "SHA-256:bc48be10916f69f3a4b050f04babc14ee99dad1fc5da55ce606077991edab1d0", - "host": "x86_64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino12-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino13", - "systems": [ - { - "size": "1820630", - "checksum": "SHA-256:47ae7a1a7961ac9daef001b011505b38777baac3c02dd7e673f62601df841427", - "host": "aarch64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino13-static-aarch64-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-aarch64-linux-gnu.tar.bz2" - }, - { - "size": "1896478", - "checksum": "SHA-256:4dd38b701019ad2fbb58173a3bc6c58effd39501a4a8266256dfe169e7516655", - "host": "arm-linux-gnueabihf", - "archiveFileName": "openocd-0.10.0-arduino13-static-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "1883854", - "checksum": "SHA-256:788093504b25d2b9b772657215254ba178ed37773364ce240de68281efe40bd5", - "host": "i686-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino13-static-i686-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-i686-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "2334654", - "checksum": "SHA-256:2f3b87c644569f47780b16b071cd0929a64a8899ec769f4ca7480d20d5503365", - "host": "i686-mingw32", - "archiveFileName": "openocd-0.10.0-arduino13-static-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-i686-w64-mingw32.zip" - }, - { - "size": "1767137", - "checksum": "SHA-256:0f3f6e5e03355ffbbc84c4b4750e63c9315b7638c56d63df1b7795968208e6ba", - "host": "i386-apple-darwin11", - "archiveFileName": "openocd-0.10.0-arduino13-static-x86_64-apple-darwin13.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-x86_64-apple-darwin13.tar.bz2" - }, - { - "size": "1955043", - "checksum": "SHA-256:e4b2ffbc9a29be21c32c6921c2e7c0ee39c664c4faca28a5f839c1df32d3bd24", - "host": "x86_64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino13-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "CMSIS", - "version": "4.0.0-atmel", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", - "archiveFileName": "CMSIS-4.0.0.tar.bz2", - "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", - "size": "17642623" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", - "archiveFileName": "CMSIS-4.0.0.tar.bz2", - "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", - "size": "17642623" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", - "archiveFileName": "CMSIS-4.0.0.tar.bz2", - "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", - "size": "17642623" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", - "archiveFileName": "CMSIS-4.0.0.tar.bz2", - "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", - "size": "17642623" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", - "archiveFileName": "CMSIS-4.0.0.tar.bz2", - "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", - "size": "17642623" - } - ] - }, - { - "name": "CMSIS", - "version": "4.5.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "all", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - } - ] - }, - { - "name": "CMSIS-Atmel", - "version": "1.0.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - }, - { - "host": "all", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - } - ] - }, - { - "name": "CMSIS-Atmel", - "version": "1.1.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - }, - { - "host": "all", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - } - ] - }, - { - "name": "CMSIS-Atmel", - "version": "1.2.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "https://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "i686-pc-linux-gnu", - "url": "https://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "arm-linux-gnueabihf", - "url": "https://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "aarch64-linux-gnu", - "url": "https://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "all", - "url": "https://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - } - ] - }, - { - "name": "dfu-util", - "version": "0.9.0-arduino1", - "systems": [ - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino1-osx.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino1-osx.tar.bz2", - "size": "68361", - "checksum": "SHA-256:ea9216c627b7aa2d3a9bffab97df937e3c580cce66753c428dc697c854a35271" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino1-arm.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino1-arm.tar.bz2", - "size": "194826", - "checksum": "SHA-256:480637bf578e74b19753666a049f267d8ebcd9dfc8660d48f246bb76d5b806f9" - }, - { - "host": "x86_64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino1-linux64.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino1-linux64.tar.bz2", - "size": "66230", - "checksum": "SHA-256:e8a4d5477ab8c44d8528f35bc7dfafa5f3f04dace513906514aea31adc6fd3ba" - }, - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino1-linux32.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino1-linux32.tar.bz2", - "size": "62608", - "checksum": "SHA-256:17d69213914da04dadd6464d8adbcd3581dd930eb666b8f3336ab5383ce2127f" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino1-windows.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino1-windows.tar.bz2", - "size": "377537", - "checksum": "SHA-256:29be01b298348be8b822391be7147b71a969d47bd5457d5b24cfa5981dbce78e" - } - ] - }, - { - "name": "dfu-util", - "version": "0.9.0-arduino2", - "systems": [ - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino2-osx.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino2-osx.tar.bz2", - "size": "65137", - "checksum": "SHA-256:00e87178b81d5721f334d4b688267f19f36eed1d9710a912c9e44bb1a748f766" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino2-arm.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino2-arm.tar.bz2", - "size": "198568", - "checksum": "SHA-256:b364a8fe1de697d7dd6c4135d341ddff6dbda7e33c707321c7dceab85dfc560b" - }, - { - "host": "x86_64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino2-linux64.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino2-linux64.tar.bz2", - "size": "70996", - "checksum": "SHA-256:628e01772007e622dff6af82220c27bcdf1d0726ba886bd2b36807601f66e4e8" - }, - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino2-linux32.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino2-linux32.tar.bz2", - "size": "71002", - "checksum": "SHA-256:7a6cec3d89c65119c52b6109cd92a9ec84bdf8a9d12083444d2c89e7ac16c84b" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino2-windows.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino2-windows.tar.bz2", - "size": "394993", - "checksum": "SHA-256:8ec0e66acdc41941b6e25545f8c12e7eb7ba01a0bafae0b4ab4c99a70deb2ea5" - } - ] - }, - { - "name": "windows-drivers", - "version": "1.6.9", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/drivers-arduino-windows-1.6.9.zip", - "archiveFileName": "drivers-arduino-windows-1.6.9.zip", - "checksum": "SHA-256:10d456ab18d164d42545255db8bef4ac9e1bf660cc89acb7a0980b5a486654ac", - "size": "7071714" - } - ] - }, - { - "name": "windows-drivers", - "version": "1.8.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/drivers-arduino-windows-1.8.0.zip", - "archiveFileName": "drivers-arduino-windows-1.8.0.zip", - "checksum": "SHA-256:60614b326ad6860ed0cb99eb4cb2cb69f9ba6ba3784396d5441fe3f99004f8ec", - "size": "16302148" - } - ] - }, - { - "name": "dfu-util", - "version": "0.8.0-stm32-arduino1", - "systems": [ - { - "archiveFileName": "dfu-util-0.8.0-stm32-arduino1-darwin_amd64.tar.bz2", - "checksum": "SHA-256:bb146803a4152ce2647d72b2cde68ff95eb3017c2460f24c4db922adac1fbd12", - "host": "i386-apple-darwin11", - "size": "68381", - "url": "http://downloads.arduino.cc/arduino.org/dfu-util-0.8.0-stm32-arduino1-darwin_amd64.tar.bz2" - }, - { - "archiveFileName": "dfu-util-0.8.0-stm32-arduino1-linux_arm.tar.bz2", - "checksum": "SHA-256:607e6b0f2d2787ed7837f26da30b100131e3db207f84b8aca94a377db6e9ae50", - "host": "arm-linux-gnueabihf", - "size": "213760", - "url": "http://downloads.arduino.cc/arduino.org/dfu-util-0.8.0-stm32-arduino1-linux_arm.tar.bz2" - }, - { - "archiveFileName": "dfu-util-0.8.0-stm32-arduino1-stm32-linux_amd64.tar.bz2", - "checksum": "SHA-256:e44287494ebd22f59fc79766a94e20306e59c6c799f5bb1cddeed80db95000d9", - "host": "x86_64-linux-gnu", - "size": "68575", - "url": "http://downloads.arduino.cc/arduino.org/dfu-util-0.8.0-stm32-arduino1-linux_amd64.tar.bz2" - }, - { - "archiveFileName": "dfu-util-0.8.0-stm32-arduino1-linux_386.tar.bz2", - "checksum": "SHA-256:58131e35ad5d7053b281bc6176face7b117c5ad63331e43c6801f8ccd57f59a4", - "host": "i686-linux-gnu", - "size": "69097", - "url": "http://downloads.arduino.cc/arduino.org/dfu-util-0.8.0-stm32-arduino1-linux_386.tar.bz2" - }, - { - "archiveFileName": "dfu-util-0.8.0-stm32-arduino1-windows_386.tar.bz2", - "checksum": "SHA-256:25c2f84e1acf1f10fd2aa1afced441366d4545fd41eae56e64f0b990b4ce9f55", - "host": "i686-mingw32", - "size": "159753", - "url": "http://downloads.arduino.cc/arduino.org/dfu-util-0.8.0-stm32-arduino1-windows_386.tar.bz2" - } - ] - }, - { - "name": "arduinoSTM32load", - "version": "2.0.0", - "systems": [ - { - "archiveFileName": "arduinoSTM32load-2.0.0-darwin_amd64.tar.bz2", - "checksum": "SHA-256:92fb9714091850febaa9d159501cbca5ba68d03020e5e2d4eff596154040bfaa", - "host": "i386-apple-darwin11", - "size": "807514", - "url": "http://downloads.arduino.cc/arduino.org/arduinoSTM32load-2.0.0-darwin_amd64.tar.bz2" - }, - { - "archiveFileName": "arduinoSTM32load-2.0.0-linux_arm.tar.bz2", - "checksum": "SHA-256:fc0d8058b57bda849e1ffc849f83f54b0b85f97954176db317da1c745c174e08", - "host": "arm-linux-gnueabihf", - "size": "809480", - "url": "http://downloads.arduino.cc/arduino.org/arduinoSTM32load-2.0.0-linux_arm.tar.bz2" - }, - { - "archiveFileName": "arduinoSTM32load-2.0.0-linux_amd64.tar.bz2", - "checksum": "SHA-256:0ed5cf1ea05fe6c33567817c54daf9c296d058a3607c428e0b0bd9aad89b9809", - "host": "x86_64-linux-gnu", - "size": "818885", - "url": "http://downloads.arduino.cc/arduino.org/arduinoSTM32load-2.0.0-linux_amd64.tar.bz2" - }, - { - "archiveFileName": "arduinoSTM32load-2.0.0-linux_386.tar.bz2", - "checksum": "SHA-256:fad50abaaca034e6d647d09b042291b761982aabfd42b6156411c86e4f873ca7", - "host": "i686-linux-gnu", - "size": "814283", - "url": "http://downloads.arduino.cc/arduino.org/arduinoSTM32load-2.0.0-linux_386.tar.bz2" - }, - { - "archiveFileName": "arduinoSTM32load-2.0.0-windows_386.tar.bz2", - "checksum": "SHA-256:79467c0cde4b88c4884acb09445a2186af4e41f901eee56e99b5d89b7065d085", - "host": "i686-mingw32", - "size": "786335", - "url": "http://downloads.arduino.cc/arduino.org/arduinoSTM32load-2.0.0-windows_386.tar.bz2" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino1-static", - "systems": [ - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/arduino.org/OpenOCD-0.10.0-nrf52-osx-static.tar.gz", - "archiveFileName": "OpenOCD-0.10.0-nrf52-osx-static.tar.gz", - "size": "1529841", - "checksum": "SHA-256:46bd02c1d42c5d94c4936e4d4a0ff29697b621840be9a6f882e316203122049d" - }, - { - "host": "x86_64-linux-gnu", - "url": "http://downloads.arduino.cc/arduino.org/OpenOCD-0.10.0-nrf52-linux64-static.tar.gz", - "archiveFileName": "OpenOCD-0.10.0-nrf52-linux64-static.tar.gz", - "size": "1777984", - "checksum": "SHA-256:1c9ae77930dd7377d8c13f84abe7307b67fdcd6da74cc1ce269a79e138e7a00a" - }, - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/arduino.org/OpenOCD-0.10.0-nrf52-linux32-static.tar.gz", - "archiveFileName": "OpenOCD-0.10.0-nrf52-linux32-static.tar.gz", - "size": "1713236", - "checksum": "SHA-256:777371df34828810e1bea623b0f7c98f28fedf30fd3bc8e7d8f0a5745fb4e258" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/arduino.org/OpenOCD-0.10.0-nrf52-win32-static.zip", - "archiveFileName": "OpenOCD-0.10.0-nrf52-win32-static.zip", - "size": "1773642", - "checksum": "SHA-256:9371b25d000bd589c058a5bf10720617adb91fd8b8a21d2e887cf45eaa2df93c" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/arduino.org/OpenOCD-0.10.0-nrf52-arm-static.tar.gz", - "archiveFileName": "OpenOCD-0.10.0-nrf52-arm-static.tar.gz", - "size": "1526863", - "checksum": "SHA-256:b5172422077f87ff05b76ff40034979678c9c640e9d08cee15ce55e40dd8c929" - } - ] - }, - { - "name": "fwupdater", - "version": "0.0.6", - "systems": [ - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-linux32.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.6-linux32.tar.bz2", - "checksum": "SHA-256:8c4e562a8e6fa3d916c4bf6bb24d7eec0df013d8cc45dff187e5c63086a92c11", - "size": "7334059" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-linux64.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.6-linux64.tar.bz2", - "checksum": "SHA-256:0e9132518acfe66e5a4e17ba4b6dd0c89dbd90cc0d9b4a54e007ac24d51fd36a", - "size": "7383853" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-windows.zip", - "archiveFileName": "FirmwareUpdater-0.0.6-windows.zip", - "checksum": "SHA-256:33a92661f43b8d025ca5f57be1116537ed153703067d9c86297619d58988feff", - "size": "7580663" - }, - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-osx.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.6-osx.tar.bz2", - "checksum": "SHA-256:3584d7581ff2469bdfde9de6f57d87b2a0370de5c902e9df687b7322a5405018", - "size": "7368819" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-linuxarm.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.6-linuxarm.tar.bz2", - "checksum": "SHA-256:276f027e552eb620064b09591c7a7c79927c93c017428436c81f71bad666803c", - "size": "7180391" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-linuxarm64.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.6-linuxarm64.tar.bz2", - "checksum": "SHA-256:d6a2e72b4869c031b434380da6e6a8a4a6269f8ee6312a3d23e85ea133a37ae9", - "size": "7149332" - } - ] - }, - { - "name": "fwupdater", - "version": "0.0.7", - "systems": [ - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-linux32.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.7-linux32.tar.bz2", - "checksum": "SHA-256:05e26d5df253246cf68ba8a8f5f2de1032ac6f4d7af5310b8080ef6f54030fb4", - "size": "13077590" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-linux64.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.7-linux64.tar.bz2", - "checksum": "SHA-256:e8a36b7ae19060748b8b0540c9c0c9341d8d4c7a630441922a030223f767258d", - "size": "13134534" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-windows.zip", - "archiveFileName": "FirmwareUpdater-0.0.7-windows.zip", - "checksum": "SHA-256:e881dd8a4bbb35f7271157e8dd226c2e032ac1115106170b0aaf9c969817df86", - "size": "13337495" - }, - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-osx.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.7-osx.tar.bz2", - "checksum": "SHA-256:647ad713d68a1531ba56c88e5b3db9516cc0072ca1d401de5142d85ffcfd931a", - "size": "13064291" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-linuxarm.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.7-linuxarm.tar.bz2", - "checksum": "SHA-256:b6e09c07e816a35935585db07e07437023d44e66d1d2f05861708ea6ceff7629", - "size": "12929770" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-linuxarm64.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.7-linuxarm64.tar.bz2", - "checksum": "SHA-256:620f81148b13f70cdecbe59bbcbf605c7e0aae85f9cbee8ec48202f6018f23ce", - "size": "12897349" - } - ] - }, - { - "name": "nrf5x-cl-tools", - "version": "9.3.1", - "systems": [ - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/arduino.org/nRF5x-Command-Line-Tools_9_3_1_OSX.tar.bz2", - "archiveFileName": "nRF5x-Command-Line-Tools_9_3_1_OSX.tar.bz2", - "size": "341674", - "checksum": "SHA-256:41e4580271b39459a7ef1b078d11ee08d8f4f23fab7ff03f3fe8c3bc986a0ed4" - }, - { - "host": "x86_64-linux-gnu", - "url": "http://downloads.arduino.cc/arduino.org/nRF5x-Command-Line-Tools_9_3_1_Linux-x86_64.tar.bz2", - "archiveFileName": "nRF5x-Command-Line-Tools_9_3_1_Linux-x86_64.tar.bz2", - "size": "167414", - "checksum": "SHA-256:4074fffe678d60968006a72edd182c6506b264472c9957bc3eaa39336bfcf972" - }, - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/arduino.org/nRF5x-Command-Line-Tools_9_3_1_Linux-i386.tar.bz2", - "archiveFileName": "nRF5x-Command-Line-Tools_9_3_1_Linux-i386.tar.bz2", - "size": "155680", - "checksum": "SHA-256:e880059b303e5aad3a8b34c83dfd8c22beee77ae2074fbd37511e3baa91464a5" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/arduino.org/nRF5x-Command-Line-Tools_9_3_1_Win32.tar.bz2", - "archiveFileName": "nRF5x-Command-Line-Tools_9_3_1_Win32.tar.bz2", - "size": "812257", - "checksum": "SHA-256:a4467350e39314690cec2e96b80e7e3cab463c84eff9b81593ad57754d76ee00" - } - ] - } - ] - } - ] -} diff --git a/arduino/errors.go b/commands/cmderrors/cmderrors.go similarity index 65% rename from arduino/errors.go rename to commands/cmderrors/cmderrors.go index c9f81e8f270..bcc33bc3a8f 100644 --- a/arduino/errors.go +++ b/commands/cmderrors/cmderrors.go @@ -13,21 +13,19 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package arduino +package cmderrors import ( "fmt" "strings" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) -var tr = i18n.Tr - func composeErrorMsg(msg string, cause error) string { if cause == nil { return msg @@ -37,19 +35,19 @@ func composeErrorMsg(msg string, cause error) string { // CommandError is an error that may be converted into a gRPC status. type CommandError interface { - // ToRPCStatus convertes the error into a *status.Status - ToRPCStatus() *status.Status + // GRPCStatus convertes the error into a *status.Status + GRPCStatus() *status.Status } // InvalidInstanceError is returned if the instance used in the command is not valid. type InvalidInstanceError struct{} func (e *InvalidInstanceError) Error() string { - return tr("Invalid instance") + return i18n.Tr("Invalid instance") } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidInstanceError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidInstanceError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -59,11 +57,11 @@ type InvalidFQBNError struct { } func (e *InvalidFQBNError) Error() string { - return composeErrorMsg(tr("Invalid FQBN"), e.Cause) + return composeErrorMsg(i18n.Tr("Invalid FQBN"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidFQBNError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidFQBNError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -77,11 +75,11 @@ type InvalidURLError struct { } func (e *InvalidURLError) Error() string { - return composeErrorMsg(tr("Invalid URL"), e.Cause) + return composeErrorMsg(i18n.Tr("Invalid URL"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidURLError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidURLError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -95,11 +93,11 @@ type InvalidLibraryError struct { } func (e *InvalidLibraryError) Error() string { - return composeErrorMsg(tr("Invalid library"), e.Cause) + return composeErrorMsg(i18n.Tr("Invalid library"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidLibraryError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidLibraryError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -113,11 +111,11 @@ type InvalidVersionError struct { } func (e *InvalidVersionError) Error() string { - return composeErrorMsg(tr("Invalid version"), e.Cause) + return composeErrorMsg(i18n.Tr("Invalid version"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidVersionError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidVersionError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -132,15 +130,15 @@ type NoBoardsDetectedError struct { } func (e *NoBoardsDetectedError) Error() string { - return tr( + return i18n.Tr( "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be identified", - e.Port.Address, - e.Port.Protocol, + e.Port.GetAddress(), + e.Port.GetProtocol(), ) } -// ToRPCStatus converts the error into a *status.Status -func (e *NoBoardsDetectedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *NoBoardsDetectedError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -152,15 +150,15 @@ type MultipleBoardsDetectedError struct { } func (e *MultipleBoardsDetectedError) Error() string { - return tr( + return i18n.Tr( "Please specify an FQBN. Multiple possible boards detected on port %[1]s with protocol %[2]s", - e.Port.Address, - e.Port.Protocol, + e.Port.GetAddress(), + e.Port.GetProtocol(), ) } -// ToRPCStatus converts the error into a *status.Status -func (e *MultipleBoardsDetectedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MultipleBoardsDetectedError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -168,11 +166,11 @@ func (e *MultipleBoardsDetectedError) ToRPCStatus() *status.Status { type MissingFQBNError struct{} func (e *MissingFQBNError) Error() string { - return tr("Missing FQBN (Fully Qualified Board Name)") + return i18n.Tr("Missing FQBN (Fully Qualified Board Name)") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingFQBNError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingFQBNError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -182,15 +180,15 @@ type UnknownFQBNError struct { } func (e *UnknownFQBNError) Error() string { - return composeErrorMsg(tr("Unknown FQBN"), e.Cause) + return composeErrorMsg(i18n.Tr("Unknown FQBN"), e.Cause) } func (e *UnknownFQBNError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *UnknownFQBNError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *UnknownFQBNError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -201,15 +199,15 @@ type UnknownProfileError struct { } func (e *UnknownProfileError) Error() string { - return composeErrorMsg(tr("Profile '%s' not found", e.Profile), e.Cause) + return composeErrorMsg(i18n.Tr("Profile '%s' not found", e.Profile), e.Cause) } func (e *UnknownProfileError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *UnknownProfileError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *UnknownProfileError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -219,15 +217,15 @@ type InvalidProfileError struct { } func (e *InvalidProfileError) Error() string { - return composeErrorMsg(tr("Invalid profile"), e.Cause) + return composeErrorMsg(i18n.Tr("Invalid profile"), e.Cause) } func (e *InvalidProfileError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidProfileError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidProfileError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -235,11 +233,11 @@ func (e *InvalidProfileError) ToRPCStatus() *status.Status { type MissingPortAddressError struct{} func (e *MissingPortAddressError) Error() string { - return tr("Missing port address") + return i18n.Tr("Missing port address") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingPortAddressError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingPortAddressError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -247,11 +245,11 @@ func (e *MissingPortAddressError) ToRPCStatus() *status.Status { type MissingPortProtocolError struct{} func (e *MissingPortProtocolError) Error() string { - return tr("Missing port protocol") + return i18n.Tr("Missing port protocol") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingPortProtocolError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingPortProtocolError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -259,11 +257,11 @@ func (e *MissingPortProtocolError) ToRPCStatus() *status.Status { type MissingPortError struct{} func (e *MissingPortError) Error() string { - return tr("Missing port") + return i18n.Tr("Missing port") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingPortError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingPortError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -273,11 +271,11 @@ type NoMonitorAvailableForProtocolError struct { } func (e *NoMonitorAvailableForProtocolError) Error() string { - return tr("No monitor available for the port protocol %s", e.Protocol) + return i18n.Tr("No monitor available for the port protocol %s", e.Protocol) } -// ToRPCStatus converts the error into a *status.Status -func (e *NoMonitorAvailableForProtocolError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *NoMonitorAvailableForProtocolError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -285,23 +283,24 @@ func (e *NoMonitorAvailableForProtocolError) ToRPCStatus() *status.Status { type MissingProgrammerError struct{} func (e *MissingProgrammerError) Error() string { - return tr("Missing programmer") + return i18n.Tr("Missing programmer") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingProgrammerError) ToRPCStatus() *status.Status { - return status.New(codes.InvalidArgument, e.Error()) +// GRPCStatus converts the error into a *status.Status +func (e *MissingProgrammerError) GRPCStatus() *status.Status { + s, _ := status.New(codes.InvalidArgument, e.Error()).WithDetails(&rpc.MissingProgrammerError{}) + return s } // ProgrammerRequiredForUploadError is returned when the upload can be done only using a programmer type ProgrammerRequiredForUploadError struct{} func (e *ProgrammerRequiredForUploadError) Error() string { - return tr("A programmer is required to upload") + return i18n.Tr("A programmer is required to upload") } -// ToRPCStatus converts the error into a *status.Status -func (e *ProgrammerRequiredForUploadError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *ProgrammerRequiredForUploadError) GRPCStatus() *status.Status { st, _ := status. New(codes.InvalidArgument, e.Error()). WithDetails(&rpc.ProgrammerIsRequiredForUploadError{}) @@ -319,8 +318,8 @@ func (ife *InitFailedError) Error() string { return ife.Cause.Error() } -// ToRPCStatus converts the error into a *status.Status -func (ife *InitFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (ife *InitFailedError) GRPCStatus() *status.Status { st, _ := status. New(ife.Code, ife.Cause.Error()). WithDetails(&rpc.FailedInstanceInitError{ @@ -337,15 +336,15 @@ type ProgrammerNotFoundError struct { } func (e *ProgrammerNotFoundError) Error() string { - return composeErrorMsg(tr("Programmer '%s' not found", e.Programmer), e.Cause) + return composeErrorMsg(i18n.Tr("Programmer '%s' not found", e.Programmer), e.Cause) } func (e *ProgrammerNotFoundError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *ProgrammerNotFoundError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *ProgrammerNotFoundError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -356,15 +355,15 @@ type MonitorNotFoundError struct { } func (e *MonitorNotFoundError) Error() string { - return composeErrorMsg(tr("Monitor '%s' not found", e.Monitor), e.Cause) + return composeErrorMsg(i18n.Tr("Monitor '%s' not found", e.Monitor), e.Cause) } func (e *MonitorNotFoundError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *MonitorNotFoundError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MonitorNotFoundError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -375,11 +374,11 @@ type InvalidPlatformPropertyError struct { } func (e *InvalidPlatformPropertyError) Error() string { - return tr("Invalid '%[1]s' property: %[2]s", e.Property, e.Value) + return i18n.Tr("Invalid '%[1]s' property: %[2]s", e.Property, e.Value) } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidPlatformPropertyError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidPlatformPropertyError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -389,11 +388,11 @@ type MissingPlatformPropertyError struct { } func (e *MissingPlatformPropertyError) Error() string { - return tr("Property '%s' is undefined", e.Property) + return i18n.Tr("Property '%s' is undefined", e.Property) } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingPlatformPropertyError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingPlatformPropertyError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -404,11 +403,11 @@ type PlatformNotFoundError struct { } func (e *PlatformNotFoundError) Error() string { - return composeErrorMsg(tr("Platform '%s' not found", e.Platform), e.Cause) + return composeErrorMsg(i18n.Tr("Platform '%s' not found", e.Platform), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *PlatformNotFoundError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *PlatformNotFoundError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -422,11 +421,11 @@ type PlatformLoadingError struct { } func (e *PlatformLoadingError) Error() string { - return composeErrorMsg(tr("Error loading hardware platform"), e.Cause) + return composeErrorMsg(i18n.Tr("Error loading hardware platform"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *PlatformLoadingError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *PlatformLoadingError) GRPCStatus() *status.Status { s, _ := status.New(codes.FailedPrecondition, e.Error()). WithDetails(&rpc.PlatformLoadingError{}) return s @@ -443,11 +442,11 @@ type LibraryNotFoundError struct { } func (e *LibraryNotFoundError) Error() string { - return composeErrorMsg(tr("Library '%s' not found", e.Library), e.Cause) + return composeErrorMsg(i18n.Tr("Library '%s' not found", e.Library), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *LibraryNotFoundError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *LibraryNotFoundError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -462,11 +461,11 @@ type LibraryDependenciesResolutionFailedError struct { } func (e *LibraryDependenciesResolutionFailedError) Error() string { - return composeErrorMsg(tr("No valid dependencies solution found"), e.Cause) + return composeErrorMsg(i18n.Tr("No valid dependencies solution found"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *LibraryDependenciesResolutionFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *LibraryDependenciesResolutionFailedError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -480,11 +479,11 @@ type PlatformAlreadyAtTheLatestVersionError struct { } func (e *PlatformAlreadyAtTheLatestVersionError) Error() string { - return tr("Platform '%s' is already at the latest version", e.Platform) + return i18n.Tr("Platform '%s' is already at the latest version", e.Platform) } -// ToRPCStatus converts the error into a *status.Status -func (e *PlatformAlreadyAtTheLatestVersionError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *PlatformAlreadyAtTheLatestVersionError) GRPCStatus() *status.Status { st, _ := status. New(codes.AlreadyExists, e.Error()). WithDetails(&rpc.AlreadyAtLatestVersionError{}) @@ -495,11 +494,11 @@ func (e *PlatformAlreadyAtTheLatestVersionError) ToRPCStatus() *status.Status { type MissingSketchPathError struct{} func (e *MissingSketchPathError) Error() string { - return tr("Missing sketch path") + return i18n.Tr("Missing sketch path") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingSketchPathError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingSketchPathError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -509,7 +508,7 @@ type CantCreateSketchError struct { } func (e *CantCreateSketchError) Error() string { - return composeErrorMsg(tr("Can't create sketch"), e.Cause) + return composeErrorMsg(i18n.Tr("Can't create sketch"), e.Cause) } func (e *CantCreateSketchError) Unwrap() error { @@ -522,7 +521,7 @@ type CantUpdateSketchError struct { } func (e *CantUpdateSketchError) Error() string { - return composeErrorMsg(tr("Can't update sketch"), e.Cause) + return composeErrorMsg(i18n.Tr("Can't update sketch"), e.Cause) } func (e *CantUpdateSketchError) Unwrap() error { @@ -535,15 +534,15 @@ type CantOpenSketchError struct { } func (e *CantOpenSketchError) Error() string { - return composeErrorMsg(tr("Can't open sketch"), e.Cause) + return composeErrorMsg(i18n.Tr("Can't open sketch"), e.Cause) } func (e *CantOpenSketchError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *CantOpenSketchError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *CantOpenSketchError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -561,8 +560,8 @@ func (e *FailedInstallError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedInstallError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedInstallError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -572,15 +571,15 @@ type FailedLibraryInstallError struct { } func (e *FailedLibraryInstallError) Error() string { - return composeErrorMsg(tr("Library install failed"), e.Cause) + return composeErrorMsg(i18n.Tr("Library install failed"), e.Cause) } func (e *FailedLibraryInstallError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedLibraryInstallError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedLibraryInstallError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -598,8 +597,8 @@ func (e *FailedUninstallError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedUninstallError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedUninstallError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -617,8 +616,8 @@ func (e *FailedDownloadError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedDownloadError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedDownloadError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -636,8 +635,8 @@ func (e *FailedUploadError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedUploadError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedUploadError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -655,8 +654,8 @@ func (e *FailedDebugError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedDebugError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedDebugError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -666,15 +665,15 @@ type FailedMonitorError struct { } func (e *FailedMonitorError) Error() string { - return composeErrorMsg(tr("Port monitor error"), e.Cause) + return composeErrorMsg(i18n.Tr("Port monitor error"), e.Cause) } func (e *FailedMonitorError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedMonitorError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedMonitorError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -692,8 +691,8 @@ func (e *CompileFailedError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *CompileFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *CompileFailedError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -711,8 +710,8 @@ func (e *InvalidArgumentError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidArgumentError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidArgumentError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -730,8 +729,8 @@ func (e *NotFoundError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *NotFoundError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *NotFoundError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -749,8 +748,8 @@ func (e *PermissionDeniedError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *PermissionDeniedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *PermissionDeniedError) GRPCStatus() *status.Status { return status.New(codes.PermissionDenied, e.Error()) } @@ -768,8 +767,8 @@ func (e *UnavailableError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *UnavailableError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *UnavailableError) GRPCStatus() *status.Status { return status.New(codes.Unavailable, e.Error()) } @@ -779,15 +778,15 @@ type TempDirCreationFailedError struct { } func (e *TempDirCreationFailedError) Error() string { - return composeErrorMsg(tr("Cannot create temp dir"), e.Cause) + return composeErrorMsg(i18n.Tr("Cannot create temp dir"), e.Cause) } func (e *TempDirCreationFailedError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *TempDirCreationFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *TempDirCreationFailedError) GRPCStatus() *status.Status { return status.New(codes.Unavailable, e.Error()) } @@ -797,15 +796,15 @@ type TempFileCreationFailedError struct { } func (e *TempFileCreationFailedError) Error() string { - return composeErrorMsg(tr("Cannot create temp file"), e.Cause) + return composeErrorMsg(i18n.Tr("Cannot create temp file"), e.Cause) } func (e *TempFileCreationFailedError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *TempFileCreationFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *TempFileCreationFailedError) GRPCStatus() *status.Status { return status.New(codes.Unavailable, e.Error()) } @@ -816,15 +815,15 @@ type SignatureVerificationFailedError struct { } func (e *SignatureVerificationFailedError) Error() string { - return composeErrorMsg(tr("'%s' has an invalid signature", e.File), e.Cause) + return composeErrorMsg(i18n.Tr("'%s' has an invalid signature", e.File), e.Cause) } func (e *SignatureVerificationFailedError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *SignatureVerificationFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *SignatureVerificationFailedError) GRPCStatus() *status.Status { return status.New(codes.Unavailable, e.Error()) } @@ -837,12 +836,12 @@ type MultiplePlatformsError struct { } func (e *MultiplePlatformsError) Error() string { - return tr("Found %d platforms matching \"%s\": %s", + return i18n.Tr("Found %d platforms matching \"%s\": %s", len(e.Platforms), e.UserPlatform, strings.Join(e.Platforms, ", ")) } -// ToRPCStatus converts the error into a *status.Status -func (e *MultiplePlatformsError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MultiplePlatformsError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -856,7 +855,7 @@ type MultipleLibraryInstallDetected struct { } func (e *MultipleLibraryInstallDetected) Error() string { - res := tr("The library %s has multiple installations:", e.LibName) + "\n" + res := i18n.Tr("The library %s has multiple installations:", e.LibName) + "\n" for _, lib := range e.LibsDir { res += fmt.Sprintf("- %s\n", lib) } @@ -864,7 +863,23 @@ func (e *MultipleLibraryInstallDetected) Error() string { return res } -// ToRPCStatus converts the error into a *status.Status -func (e *MultipleLibraryInstallDetected) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MultipleLibraryInstallDetected) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } + +// InstanceNeedsReinitialization +type InstanceNeedsReinitialization struct { +} + +func (e *InstanceNeedsReinitialization) Error() string { + return i18n.Tr("The instance is no longer valid and needs to be reinitialized") +} + +// GRPCStatus converts the error into a *status.Status +func (e *InstanceNeedsReinitialization) GRPCStatus() *status.Status { + st, _ := status. + New(codes.InvalidArgument, e.Error()). + WithDetails(&rpc.InstanceNeedsReinitializationError{}) + return st +} diff --git a/commands/core/download.go b/commands/core/download.go deleted file mode 100644 index 78d7539d9da..00000000000 --- a/commands/core/download.go +++ /dev/null @@ -1,65 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -var tr = i18n.Tr - -// PlatformDownload FIXMEDOC -func PlatformDownload(ctx context.Context, req *rpc.PlatformDownloadRequest, downloadCB rpc.DownloadProgressCB) (*rpc.PlatformDownloadResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - - version, err := commands.ParseVersion(req) - if err != nil { - return nil, &arduino.InvalidVersionError{Cause: err} - } - - ref := &packagemanager.PlatformReference{ - Package: req.PlatformPackage, - PlatformArchitecture: req.Architecture, - PlatformVersion: version, - } - platform, tools, err := pme.FindPlatformReleaseDependencies(ref) - if err != nil { - return nil, &arduino.PlatformNotFoundError{Platform: ref.String(), Cause: err} - } - - if err := pme.DownloadPlatformRelease(platform, nil, downloadCB); err != nil { - return nil, err - } - - for _, tool := range tools { - if err := pme.DownloadToolRelease(tool, nil, downloadCB); err != nil { - return nil, err - } - } - - return &rpc.PlatformDownloadResponse{}, nil -} diff --git a/commands/core/install.go b/commands/core/install.go deleted file mode 100644 index 6a159f7de50..00000000000 --- a/commands/core/install.go +++ /dev/null @@ -1,81 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "context" - "fmt" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// PlatformInstall FIXMEDOC -func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallRequest, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) (*rpc.PlatformInstallResponse, error) { - install := func() error { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return &arduino.InvalidInstanceError{} - } - defer release() - - version, err := commands.ParseVersion(req) - if err != nil { - return &arduino.InvalidVersionError{Cause: err} - } - - ref := &packagemanager.PlatformReference{ - Package: req.PlatformPackage, - PlatformArchitecture: req.Architecture, - PlatformVersion: version, - } - platformRelease, tools, err := pme.FindPlatformReleaseDependencies(ref) - if err != nil { - return &arduino.PlatformNotFoundError{Platform: ref.String(), Cause: err} - } - - // Prerequisite checks before install - if platformRelease.IsInstalled() { - taskCB(&rpc.TaskProgress{Name: tr("Platform %s already installed", platformRelease), Completed: true}) - return nil - } - - if req.GetNoOverwrite() { - if installed := pme.GetInstalledPlatformRelease(platformRelease.Platform); installed != nil { - return fmt.Errorf("%s: %s", - tr("Platform %s already installed", installed), - tr("could not overwrite")) - } - } - - if err := pme.DownloadAndInstallPlatformAndTools(platformRelease, tools, downloadCB, taskCB, req.GetSkipPostInstall(), req.GetSkipPreUninstall()); err != nil { - return err - } - - return nil - } - - if err := install(); err != nil { - return nil, err - } - if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil { - return nil, err - } - return &rpc.PlatformInstallResponse{}, nil -} diff --git a/commands/core/list.go b/commands/core/list.go deleted file mode 100644 index 10d582de2d1..00000000000 --- a/commands/core/list.go +++ /dev/null @@ -1,90 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "fmt" - "sort" - "strings" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// PlatformList returns a list of installed platforms, optionally filtered by -// those requiring an update. -func PlatformList(req *rpc.PlatformListRequest) (*rpc.PlatformListResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - - res := []*rpc.Platform{} - for _, targetPackage := range pme.GetPackages() { - for _, platform := range targetPackage.Platforms { - platformRelease := pme.GetInstalledPlatformRelease(platform) - - // The All flags adds to the list of installed platforms the installable platforms (from the indexes) - // If both All and UpdatableOnly are set All takes precedence - if req.All { - installedVersion := "" - if platformRelease == nil { // if the platform is not installed - platformRelease = platform.GetLatestRelease() - } else { - installedVersion = platformRelease.Version.String() - } - // it could happen, especially with indexes not perfectly compliant with specs that a platform do not contain a valid release - if platformRelease != nil { - rpcPlatform := commands.PlatformReleaseToRPC(platformRelease) - rpcPlatform.Installed = installedVersion - res = append(res, rpcPlatform) - continue - } - } - - if platformRelease != nil { - latest := platform.GetLatestRelease() - if latest == nil { - return nil, &arduino.PlatformNotFoundError{Platform: platform.String(), Cause: fmt.Errorf(tr("the platform has no releases"))} - } - - // show only the updatable platforms - if req.UpdatableOnly && latest == platformRelease { - continue - } - - rpcPlatform := commands.PlatformReleaseToRPC(platformRelease) - rpcPlatform.Installed = platformRelease.Version.String() - rpcPlatform.Latest = latest.Version.String() - res = append(res, rpcPlatform) - } - } - } - // Sort result alphabetically and put deprecated platforms at the bottom - sort.Slice(res, func(i, j int) bool { - return strings.ToLower(res[i].Name) < strings.ToLower(res[j].Name) - }) - sort.SliceStable(res, func(i, j int) bool { - if !res[i].Deprecated && res[j].Deprecated { - return true - } - return false - }) - return &rpc.PlatformListResponse{InstalledPlatforms: res}, nil -} diff --git a/commands/core/search_test.go b/commands/core/search_test.go deleted file mode 100644 index b96c19912af..00000000000 --- a/commands/core/search_test.go +++ /dev/null @@ -1,354 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "testing" - - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/internal/cli/instance" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" - "github.com/stretchr/testify/require" -) - -func TestPlatformSearch(t *testing.T) { - - dataDir := paths.TempDir().Join("test", "data_dir") - downloadDir := paths.TempDir().Join("test", "staging") - t.Setenv("ARDUINO_DATA_DIR", dataDir.String()) - t.Setenv("ARDUINO_DOWNLOADS_DIR", downloadDir.String()) - dataDir.MkdirAll() - downloadDir.MkdirAll() - defer paths.TempDir().Join("test").RemoveAll() - err := paths.New("testdata").Join("package_index.json").CopyTo(dataDir.Join("package_index.json")) - require.Nil(t, err) - - configuration.Settings = configuration.Init(paths.TempDir().Join("test", "arduino-cli.yaml").String()) - - inst := instance.CreateAndInit() - require.NotNil(t, inst) - - res, stat := PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "retrokit", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - - require.Len(t, res.SearchOutput, 2) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.5", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.6", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "retrokit", - AllVersions: false, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 1) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.6", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - - // Search the Package Maintainer - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "Retrokits (www.retrokits.com)", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 2) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.5", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.6", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - - // Search using the Package name - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "Retrokits-RK002", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 2) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.5", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.6", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - - // Search using the Platform name - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "rk002", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 2) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.5", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.6", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - - // Search using a board name - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "Yún", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 1) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "arduino:avr", - Installed: "", - Latest: "1.8.3", - Name: "Arduino AVR Boards", - Maintainer: "Arduino", - Website: "https://www.arduino.cc/", - Email: "packages@arduino.cc", - Type: []string{"Arduino"}, - Boards: []*rpc.Board{ - {Name: "Arduino Yún"}, - {Name: "Arduino Uno"}, - {Name: "Arduino Uno WiFi"}, - {Name: "Arduino Diecimila"}, - {Name: "Arduino Nano"}, - {Name: "Arduino Mega"}, - {Name: "Arduino MegaADK"}, - {Name: "Arduino Leonardo"}, - {Name: "Arduino Leonardo Ethernet"}, - {Name: "Arduino Micro"}, - {Name: "Arduino Esplora"}, - {Name: "Arduino Mini"}, - {Name: "Arduino Ethernet"}, - {Name: "Arduino Fio"}, - {Name: "Arduino BT"}, - {Name: "Arduino LilyPadUSB"}, - {Name: "Arduino Lilypad"}, - {Name: "Arduino Pro"}, - {Name: "Arduino ATMegaNG"}, - {Name: "Arduino Robot Control"}, - {Name: "Arduino Robot Motor"}, - {Name: "Arduino Gemma"}, - {Name: "Adafruit Circuit Playground"}, - {Name: "Arduino Yún Mini"}, - {Name: "Arduino Industrial 101"}, - {Name: "Linino One"}, - }, - Help: &rpc.HelpResources{Online: "http://www.arduino.cc/en/Reference/HomePage"}, - Indexed: true, - MissingMetadata: true, - }) - - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "yun", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 1) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "arduino:avr", - Installed: "", - Latest: "1.8.3", - Name: "Arduino AVR Boards", - Maintainer: "Arduino", - Website: "https://www.arduino.cc/", - Email: "packages@arduino.cc", - Type: []string{"Arduino"}, - Boards: []*rpc.Board{ - {Name: "Arduino Yún"}, - {Name: "Arduino Uno"}, - {Name: "Arduino Uno WiFi"}, - {Name: "Arduino Diecimila"}, - {Name: "Arduino Nano"}, - {Name: "Arduino Mega"}, - {Name: "Arduino MegaADK"}, - {Name: "Arduino Leonardo"}, - {Name: "Arduino Leonardo Ethernet"}, - {Name: "Arduino Micro"}, - {Name: "Arduino Esplora"}, - {Name: "Arduino Mini"}, - {Name: "Arduino Ethernet"}, - {Name: "Arduino Fio"}, - {Name: "Arduino BT"}, - {Name: "Arduino LilyPadUSB"}, - {Name: "Arduino Lilypad"}, - {Name: "Arduino Pro"}, - {Name: "Arduino ATMegaNG"}, - {Name: "Arduino Robot Control"}, - {Name: "Arduino Robot Motor"}, - {Name: "Arduino Gemma"}, - {Name: "Adafruit Circuit Playground"}, - {Name: "Arduino Yún Mini"}, - {Name: "Arduino Industrial 101"}, - {Name: "Linino One"}, - }, - Help: &rpc.HelpResources{Online: "http://www.arduino.cc/en/Reference/HomePage"}, - Indexed: true, - MissingMetadata: true, - }) -} - -func TestPlatformSearchSorting(t *testing.T) { - dataDir := paths.TempDir().Join("test", "data_dir") - downloadDir := paths.TempDir().Join("test", "staging") - t.Setenv("ARDUINO_DATA_DIR", dataDir.String()) - t.Setenv("ARDUINO_DOWNLOADS_DIR", downloadDir.String()) - dataDir.MkdirAll() - downloadDir.MkdirAll() - defer paths.TempDir().Join("test").RemoveAll() - err := paths.New("testdata").Join("package_index.json").CopyTo(dataDir.Join("package_index.json")) - require.Nil(t, err) - - configuration.Settings = configuration.Init(paths.TempDir().Join("test", "arduino-cli.yaml").String()) - - inst := instance.CreateAndInit() - require.NotNil(t, inst) - - res, stat := PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "", - AllVersions: false, - }) - require.Nil(t, stat) - require.NotNil(t, res) - - require.Len(t, res.SearchOutput, 3) - require.Equal(t, res.SearchOutput[0].Name, "Arduino AVR Boards") - require.Equal(t, res.SearchOutput[0].Deprecated, false) - require.Equal(t, res.SearchOutput[1].Name, "RK002") - require.Equal(t, res.SearchOutput[1].Deprecated, false) - require.Equal(t, res.SearchOutput[2].Name, "Platform") - require.Equal(t, res.SearchOutput[2].Deprecated, true) - -} diff --git a/commands/core/uninstall.go b/commands/core/uninstall.go deleted file mode 100644 index ec0ae20bc08..00000000000 --- a/commands/core/uninstall.go +++ /dev/null @@ -1,80 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// PlatformUninstall FIXMEDOC -func PlatformUninstall(ctx context.Context, req *rpc.PlatformUninstallRequest, taskCB rpc.TaskProgressCB) (*rpc.PlatformUninstallResponse, error) { - if err := platformUninstall(ctx, req, taskCB); err != nil { - return nil, err - } - if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil { - return nil, err - } - return &rpc.PlatformUninstallResponse{}, nil -} - -// platformUninstall is the implementation of platform unistaller -func platformUninstall(ctx context.Context, req *rpc.PlatformUninstallRequest, taskCB rpc.TaskProgressCB) error { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return &arduino.InvalidInstanceError{} - } - defer release() - - ref := &packagemanager.PlatformReference{ - Package: req.PlatformPackage, - PlatformArchitecture: req.Architecture, - } - if ref.PlatformVersion == nil { - platform := pme.FindPlatform(ref) - if platform == nil { - return &arduino.PlatformNotFoundError{Platform: ref.String()} - } - platformRelease := pme.GetInstalledPlatformRelease(platform) - if platformRelease == nil { - return &arduino.PlatformNotFoundError{Platform: ref.String()} - } - ref.PlatformVersion = platformRelease.Version - } - - platform, tools, err := pme.FindPlatformReleaseDependencies(ref) - if err != nil { - return &arduino.NotFoundError{Message: tr("Can't find dependencies for platform %s", ref), Cause: err} - } - - if err := pme.UninstallPlatform(platform, taskCB, req.GetSkipPreUninstall()); err != nil { - return err - } - - for _, tool := range tools { - if !pme.IsToolRequired(tool) { - taskCB(&rpc.TaskProgress{Name: tr("Uninstalling %s, tool is no more required", tool)}) - pme.UninstallTool(tool, taskCB, req.GetSkipPreUninstall()) - } - } - - return nil -} diff --git a/commands/core/upgrade.go b/commands/core/upgrade.go deleted file mode 100644 index 2baaf2c97d6..00000000000 --- a/commands/core/upgrade.go +++ /dev/null @@ -1,65 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// PlatformUpgrade FIXMEDOC -func PlatformUpgrade(ctx context.Context, req *rpc.PlatformUpgradeRequest, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) (*rpc.PlatformUpgradeResponse, error) { - upgrade := func() (*cores.PlatformRelease, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - - // Extract all PlatformReference to platforms that have updates - ref := &packagemanager.PlatformReference{ - Package: req.PlatformPackage, - PlatformArchitecture: req.Architecture, - } - platform, err := pme.DownloadAndInstallPlatformUpgrades(ref, downloadCB, taskCB, req.GetSkipPostInstall(), req.GetSkipPreUninstall()) - if err != nil { - return platform, err - } - - return platform, nil - } - - var rpcPlatform *rpc.Platform - - platformRelease, err := upgrade() - if platformRelease != nil { - rpcPlatform = commands.PlatformReleaseToRPC(platformRelease) - } - if err != nil { - return &rpc.PlatformUpgradeResponse{Platform: rpcPlatform}, err - } - if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil { - return nil, err - } - - return &rpc.PlatformUpgradeResponse{Platform: rpcPlatform}, nil -} diff --git a/commands/daemon/daemon.go b/commands/daemon/daemon.go deleted file mode 100644 index ec7fd10e9d9..00000000000 --- a/commands/daemon/daemon.go +++ /dev/null @@ -1,510 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package daemon - -import ( - "context" - "errors" - "fmt" - "io" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/board" - "github.com/arduino/arduino-cli/commands/compile" - "github.com/arduino/arduino-cli/commands/core" - "github.com/arduino/arduino-cli/commands/lib" - "github.com/arduino/arduino-cli/commands/monitor" - "github.com/arduino/arduino-cli/commands/sketch" - "github.com/arduino/arduino-cli/commands/upload" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/sirupsen/logrus" - "google.golang.org/grpc/metadata" -) - -// ArduinoCoreServerImpl FIXMEDOC -type ArduinoCoreServerImpl struct { - // Force compile error for unimplemented methods - rpc.UnsafeArduinoCoreServiceServer - - VersionString string -} - -var tr = i18n.Tr - -func convertErrorToRPCStatus(err error) error { - if err == nil { - return nil - } - if cmdErr, ok := err.(arduino.CommandError); ok { - return cmdErr.ToRPCStatus().Err() - } - return err -} - -// BoardDetails FIXMEDOC -func (s *ArduinoCoreServerImpl) BoardDetails(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetailsResponse, error) { - resp, err := board.Details(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// BoardList FIXMEDOC -func (s *ArduinoCoreServerImpl) BoardList(ctx context.Context, req *rpc.BoardListRequest) (*rpc.BoardListResponse, error) { - ports, _, err := board.List(req) - if err != nil { - return nil, convertErrorToRPCStatus(err) - } - return &rpc.BoardListResponse{ - Ports: ports, - }, nil -} - -// BoardListAll FIXMEDOC -func (s *ArduinoCoreServerImpl) BoardListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListAllResponse, error) { - resp, err := board.ListAll(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// BoardSearch exposes to the gRPC interface the board search command -func (s *ArduinoCoreServerImpl) BoardSearch(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchResponse, error) { - resp, err := board.Search(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// BoardListWatch FIXMEDOC -func (s *ArduinoCoreServerImpl) BoardListWatch(req *rpc.BoardListWatchRequest, stream rpc.ArduinoCoreService_BoardListWatchServer) error { - syncSend := NewSynchronizedSend(stream.Send) - if req.Instance == nil { - err := fmt.Errorf(tr("no instance specified")) - syncSend.Send(&rpc.BoardListWatchResponse{ - EventType: "error", - Error: err.Error(), - }) - return err - } - - eventsChan, err := board.Watch(stream.Context(), req) - if err != nil { - return convertErrorToRPCStatus(err) - } - - for event := range eventsChan { - if err := syncSend.Send(event); err != nil { - logrus.Infof("sending board watch message: %v", err) - } - } - - return nil -} - -// Destroy FIXMEDOC -func (s *ArduinoCoreServerImpl) Destroy(ctx context.Context, req *rpc.DestroyRequest) (*rpc.DestroyResponse, error) { - resp, err := commands.Destroy(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// UpdateIndex FIXMEDOC -func (s *ArduinoCoreServerImpl) UpdateIndex(req *rpc.UpdateIndexRequest, stream rpc.ArduinoCoreService_UpdateIndexServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := commands.UpdateIndex(stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.UpdateIndexResponse{DownloadProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// UpdateLibrariesIndex FIXMEDOC -func (s *ArduinoCoreServerImpl) UpdateLibrariesIndex(req *rpc.UpdateLibrariesIndexRequest, stream rpc.ArduinoCoreService_UpdateLibrariesIndexServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := commands.UpdateLibrariesIndex(stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.UpdateLibrariesIndexResponse{DownloadProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// Create FIXMEDOC -func (s *ArduinoCoreServerImpl) Create(ctx context.Context, req *rpc.CreateRequest) (*rpc.CreateResponse, error) { - var userAgent []string - if md, ok := metadata.FromIncomingContext(ctx); ok { - userAgent = md.Get("user-agent") - } - if len(userAgent) == 0 { - userAgent = []string{"gRPCClientUnknown/0.0.0"} - } - res, err := commands.Create(req, userAgent...) - return res, convertErrorToRPCStatus(err) -} - -// Init FIXMEDOC -func (s *ArduinoCoreServerImpl) Init(req *rpc.InitRequest, stream rpc.ArduinoCoreService_InitServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := commands.Init(req, func(message *rpc.InitResponse) { syncSend.Send(message) }) - return convertErrorToRPCStatus(err) -} - -// Version FIXMEDOC -func (s *ArduinoCoreServerImpl) Version(ctx context.Context, req *rpc.VersionRequest) (*rpc.VersionResponse, error) { - return &rpc.VersionResponse{Version: s.VersionString}, nil -} - -// NewSketch FIXMEDOC -func (s *ArduinoCoreServerImpl) NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchResponse, error) { - resp, err := sketch.NewSketch(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// LoadSketch FIXMEDOC -func (s *ArduinoCoreServerImpl) LoadSketch(ctx context.Context, req *rpc.LoadSketchRequest) (*rpc.LoadSketchResponse, error) { - resp, err := sketch.LoadSketch(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// SetSketchDefaults FIXMEDOC -func (s *ArduinoCoreServerImpl) SetSketchDefaults(ctx context.Context, req *rpc.SetSketchDefaultsRequest) (*rpc.SetSketchDefaultsResponse, error) { - resp, err := sketch.SetSketchDefaults(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// Compile FIXMEDOC -func (s *ArduinoCoreServerImpl) Compile(req *rpc.CompileRequest, stream rpc.ArduinoCoreService_CompileServer) error { - syncSend := NewSynchronizedSend(stream.Send) - outStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.CompileResponse{OutStream: data}) }) - errStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.CompileResponse{ErrStream: data}) }) - compileResp, compileErr := compile.Compile( - stream.Context(), req, outStream, errStream, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.CompileResponse{Progress: p}) }) - outStream.Close() - errStream.Close() - var compileRespSendErr error - if compileResp != nil { - compileRespSendErr = syncSend.Send(compileResp) - } - if compileErr != nil { - return convertErrorToRPCStatus(compileErr) - } - return compileRespSendErr -} - -// PlatformInstall FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformInstall(req *rpc.PlatformInstallRequest, stream rpc.ArduinoCoreService_PlatformInstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - resp, err := core.PlatformInstall( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.PlatformInstallResponse{Progress: p}) }, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.PlatformInstallResponse{TaskProgress: p}) }, - ) - if err != nil { - return convertErrorToRPCStatus(err) - } - return syncSend.Send(resp) -} - -// PlatformDownload FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformDownload(req *rpc.PlatformDownloadRequest, stream rpc.ArduinoCoreService_PlatformDownloadServer) error { - syncSend := NewSynchronizedSend(stream.Send) - resp, err := core.PlatformDownload( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.PlatformDownloadResponse{Progress: p}) }, - ) - if err != nil { - return convertErrorToRPCStatus(err) - } - return syncSend.Send(resp) -} - -// PlatformUninstall FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformUninstall(req *rpc.PlatformUninstallRequest, stream rpc.ArduinoCoreService_PlatformUninstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - resp, err := core.PlatformUninstall( - stream.Context(), req, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.PlatformUninstallResponse{TaskProgress: p}) }, - ) - if err != nil { - return convertErrorToRPCStatus(err) - } - return syncSend.Send(resp) -} - -// PlatformUpgrade FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformUpgrade(req *rpc.PlatformUpgradeRequest, stream rpc.ArduinoCoreService_PlatformUpgradeServer) error { - syncSend := NewSynchronizedSend(stream.Send) - resp, err := core.PlatformUpgrade( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.PlatformUpgradeResponse{Progress: p}) }, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.PlatformUpgradeResponse{TaskProgress: p}) }, - ) - if err2 := syncSend.Send(resp); err2 != nil { - return err2 - } - return convertErrorToRPCStatus(err) -} - -// PlatformSearch FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformSearch(ctx context.Context, req *rpc.PlatformSearchRequest) (*rpc.PlatformSearchResponse, error) { - resp, err := core.PlatformSearch(req) - return resp, convertErrorToRPCStatus(err) -} - -// PlatformList FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformList(ctx context.Context, req *rpc.PlatformListRequest) (*rpc.PlatformListResponse, error) { - platforms, err := core.PlatformList(req) - return platforms, convertErrorToRPCStatus(err) -} - -// Upload FIXMEDOC -func (s *ArduinoCoreServerImpl) Upload(req *rpc.UploadRequest, stream rpc.ArduinoCoreService_UploadServer) error { - syncSend := NewSynchronizedSend(stream.Send) - outStream := feedStreamTo(func(data []byte) { - syncSend.Send(&rpc.UploadResponse{ - Message: &rpc.UploadResponse_OutStream{OutStream: data}, - }) - }) - errStream := feedStreamTo(func(data []byte) { - syncSend.Send(&rpc.UploadResponse{ - Message: &rpc.UploadResponse_ErrStream{ErrStream: data}, - }) - }) - res, err := upload.Upload(stream.Context(), req, outStream, errStream) - outStream.Close() - errStream.Close() - if res != nil { - syncSend.Send(&rpc.UploadResponse{ - Message: &rpc.UploadResponse_Result{ - Result: res, - }, - }) - } - return convertErrorToRPCStatus(err) -} - -// UploadUsingProgrammer FIXMEDOC -func (s *ArduinoCoreServerImpl) UploadUsingProgrammer(req *rpc.UploadUsingProgrammerRequest, stream rpc.ArduinoCoreService_UploadUsingProgrammerServer) error { - syncSend := NewSynchronizedSend(stream.Send) - outStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.UploadUsingProgrammerResponse{OutStream: data}) }) - errStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.UploadUsingProgrammerResponse{ErrStream: data}) }) - err := upload.UsingProgrammer(stream.Context(), req, outStream, errStream) - outStream.Close() - errStream.Close() - if err != nil { - return convertErrorToRPCStatus(err) - } - return nil -} - -// SupportedUserFields FIXMEDOC -func (s *ArduinoCoreServerImpl) SupportedUserFields(ctx context.Context, req *rpc.SupportedUserFieldsRequest) (*rpc.SupportedUserFieldsResponse, error) { - res, err := upload.SupportedUserFields(ctx, req) - return res, convertErrorToRPCStatus(err) -} - -// BurnBootloader FIXMEDOC -func (s *ArduinoCoreServerImpl) BurnBootloader(req *rpc.BurnBootloaderRequest, stream rpc.ArduinoCoreService_BurnBootloaderServer) error { - syncSend := NewSynchronizedSend(stream.Send) - outStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.BurnBootloaderResponse{OutStream: data}) }) - errStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.BurnBootloaderResponse{ErrStream: data}) }) - resp, err := upload.BurnBootloader(stream.Context(), req, outStream, errStream) - outStream.Close() - errStream.Close() - if err != nil { - return convertErrorToRPCStatus(err) - } - return syncSend.Send(resp) -} - -// ListProgrammersAvailableForUpload FIXMEDOC -func (s *ArduinoCoreServerImpl) ListProgrammersAvailableForUpload(ctx context.Context, req *rpc.ListProgrammersAvailableForUploadRequest) (*rpc.ListProgrammersAvailableForUploadResponse, error) { - resp, err := upload.ListProgrammersAvailableForUpload(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// LibraryDownload FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryDownload(req *rpc.LibraryDownloadRequest, stream rpc.ArduinoCoreService_LibraryDownloadServer) error { - syncSend := NewSynchronizedSend(stream.Send) - resp, err := lib.LibraryDownload( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.LibraryDownloadResponse{Progress: p}) }, - ) - if err != nil { - return convertErrorToRPCStatus(err) - } - return syncSend.Send(resp) -} - -// LibraryInstall FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryInstall(req *rpc.LibraryInstallRequest, stream rpc.ArduinoCoreService_LibraryInstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.LibraryInstall( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.LibraryInstallResponse{Progress: p}) }, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.LibraryInstallResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// LibraryUpgrade FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryUpgrade(req *rpc.LibraryUpgradeRequest, stream rpc.ArduinoCoreService_LibraryUpgradeServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.LibraryUpgrade( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.LibraryUpgradeResponse{Progress: p}) }, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.LibraryUpgradeResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// LibraryUninstall FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryUninstall(req *rpc.LibraryUninstallRequest, stream rpc.ArduinoCoreService_LibraryUninstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.LibraryUninstall(stream.Context(), req, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.LibraryUninstallResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// LibraryUpgradeAll FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryUpgradeAll(req *rpc.LibraryUpgradeAllRequest, stream rpc.ArduinoCoreService_LibraryUpgradeAllServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.LibraryUpgradeAll(req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.LibraryUpgradeAllResponse{Progress: p}) }, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.LibraryUpgradeAllResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// LibraryResolveDependencies FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryResolveDependencies(ctx context.Context, req *rpc.LibraryResolveDependenciesRequest) (*rpc.LibraryResolveDependenciesResponse, error) { - resp, err := lib.LibraryResolveDependencies(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// LibrarySearch FIXMEDOC -func (s *ArduinoCoreServerImpl) LibrarySearch(ctx context.Context, req *rpc.LibrarySearchRequest) (*rpc.LibrarySearchResponse, error) { - resp, err := lib.LibrarySearch(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// LibraryList FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.LibraryListResponse, error) { - resp, err := lib.LibraryList(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// ArchiveSketch FIXMEDOC -func (s *ArduinoCoreServerImpl) ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.ArchiveSketchResponse, error) { - resp, err := sketch.ArchiveSketch(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// ZipLibraryInstall FIXMEDOC -func (s *ArduinoCoreServerImpl) ZipLibraryInstall(req *rpc.ZipLibraryInstallRequest, stream rpc.ArduinoCoreService_ZipLibraryInstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.ZipLibraryInstall( - stream.Context(), req, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.ZipLibraryInstallResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// GitLibraryInstall FIXMEDOC -func (s *ArduinoCoreServerImpl) GitLibraryInstall(req *rpc.GitLibraryInstallRequest, stream rpc.ArduinoCoreService_GitLibraryInstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.GitLibraryInstall( - stream.Context(), req, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.GitLibraryInstallResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// EnumerateMonitorPortSettings FIXMEDOC -func (s *ArduinoCoreServerImpl) EnumerateMonitorPortSettings(ctx context.Context, req *rpc.EnumerateMonitorPortSettingsRequest) (*rpc.EnumerateMonitorPortSettingsResponse, error) { - resp, err := monitor.EnumerateMonitorPortSettings(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// Monitor FIXMEDOC -func (s *ArduinoCoreServerImpl) Monitor(stream rpc.ArduinoCoreService_MonitorServer) error { - syncSend := NewSynchronizedSend(stream.Send) - - // The configuration must be sent on the first message - req, err := stream.Recv() - if err != nil { - return err - } - - portProxy, _, err := monitor.Monitor(stream.Context(), req) - if err != nil { - return err - } - - // Send a message with Success set to true to notify the caller of the port being now active - _ = syncSend.Send(&rpc.MonitorResponse{Success: true}) - - cancelCtx, cancel := context.WithCancel(stream.Context()) - go func() { - defer cancel() - for { - msg, err := stream.Recv() - if errors.Is(err, io.EOF) { - return - } - if err != nil { - syncSend.Send(&rpc.MonitorResponse{Error: err.Error()}) - return - } - if conf := msg.GetPortConfiguration(); conf != nil { - for _, c := range conf.GetSettings() { - if err := portProxy.Config(c.SettingId, c.Value); err != nil { - syncSend.Send(&rpc.MonitorResponse{Error: err.Error()}) - } - } - } - tx := msg.GetTxData() - for len(tx) > 0 { - n, err := portProxy.Write(tx) - if errors.Is(err, io.EOF) { - return - } - if err != nil { - syncSend.Send(&rpc.MonitorResponse{Error: err.Error()}) - return - } - tx = tx[n:] - } - } - }() - - go func() { - defer cancel() - buff := make([]byte, 4096) - for { - n, err := portProxy.Read(buff) - if errors.Is(err, io.EOF) { - break - } - if err != nil { - syncSend.Send(&rpc.MonitorResponse{Error: err.Error()}) - break - } - if err := syncSend.Send(&rpc.MonitorResponse{RxData: buff[:n]}); err != nil { - break - } - } - }() - - <-cancelCtx.Done() - portProxy.Close() - return nil -} diff --git a/commands/daemon/settings.go b/commands/daemon/settings.go deleted file mode 100644 index 60b7169fc87..00000000000 --- a/commands/daemon/settings.go +++ /dev/null @@ -1,179 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package daemon - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "strings" - - "github.com/arduino/arduino-cli/configuration" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" -) - -// SettingsService implements the `Settings` service -type SettingsService struct { - rpc.UnimplementedSettingsServiceServer -} - -// GetAll returns a message with a string field containing all the settings -// currently in use, marshalled in JSON format. -func (s *SettingsService) GetAll(ctx context.Context, req *rpc.GetAllRequest) (*rpc.GetAllResponse, error) { - b, err := json.Marshal(configuration.Settings.AllSettings()) - if err == nil { - return &rpc.GetAllResponse{ - JsonData: string(b), - }, nil - } - - return nil, err -} - -// mapper converts a map of nested maps to a map of scalar values. -// For example: -// -// {"foo": "bar", "daemon":{"port":"420"}, "sketch": {"always_export_binaries": "true"}} -// -// would convert to: -// -// {"foo": "bar", "daemon.port":"420", "sketch.always_export_binaries": "true"} -func mapper(toMap map[string]interface{}) map[string]interface{} { - res := map[string]interface{}{} - for k, v := range toMap { - switch data := v.(type) { - case map[string]interface{}: - for mK, mV := range mapper(data) { - // Concatenate keys - res[fmt.Sprintf("%s.%s", k, mK)] = mV - } - // This is done to avoid skipping keys containing empty maps - if len(data) == 0 { - res[k] = map[string]interface{}{} - } - default: - res[k] = v - } - } - return res -} - -// Merge applies multiple settings values at once. -func (s *SettingsService) Merge(ctx context.Context, req *rpc.MergeRequest) (*rpc.MergeResponse, error) { - var toMerge map[string]interface{} - if err := json.Unmarshal([]byte(req.GetJsonData()), &toMerge); err != nil { - return nil, err - } - - mapped := mapper(toMerge) - - // Set each value individually. - // This is done because Viper ignores empty strings or maps when - // using the MergeConfigMap function. - for k, v := range mapped { - configuration.Settings.Set(k, v) - } - - return &rpc.MergeResponse{}, nil -} - -// GetValue returns a settings value given its key. If the key is not present -// an error will be returned, so that we distinguish empty settings from missing -// ones. -func (s *SettingsService) GetValue(ctx context.Context, req *rpc.GetValueRequest) (*rpc.GetValueResponse, error) { - key := req.GetKey() - - // Check if settings key actually existing, we don't use Viper.InConfig() - // since that doesn't check for keys formatted like daemon.port or those set - // with Viper.Set(). This way we check for all existing settings for sure. - keyExists := false - for _, k := range configuration.Settings.AllKeys() { - if k == key || strings.HasPrefix(k, key) { - keyExists = true - break - } - } - if !keyExists { - return nil, errors.New(tr("key not found in settings")) - } - - b, err := json.Marshal(configuration.Settings.Get(key)) - value := &rpc.GetValueResponse{} - if err == nil { - value.Key = key - value.JsonData = string(b) - } - - return value, err -} - -// SetValue updates or set a value for a certain key. -func (s *SettingsService) SetValue(ctx context.Context, val *rpc.SetValueRequest) (*rpc.SetValueResponse, error) { - key := val.GetKey() - var value interface{} - - err := json.Unmarshal([]byte(val.GetJsonData()), &value) - if err == nil { - configuration.Settings.Set(key, value) - } - - return &rpc.SetValueResponse{}, err -} - -// Write to file set in request the settings currently stored in memory. -// We don't have a Read() function, that's not necessary since we only want one config file to be used -// and that's picked up when the CLI is run as daemon, either using the default path or a custom one -// set with the --config-file flag. -func (s *SettingsService) Write(ctx context.Context, req *rpc.WriteRequest) (*rpc.WriteResponse, error) { - if err := configuration.Settings.WriteConfigAs(req.FilePath); err != nil { - return nil, err - } - return &rpc.WriteResponse{}, nil -} - -// Delete removes a key from the config file -func (s *SettingsService) Delete(ctx context.Context, req *rpc.DeleteRequest) (*rpc.DeleteResponse, error) { - toDelete := req.GetKey() - - // Check if settings key actually existing, we don't use Viper.InConfig() - // since that doesn't check for keys formatted like daemon.port or those set - // with Viper.Set(). This way we check for all existing settings for sure. - keyExists := false - keys := []string{} - for _, k := range configuration.Settings.AllKeys() { - if !strings.HasPrefix(k, toDelete) { - keys = append(keys, k) - continue - } - keyExists = true - } - - if !keyExists { - return nil, errors.New(tr("key not found in settings")) - } - - // Override current settings to delete the key - updatedSettings := configuration.Init("") - for _, k := range keys { - updatedSettings.Set(k, configuration.Settings.Get(k)) - } - configPath := configuration.Settings.ConfigFileUsed() - updatedSettings.SetConfigFile(configPath) - configuration.Settings = updatedSettings - - return &rpc.DeleteResponse{}, nil -} diff --git a/commands/daemon/settings_test.go b/commands/daemon/settings_test.go deleted file mode 100644 index b95c7fe2446..00000000000 --- a/commands/daemon/settings_test.go +++ /dev/null @@ -1,176 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package daemon - -import ( - "context" - "encoding/json" - "path/filepath" - "testing" - - "github.com/arduino/arduino-cli/configuration" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" - "github.com/arduino/go-paths-helper" - "github.com/stretchr/testify/require" -) - -var svc = SettingsService{} - -func init() { - configuration.Settings = configuration.Init(filepath.Join("testdata", "arduino-cli.yaml")) -} - -func reset() { - configuration.Settings = configuration.Init(filepath.Join("testdata", "arduino-cli.yaml")) -} - -func TestGetAll(t *testing.T) { - resp, err := svc.GetAll(context.Background(), &rpc.GetAllRequest{}) - require.Nil(t, err) - - content, err := json.Marshal(configuration.Settings.AllSettings()) - require.Nil(t, err) - - require.Equal(t, string(content), resp.GetJsonData()) -} - -func TestMerge(t *testing.T) { - // Verify defaults - require.Equal(t, "50051", configuration.Settings.GetString("daemon.port")) - require.Equal(t, "", configuration.Settings.GetString("foo")) - require.Equal(t, false, configuration.Settings.GetBool("sketch.always_export_binaries")) - - bulkSettings := `{"foo": "bar", "daemon":{"port":"420"}, "sketch": {"always_export_binaries": "true"}}` - res, err := svc.Merge(context.Background(), &rpc.MergeRequest{JsonData: bulkSettings}) - require.NotNil(t, res) - require.NoError(t, err) - - require.Equal(t, "420", configuration.Settings.GetString("daemon.port")) - require.Equal(t, "bar", configuration.Settings.GetString("foo")) - require.Equal(t, true, configuration.Settings.GetBool("sketch.always_export_binaries")) - - bulkSettings = `{"foo":"", "daemon": {}, "sketch": {"always_export_binaries": "false"}}` - res, err = svc.Merge(context.Background(), &rpc.MergeRequest{JsonData: bulkSettings}) - require.NotNil(t, res) - require.NoError(t, err) - - require.Equal(t, "50051", configuration.Settings.GetString("daemon.port")) - require.Equal(t, "", configuration.Settings.GetString("foo")) - require.Equal(t, false, configuration.Settings.GetBool("sketch.always_export_binaries")) - - bulkSettings = `{"daemon": {"port":""}}` - res, err = svc.Merge(context.Background(), &rpc.MergeRequest{JsonData: bulkSettings}) - require.NotNil(t, res) - require.NoError(t, err) - - require.Equal(t, "", configuration.Settings.GetString("daemon.port")) - // Verifies other values are not changed - require.Equal(t, "", configuration.Settings.GetString("foo")) - require.Equal(t, false, configuration.Settings.GetBool("sketch.always_export_binaries")) - - reset() -} - -func TestGetValue(t *testing.T) { - key := &rpc.GetValueRequest{Key: "daemon"} - resp, err := svc.GetValue(context.Background(), key) - require.NoError(t, err) - require.Equal(t, `{"port":"50051"}`, resp.GetJsonData()) - - key = &rpc.GetValueRequest{Key: "daemon.port"} - resp, err = svc.GetValue(context.Background(), key) - require.NoError(t, err) - require.Equal(t, `"50051"`, resp.GetJsonData()) -} - -func TestGetMergedValue(t *testing.T) { - // Verifies value is not set - key := &rpc.GetValueRequest{Key: "foo"} - res, err := svc.GetValue(context.Background(), key) - require.Nil(t, res) - require.Error(t, err, "Error getting settings value") - - // Merge value - bulkSettings := `{"foo": "bar"}` - _, err = svc.Merge(context.Background(), &rpc.MergeRequest{JsonData: bulkSettings}) - require.NoError(t, err) - - // Verifies value is correctly returned - key = &rpc.GetValueRequest{Key: "foo"} - res, err = svc.GetValue(context.Background(), key) - require.NoError(t, err) - require.Equal(t, `"bar"`, res.GetJsonData()) -} - -func TestGetValueNotFound(t *testing.T) { - key := &rpc.GetValueRequest{Key: "DOESNTEXIST"} - _, err := svc.GetValue(context.Background(), key) - require.NotNil(t, err) - require.Equal(t, `key not found in settings`, err.Error()) -} - -func TestSetValue(t *testing.T) { - val := &rpc.SetValueRequest{ - Key: "foo", - JsonData: `"bar"`, - } - _, err := svc.SetValue(context.Background(), val) - require.Nil(t, err) - require.Equal(t, "bar", configuration.Settings.GetString("foo")) -} - -func TestWrite(t *testing.T) { - // Writes some settings - val := &rpc.SetValueRequest{ - Key: "foo", - JsonData: `"bar"`, - } - _, err := svc.SetValue(context.Background(), val) - require.NoError(t, err) - - tempDir := paths.TempDir() - testFolder, err := tempDir.MkTempDir("testdata") - require.NoError(t, err) - defer testFolder.RemoveAll() - - // Verifies config files doesn't exist - configFile := testFolder.Join("arduino-cli.yml") - require.True(t, configFile.NotExist()) - - _, err = svc.Write(context.Background(), &rpc.WriteRequest{ - FilePath: configFile.String(), - }) - require.NoError(t, err) - - // Verifies config file is created. - // We don't verify the content since we expect config library, Viper, to work - require.True(t, configFile.Exist()) -} - -func TestDelete(t *testing.T) { - _, err := svc.Delete(context.Background(), &rpc.DeleteRequest{ - Key: "doesnotexist", - }) - require.Error(t, err) - - _, err = svc.Delete(context.Background(), &rpc.DeleteRequest{ - Key: "network", - }) - require.NoError(t, err) - - _, err = svc.GetValue(context.Background(), &rpc.GetValueRequest{Key: "network"}) - require.Error(t, err) -} diff --git a/commands/debug/debug_info.go b/commands/debug/debug_info.go deleted file mode 100644 index cd5308ece7c..00000000000 --- a/commands/debug/debug_info.go +++ /dev/null @@ -1,240 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package debug - -import ( - "context" - "encoding/json" - "regexp" - "strings" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" - "github.com/arduino/go-properties-orderedmap" - "github.com/sirupsen/logrus" - "google.golang.org/protobuf/types/known/anypb" -) - -// GetDebugConfig returns metadata to start debugging with the specified board -func GetDebugConfig(ctx context.Context, req *rpc.GetDebugConfigRequest) (*rpc.GetDebugConfigResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - return getDebugProperties(req, pme) -} - -func getDebugProperties(req *rpc.GetDebugConfigRequest, pme *packagemanager.Explorer) (*rpc.GetDebugConfigResponse, error) { - // TODO: make a generic function to extract sketch from request - // and remove duplication in commands/compile.go - if req.GetSketchPath() == "" { - return nil, &arduino.MissingSketchPathError{} - } - sketchPath := paths.New(req.GetSketchPath()) - sk, err := sketch.New(sketchPath) - if err != nil { - return nil, &arduino.CantOpenSketchError{Cause: err} - } - - // XXX Remove this code duplication!! - fqbnIn := req.GetFqbn() - if fqbnIn == "" && sk != nil { - fqbnIn = sk.GetDefaultFQBN() - } - if fqbnIn == "" { - return nil, &arduino.MissingFQBNError{} - } - fqbn, err := cores.ParseFQBN(fqbnIn) - if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} - } - - // Find target board and board properties - _, platformRelease, _, boardProperties, referencedPlatformRelease, err := pme.ResolveFQBN(fqbn) - if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} - } - - // Build configuration for debug - toolProperties := properties.NewMap() - if referencedPlatformRelease != nil { - toolProperties.Merge(referencedPlatformRelease.Properties) - } - toolProperties.Merge(platformRelease.Properties) - toolProperties.Merge(platformRelease.RuntimeProperties()) - toolProperties.Merge(boardProperties) - - // HOTFIX: Remove me when the `arduino:samd` core is updated - // (remember to remove it also in arduino/board/details.go) - if !toolProperties.ContainsKey("debug.executable") { - if platformRelease.String() == "arduino:samd@1.8.9" || platformRelease.String() == "arduino:samd@1.8.8" { - toolProperties.Set("debug.executable", "{build.path}/{build.project_name}.elf") - toolProperties.Set("debug.toolchain", "gcc") - toolProperties.Set("debug.toolchain.path", "{runtime.tools.arm-none-eabi-gcc-7-2017q4.path}/bin/") - toolProperties.Set("debug.toolchain.prefix", "arm-none-eabi-") - toolProperties.Set("debug.server", "openocd") - toolProperties.Set("debug.server.openocd.path", "{runtime.tools.openocd-0.10.0-arduino7.path}/bin/openocd") - toolProperties.Set("debug.server.openocd.scripts_dir", "{runtime.tools.openocd-0.10.0-arduino7.path}/share/openocd/scripts/") - toolProperties.Set("debug.server.openocd.script", "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}") - } - } - - for _, tool := range pme.GetAllInstalledToolsReleases() { - toolProperties.Merge(tool.RuntimeProperties()) - } - if requiredTools, err := pme.FindToolsRequiredForBuild(platformRelease, referencedPlatformRelease); err == nil { - for _, requiredTool := range requiredTools { - logrus.WithField("tool", requiredTool).Info("Tool required for debug") - toolProperties.Merge(requiredTool.RuntimeProperties()) - } - } - - if req.GetProgrammer() != "" { - if p, ok := platformRelease.Programmers[req.GetProgrammer()]; ok { - toolProperties.Merge(p.Properties) - } else if refP, ok := referencedPlatformRelease.Programmers[req.GetProgrammer()]; ok { - toolProperties.Merge(refP.Properties) - } else { - return nil, &arduino.ProgrammerNotFoundError{Programmer: req.GetProgrammer()} - } - } - - var importPath *paths.Path - if importDir := req.GetImportDir(); importDir != "" { - importPath = paths.New(importDir) - } else { - importPath = sk.DefaultBuildPath() - } - if !importPath.Exist() { - return nil, &arduino.NotFoundError{Message: tr("Compiled sketch not found in %s", importPath)} - } - if !importPath.IsDir() { - return nil, &arduino.NotFoundError{Message: tr("Expected compiled sketch in directory %s, but is a file instead", importPath)} - } - toolProperties.SetPath("build.path", importPath) - toolProperties.Set("build.project_name", sk.Name+".ino") - - // Set debug port property - port := req.GetPort() - if port.GetAddress() != "" { - toolProperties.Set("debug.port", port.Address) - portFile := strings.TrimPrefix(port.Address, "/dev/") - toolProperties.Set("debug.port.file", portFile) - } - - // Extract and expand all debugging properties - debugProperties := properties.NewMap() - for k, v := range toolProperties.SubTree("debug").AsMap() { - debugProperties.Set(k, toolProperties.ExpandPropsInString(v)) - } - - if !debugProperties.ContainsKey("executable") { - return nil, &arduino.FailedDebugError{Message: tr("Debugging not supported for board %s", req.GetFqbn())} - } - - server := debugProperties.Get("server") - toolchain := debugProperties.Get("toolchain") - - var serverConfiguration anypb.Any - switch server { - case "openocd": - openocdProperties := debugProperties.SubTree("server." + server) - scripts := openocdProperties.ExtractSubIndexLists("scripts") - if s := openocdProperties.Get("script"); s != "" && len(scripts) == 0 { - // backward compatibility: use "script" property if there are no "scipts.N" - scripts = append(scripts, s) - } - openocdConf := &rpc.DebugOpenOCDServerConfiguration{ - Path: openocdProperties.Get("path"), - ScriptsDir: openocdProperties.Get("scripts_dir"), - Scripts: scripts, - } - if err := serverConfiguration.MarshalFrom(openocdConf); err != nil { - return nil, err - } - } - - var toolchainConfiguration anypb.Any - switch toolchain { - case "gcc": - gccConf := &rpc.DebugGCCToolchainConfiguration{} - if err := toolchainConfiguration.MarshalFrom(gccConf); err != nil { - return nil, err - } - } - - cortexDebugCustomJson := "" - if cortexDebugProps := debugProperties.SubTree("cortex-debug.custom"); cortexDebugProps.Size() > 0 { - cortexDebugCustomJson = convertToJsonMap(cortexDebugProps) - } - return &rpc.GetDebugConfigResponse{ - Executable: debugProperties.Get("executable"), - Server: server, - ServerPath: debugProperties.Get("server." + server + ".path"), - ServerConfiguration: &serverConfiguration, - SvdFile: debugProperties.Get("svd_file"), - Toolchain: toolchain, - ToolchainPath: debugProperties.Get("toolchain.path"), - ToolchainPrefix: debugProperties.Get("toolchain.prefix"), - ToolchainConfiguration: &toolchainConfiguration, - CortexDebugCustomJson: cortexDebugCustomJson, - }, nil -} - -// Extract a JSON from a given properies.Map and converts key-indexed arrays -// like: -// -// my.indexed.array.0=first -// my.indexed.array.1=second -// my.indexed.array.2=third -// -// into the corresponding JSON arrays. -func convertToJsonMap(in *properties.Map) string { - // XXX: Maybe this method could be a good candidate for propertis.Map? - - // Find the values that should be kept as is, and the indexed arrays - // that should be later converted into arrays. - arraysKeys := map[string]bool{} - stringKeys := []string{} - trailingNumberMatcher := regexp.MustCompile(`^(.*)\.[0-9]+$`) - for _, k := range in.Keys() { - match := trailingNumberMatcher.FindAllStringSubmatch(k, -1) - if len(match) > 0 && len(match[0]) > 1 { - arraysKeys[match[0][1]] = true - } else { - stringKeys = append(stringKeys, k) - } - } - - // Compose a map that can be later marshaled into JSON keeping - // the arrays where they are expected to be. - res := map[string]any{} - for _, k := range stringKeys { - res[k] = in.Get(k) - } - for k := range arraysKeys { - res[k] = in.ExtractSubIndexLists(k) - } - - data, _ := json.MarshalIndent(res, "", " ") - return string(data) -} diff --git a/commands/instances.go b/commands/instances.go index ea1a42b45e8..bd6764cf51d 100644 --- a/commands/instances.go +++ b/commands/instances.go @@ -17,78 +17,117 @@ package commands import ( "context" + "errors" "fmt" "net/url" "path/filepath" + "runtime" "strings" + "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packageindex" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/resources" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/arduino/utils" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packageindex" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/arduino/utils" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) -var tr = i18n.Tr - -func installTool(pm *packagemanager.PackageManager, tool *cores.ToolRelease, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { +func installTool(ctx context.Context, pm *packagemanager.PackageManager, tool *cores.ToolRelease, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { pme, release := pm.NewExplorer() defer release() - taskCB(&rpc.TaskProgress{Name: tr("Downloading missing tool %s", tool)}) - if err := pme.DownloadToolRelease(tool, nil, downloadCB); err != nil { - return fmt.Errorf(tr("downloading %[1]s tool: %[2]s"), tool, err) + + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Downloading missing tool %s", tool)}) + if err := pme.DownloadToolRelease(ctx, tool, downloadCB); err != nil { + return errors.New(i18n.Tr("downloading %[1]s tool: %[2]s", tool, err)) } taskCB(&rpc.TaskProgress{Completed: true}) if err := pme.InstallTool(tool, taskCB, true); err != nil { - return fmt.Errorf(tr("installing %[1]s tool: %[2]s"), tool, err) + return errors.New(i18n.Tr("installing %[1]s tool: %[2]s", tool, err)) } return nil } -// Create a new CoreInstance ready to be initialized, supporting directories are also created. -func Create(req *rpc.CreateRequest, extraUserAgent ...string) (*rpc.CreateResponse, error) { - inst, err := instances.Create(extraUserAgent...) +// Create a new Instance ready to be initialized, supporting directories are also created. +func (s *arduinoCoreServerImpl) Create(ctx context.Context, req *rpc.CreateRequest) (*rpc.CreateResponse, error) { + var userAgent string + if md, ok := metadata.FromIncomingContext(ctx); ok { + userAgent = strings.Join(md.Get("user-agent"), " ") + } + if userAgent == "" { + userAgent = "gRPCClientUnknown/0.0.0" + } + + // Setup downloads directory + downloadsDir := s.settings.DownloadsDir() + if downloadsDir.NotExist() { + err := downloadsDir.MkdirAll() + if err != nil { + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Failed to create downloads directory"), Cause: err} + } + } + + // Setup data directory + dataDir := s.settings.DataDir() + userPackagesDir := s.settings.UserDir().Join("hardware") + packagesDir := s.settings.PackagesDir() + if packagesDir.NotExist() { + err := packagesDir.MkdirAll() + if err != nil { + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Failed to create data directory"), Cause: err} + } + } + + config, err := s.settings.DownloaderConfig() + if err != nil { + return nil, err + } + inst, err := instances.Create(dataDir, packagesDir, userPackagesDir, downloadsDir, userAgent, config) if err != nil { return nil, err } return &rpc.CreateResponse{Instance: inst}, nil } +// InitStreamResponseToCallbackFunction returns a gRPC stream to be used in Init that sends +// all responses to the callback function. +func InitStreamResponseToCallbackFunction(ctx context.Context, cb func(r *rpc.InitResponse) error) rpc.ArduinoCoreService_InitServer { + return streamResponseToCallback(ctx, cb) +} + // Init loads installed libraries and Platforms in CoreInstance with specified ID, // a gRPC status error is returned if the CoreInstance doesn't exist. // All responses are sent through responseCallback, can be nil to ignore all responses. // Failures don't stop the loading process, in case of loading failure the Platform or library // is simply skipped and an error gRPC status is sent to responseCallback. -func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) error { - if responseCallback == nil { - responseCallback = func(r *rpc.InitResponse) {} - } - reqInst := req.GetInstance() - if reqInst == nil { - return &arduino.InvalidInstanceError{} - } +func (s *arduinoCoreServerImpl) Init(req *rpc.InitRequest, stream rpc.ArduinoCoreService_InitServer) error { + ctx := stream.Context() + instance := req.GetInstance() if !instances.IsValid(instance) { - return &arduino.InvalidInstanceError{} + return &cmderrors.InvalidInstanceError{} } // Setup callback functions - if responseCallback == nil { - responseCallback = func(r *rpc.InitResponse) {} + var responseCallback func(*rpc.InitResponse) error + if stream != nil { + syncSend := NewSynchronizedSend(stream.Send) + responseCallback = syncSend.Send + } else { + responseCallback = func(*rpc.InitResponse) error { return nil } } responseError := func(st *status.Status) { responseCallback(&rpc.InitResponse{ @@ -121,19 +160,16 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro if req.GetProfile() != "" { sk, err := sketch.New(paths.New(req.GetSketchPath())) if err != nil { - return &arduino.InvalidArgumentError{Cause: err} + return &cmderrors.InvalidArgumentError{Cause: err} } - profile = sk.GetProfile(req.GetProfile()) - if profile == nil { - return &arduino.UnknownProfileError{Profile: req.GetProfile()} + p, err := sk.GetProfile(req.GetProfile()) + if err != nil { + return err } + profile = p responseCallback(&rpc.InitResponse{ Message: &rpc.InitResponse_Profile{ - Profile: &rpc.Profile{ - Name: req.GetProfile(), - Fqbn: profile.FQBN, - // TODO: Other profile infos may be provided here... - }, + Profile: profile.ToRpc(), }, }) } @@ -142,27 +178,28 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro defaultIndexURL, _ := utils.URLParse(globals.DefaultIndexURL) allPackageIndexUrls := []*url.URL{defaultIndexURL} if profile == nil { - for _, u := range configuration.Settings.GetStringSlice("board_manager.additional_urls") { + for _, u := range s.settings.BoardManagerAdditionalUrls() { URL, err := utils.URLParse(u) if err != nil { - e := &arduino.InitFailedError{ + e := &cmderrors.InitFailedError{ Code: codes.InvalidArgument, - Cause: fmt.Errorf(tr("Invalid additional URL: %v", err)), + Cause: errors.New(i18n.Tr("Invalid additional URL: %v", err)), Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INVALID_INDEX_URL, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) continue } allPackageIndexUrls = append(allPackageIndexUrls, URL) } } - if err := firstUpdate(context.Background(), req.GetInstance(), downloadCallback, allPackageIndexUrls); err != nil { - e := &arduino.InitFailedError{ + + if err := firstUpdate(ctx, s, req.GetInstance(), s.settings.DataDir(), downloadCallback, allPackageIndexUrls); err != nil { + e := &cmderrors.InitFailedError{ Code: codes.InvalidArgument, Cause: err, Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_DOWNLOAD_ERROR, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) } { @@ -171,30 +208,34 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro // after reinitializing an instance after installing or uninstalling a core. // If this is not done the information of the uninstall core is kept in memory, // even if it should not. - pmb, commitPackageManager := instances.GetPackageManager(instance).NewBuilder() + pm, err := instances.GetPackageManager(instance) + if err != nil { + return err + } + pmb, commitPackageManager := pm.NewBuilder() // Load packages index for _, URL := range allPackageIndexUrls { if URL.Scheme == "file" { _, err := pmb.LoadPackageIndexFromFile(paths.New(URL.Path)) if err != nil { - e := &arduino.InitFailedError{ + e := &cmderrors.InitFailedError{ Code: codes.FailedPrecondition, - Cause: fmt.Errorf(tr("Loading index file: %v", err)), + Cause: errors.New(i18n.Tr("Loading index file: %v", err)), Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) } continue } if err := pmb.LoadPackageIndex(URL); err != nil { - e := &arduino.InitFailedError{ + e := &cmderrors.InitFailedError{ Code: codes.FailedPrecondition, - Cause: fmt.Errorf(tr("Loading index file: %v", err)), + Cause: errors.New(i18n.Tr("Loading index file: %v", err)), Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) } } @@ -206,17 +247,15 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro // Load Platforms if profile == nil { for _, err := range pmb.LoadHardware() { - s := &arduino.PlatformLoadingError{Cause: err} - responseError(s.ToRPCStatus()) + s := &cmderrors.PlatformLoadingError{Cause: err} + responseError(s.GRPCStatus()) } } else { // Load platforms from profile - errs := pmb.LoadHardwareForProfile( - profile, true, downloadCallback, taskCallback, - ) + errs := pmb.LoadHardwareForProfile(ctx, profile, true, downloadCallback, taskCallback, s.settings) for _, err := range errs { - s := &arduino.PlatformLoadingError{Cause: err} - responseError(s.ToRPCStatus()) + s := &cmderrors.PlatformLoadingError{Cause: err} + responseError(s.GRPCStatus()) } // Load "builtin" tools @@ -231,12 +270,12 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro for name, tool := range pmb.GetOrCreatePackage("builtin").Tools { latest := tool.LatestRelease() if latest == nil { - e := &arduino.InitFailedError{ + e := &cmderrors.InitFailedError{ Code: codes.Internal, - Cause: fmt.Errorf(tr("can't find latest release of tool %s", name)), + Cause: errors.New(i18n.Tr("can't find latest release of tool %s", name)), Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) } else if !latest.IsInstalled() { builtinToolsToInstall = append(builtinToolsToInstall, latest) } @@ -245,108 +284,137 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro // Install builtin tools if necessary if len(builtinToolsToInstall) > 0 { for _, toolRelease := range builtinToolsToInstall { - if err := installTool(pmb.Build(), toolRelease, downloadCallback, taskCallback); err != nil { - e := &arduino.InitFailedError{ + if err := installTool(ctx, pmb.Build(), toolRelease, downloadCallback, taskCallback); err != nil { + e := &cmderrors.InitFailedError{ Code: codes.Internal, Cause: err, Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) } } // We installed at least one builtin tool after loading hardware // so we must reload again otherwise we would never found them. for _, err := range loadBuiltinTools() { - s := &arduino.PlatformLoadingError{Cause: err} - responseError(s.ToRPCStatus()) + s := &cmderrors.PlatformLoadingError{Cause: err} + responseError(s.GRPCStatus()) } } commitPackageManager() } - pme, release := instances.GetPackageManagerExplorer(instance) + pme, release, err := instances.GetPackageManagerExplorer(instance) + if err != nil { + return err + } defer release() for _, err := range pme.LoadDiscoveries() { - s := &arduino.PlatformLoadingError{Cause: err} - responseError(s.ToRPCStatus()) + s := &cmderrors.PlatformLoadingError{Cause: err} + responseError(s.GRPCStatus()) } // Create library manager and add libraries directories - lm := librariesmanager.NewLibraryManager( - pme.IndexDir, - pme.DownloadDir, - ) - _ = instances.SetLibraryManager(instance, lm) // should never fail + lmb := librariesmanager.NewBuilder() // Load libraries for _, pack := range pme.GetPackages() { for _, platform := range pack.Platforms { if platformRelease := pme.GetInstalledPlatformRelease(platform); platformRelease != nil { - lm.AddPlatformReleaseLibrariesDir(platformRelease, libraries.PlatformBuiltIn) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + PlatformRelease: platformRelease, + Path: platformRelease.GetLibrariesDir(), + Location: libraries.PlatformBuiltIn, + }) } } } - if err := lm.LoadIndex(); err != nil { - s := status.Newf(codes.FailedPrecondition, tr("Loading index file: %v"), err) + indexFileName, err := globals.LibrariesIndexResource.IndexFileName() + if err != nil { + // should never happen + panic("failed getting libraries index file name: " + err.Error()) + } + indexFile := pme.IndexDir.Join(indexFileName) + + logrus.WithField("index", indexFile).Info("Loading libraries index file") + li, err := librariesindex.LoadIndex(indexFile) + if err != nil { + s := status.Newf(codes.FailedPrecondition, i18n.Tr("Loading index file: %v", err)) responseError(s) + li = librariesindex.EmptyIndex } + instances.SetLibrariesIndex(instance, li) if profile == nil { // Add directories of libraries bundled with IDE - if bundledLibsDir := configuration.IDEBuiltinLibrariesDir(configuration.Settings); bundledLibsDir != nil { - lm.AddLibrariesDir(bundledLibsDir, libraries.IDEBuiltIn) + if bundledLibsDir := s.settings.IDEBuiltinLibrariesDir(); bundledLibsDir != nil { + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: bundledLibsDir, + Location: libraries.IDEBuiltIn, + }) } // Add libraries directory from config file - lm.AddLibrariesDir(configuration.LibrariesDir(configuration.Settings), libraries.User) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: s.settings.LibrariesDir(), + Location: libraries.User, + }) } else { // Load libraries required for profile for _, libraryRef := range profile.Libraries { uid := libraryRef.InternalUniqueIdentifier() - libRoot := configuration.ProfilesCacheDir(configuration.Settings).Join(uid) + libRoot := s.settings.ProfilesCacheDir().Join(uid) libDir := libRoot.Join(libraryRef.Library) if !libDir.IsDir() { // Download library - taskCallback(&rpc.TaskProgress{Name: tr("Downloading library %s", libraryRef)}) - libRelease := lm.Index.FindRelease(&librariesindex.Reference{ - Name: libraryRef.Library, - Version: libraryRef.Version, - }) - if libRelease == nil { - taskCallback(&rpc.TaskProgress{Name: tr("Library %s not found", libraryRef)}) - err := &arduino.LibraryNotFoundError{Library: libraryRef.Library} - responseError(err.ToRPCStatus()) + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Downloading library %s", libraryRef)}) + libRelease, err := li.FindRelease(libraryRef.Library, libraryRef.Version) + if err != nil { + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Library %s not found", libraryRef)}) + err := &cmderrors.LibraryNotFoundError{Library: libraryRef.Library} + responseError(err.GRPCStatus()) + continue + } + config, err := s.settings.DownloaderConfig() + if err != nil { + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Error downloading library %s", libraryRef)}) + e := &cmderrors.FailedLibraryInstallError{Cause: err} + responseError(e.GRPCStatus()) continue } - if err := libRelease.Resource.Download(lm.DownloadsDir, nil, libRelease.String(), downloadCallback, ""); err != nil { - taskCallback(&rpc.TaskProgress{Name: tr("Error downloading library %s", libraryRef)}) - e := &arduino.FailedLibraryInstallError{Cause: err} - responseError(e.ToRPCStatus()) + if err := libRelease.Resource.Download(ctx, pme.DownloadDir, config, libRelease.String(), downloadCallback, ""); err != nil { + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Error downloading library %s", libraryRef)}) + e := &cmderrors.FailedLibraryInstallError{Cause: err} + responseError(e.GRPCStatus()) continue } taskCallback(&rpc.TaskProgress{Completed: true}) // Install library - taskCallback(&rpc.TaskProgress{Name: tr("Installing library %s", libraryRef)}) - if err := libRelease.Resource.Install(lm.DownloadsDir, libRoot, libDir); err != nil { - taskCallback(&rpc.TaskProgress{Name: tr("Error installing library %s", libraryRef)}) - e := &arduino.FailedLibraryInstallError{Cause: err} - responseError(e.ToRPCStatus()) + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Installing library %s", libraryRef)}) + if err := libRelease.Resource.Install(pme.DownloadDir, libRoot, libDir); err != nil { + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Error installing library %s", libraryRef)}) + e := &cmderrors.FailedLibraryInstallError{Cause: err} + responseError(e.GRPCStatus()) continue } taskCallback(&rpc.TaskProgress{Completed: true}) } - lm.AddLibrariesDir(libRoot, libraries.User) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: libRoot, + Location: libraries.User, + }) } } - for _, status := range lm.RescanLibraries() { + lm, libsLoadingWarnings := lmb.Build() + _ = instances.SetLibraryManager(instance, lm) // should never fail + for _, status := range libsLoadingWarnings { logrus.WithError(status.Err()).Warnf("Error loading library") // TODO: report as warning: responseError(err) } @@ -354,117 +422,231 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro // Refreshes the locale used, this will change the // language of the CLI if the locale is different // after started. - i18n.Init(configuration.Settings.GetString("locale")) + i18n.Init(s.settings.GetString("locale")) return nil } -// Destroy FIXMEDOC -func Destroy(ctx context.Context, req *rpc.DestroyRequest) (*rpc.DestroyResponse, error) { +// Destroy deletes an instance. +func (s *arduinoCoreServerImpl) Destroy(ctx context.Context, req *rpc.DestroyRequest) (*rpc.DestroyResponse, error) { if ok := instances.Delete(req.GetInstance()); !ok { - return nil, &arduino.InvalidInstanceError{} + return nil, &cmderrors.InvalidInstanceError{} } return &rpc.DestroyResponse{}, nil } +// UpdateLibrariesIndexStreamResponseToCallbackFunction returns a gRPC stream to be used in UpdateLibrariesIndex that sends +// all responses to the callback function. +func UpdateLibrariesIndexStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB) (rpc.ArduinoCoreService_UpdateLibrariesIndexServer, func() *rpc.UpdateLibrariesIndexResponse_Result) { + var result *rpc.UpdateLibrariesIndexResponse_Result + return streamResponseToCallback(ctx, func(r *rpc.UpdateLibrariesIndexResponse) error { + if r.GetDownloadProgress() != nil { + downloadCB(r.GetDownloadProgress()) + } + if r.GetResult() != nil { + result = r.GetResult() + } + return nil + }), func() *rpc.UpdateLibrariesIndexResponse_Result { + return result + } +} + // UpdateLibrariesIndex updates the library_index.json -func UpdateLibrariesIndex(ctx context.Context, req *rpc.UpdateLibrariesIndexRequest, downloadCB rpc.DownloadProgressCB) error { - logrus.Info("Updating libraries index") - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) UpdateLibrariesIndex(req *rpc.UpdateLibrariesIndexRequest, stream rpc.ArduinoCoreService_UpdateLibrariesIndexServer) error { + syncSend := NewSynchronizedSend(stream.Send) + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.UpdateLibrariesIndexResponse{ + Message: &rpc.UpdateLibrariesIndexResponse_DownloadProgress{DownloadProgress: p}}) + } + + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + indexDir := pme.IndexDir + release() + index := globals.LibrariesIndexResource + + resultCB := func(status rpc.IndexUpdateReport_Status) { + syncSend.Send(&rpc.UpdateLibrariesIndexResponse{ + Message: &rpc.UpdateLibrariesIndexResponse_Result_{ + Result: &rpc.UpdateLibrariesIndexResponse_Result{ + LibrariesIndex: &rpc.IndexUpdateReport{ + IndexUrl: index.URL.String(), + Status: status, + }, + }, + }, + }) } - if err := lm.IndexFile.Parent().MkdirAll(); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Could not create index directory"), Cause: err} + // Create the index directory if it doesn't exist + if err := indexDir.MkdirAll(); err != nil { + resultCB(rpc.IndexUpdateReport_STATUS_FAILED) + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Could not create index directory"), Cause: err} } - // Create a temp dir to stage all downloads - tmp, err := paths.MkTempDir("", "library_index_download") - if err != nil { - return &arduino.TempDirCreationFailedError{Cause: err} + // Check if the index file is already up-to-date + indexFileName, _ := index.IndexFileName() + if info, err := indexDir.Join(indexFileName).Stat(); err == nil { + ageSecs := int64(time.Since(info.ModTime()).Seconds()) + if ageSecs < req.GetUpdateIfOlderThanSecs() { + resultCB(rpc.IndexUpdateReport_STATUS_ALREADY_UP_TO_DATE) + return nil + } } - defer tmp.RemoveAll() - indexResource := resources.IndexResource{ - URL: librariesmanager.LibraryIndexWithSignatureArchiveURL, - EnforceSignatureVerification: true, + // Perform index update + config, err := s.settings.DownloaderConfig() + if err != nil { + return err } - if err := indexResource.Download(lm.IndexFile.Parent(), downloadCB); err != nil { + if err := globals.LibrariesIndexResource.Download(stream.Context(), indexDir, downloadCB, config); err != nil { + resultCB(rpc.IndexUpdateReport_STATUS_FAILED) return err } + resultCB(rpc.IndexUpdateReport_STATUS_UPDATED) return nil } +// UpdateIndexStreamResponseToCallbackFunction returns a gRPC stream to be used in UpdateIndex that sends +// all responses to the callback function. +func UpdateIndexStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB) (rpc.ArduinoCoreService_UpdateIndexServer, func() *rpc.UpdateIndexResponse_Result) { + var result *rpc.UpdateIndexResponse_Result + return streamResponseToCallback(ctx, func(r *rpc.UpdateIndexResponse) error { + if r.GetDownloadProgress() != nil { + downloadCB(r.GetDownloadProgress()) + } + if r.GetResult() != nil { + result = r.GetResult() + } + return nil + }), func() *rpc.UpdateIndexResponse_Result { + return result + } +} + // UpdateIndex FIXMEDOC -func UpdateIndex(ctx context.Context, req *rpc.UpdateIndexRequest, downloadCB rpc.DownloadProgressCB) error { +func (s *arduinoCoreServerImpl) UpdateIndex(req *rpc.UpdateIndexRequest, stream rpc.ArduinoCoreService_UpdateIndexServer) error { if !instances.IsValid(req.GetInstance()) { - return &arduino.InvalidInstanceError{} + return &cmderrors.InvalidInstanceError{} + } + + report := func(indexURL *url.URL, status rpc.IndexUpdateReport_Status) *rpc.IndexUpdateReport { + return &rpc.IndexUpdateReport{ + IndexUrl: indexURL.String(), + Status: status, + } } - indexpath := configuration.DataDir(configuration.Settings) + syncSend := NewSynchronizedSend(stream.Send) + var downloadCB rpc.DownloadProgressCB = func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.UpdateIndexResponse{ + Message: &rpc.UpdateIndexResponse_DownloadProgress{DownloadProgress: p}, + }) + } + indexpath := s.settings.DataDir() urls := []string{globals.DefaultIndexURL} if !req.GetIgnoreCustomPackageIndexes() { - urls = append(urls, configuration.Settings.GetStringSlice("board_manager.additional_urls")...) + urls = append(urls, s.settings.GetStringSlice("board_manager.additional_urls")...) } failed := false + result := &rpc.UpdateIndexResponse_Result{} for _, u := range urls { - URL, err := utils.URLParse(u) + URL, err := url.Parse(u) if err != nil { logrus.Warnf("unable to parse additional URL: %s", u) - msg := fmt.Sprintf("%s: %v", tr("Unable to parse URL"), err) - downloadCB.Start(u, tr("Downloading index: %s", u)) + msg := fmt.Sprintf("%s: %v", i18n.Tr("Unable to parse URL"), err) + downloadCB.Start(u, i18n.Tr("Downloading index: %s", u)) downloadCB.End(false, msg) failed = true + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(URL, rpc.IndexUpdateReport_STATUS_FAILED)) continue } logrus.WithField("url", URL).Print("Updating index") if URL.Scheme == "file" { - downloadCB.Start(u, tr("Downloading index: %s", filepath.Base(URL.Path))) path := paths.New(URL.Path) + if URL.Scheme == "file" && runtime.GOOS == "windows" && len(URL.Path) > 1 { + // https://github.com/golang/go/issues/32456 + // Parsed local file URLs on Windows are returned with a leading / so we remove it + path = paths.New(URL.Path[1:]) + } if _, err := packageindex.LoadIndexNoSign(path); err != nil { - msg := fmt.Sprintf("%s: %v", tr("Invalid package index in %s", path), err) + msg := fmt.Sprintf("%s: %v", i18n.Tr("Invalid package index in %s", path), err) + downloadCB.Start(u, i18n.Tr("Downloading index: %s", filepath.Base(URL.Path))) downloadCB.End(false, msg) failed = true + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(URL, rpc.IndexUpdateReport_STATUS_FAILED)) } else { - downloadCB.End(true, "") + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(URL, rpc.IndexUpdateReport_STATUS_SKIPPED)) } continue } + // Check if the index is up-to-date indexResource := resources.IndexResource{URL: URL} + indexFileName, err := indexResource.IndexFileName() + if err != nil { + downloadCB.Start(u, i18n.Tr("Downloading index: %s", filepath.Base(URL.Path))) + downloadCB.End(false, i18n.Tr("Invalid index URL: %s", err)) + failed = true + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(URL, rpc.IndexUpdateReport_STATUS_FAILED)) + continue + } + indexFile := indexpath.Join(indexFileName) + if info, err := indexFile.Stat(); err == nil { + ageSecs := int64(time.Since(info.ModTime()).Seconds()) + if ageSecs < req.GetUpdateIfOlderThanSecs() { + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(URL, rpc.IndexUpdateReport_STATUS_ALREADY_UP_TO_DATE)) + continue + } + } + + config, err := s.settings.DownloaderConfig() + if err != nil { + downloadCB.Start(u, i18n.Tr("Downloading index: %s", filepath.Base(URL.Path))) + downloadCB.End(false, i18n.Tr("Invalid network configuration: %s", err)) + failed = true + continue + } + if strings.HasSuffix(URL.Host, "arduino.cc") && strings.HasSuffix(URL.Path, ".json") { indexResource.SignatureURL, _ = url.Parse(u) // should not fail because we already parsed it indexResource.SignatureURL.Path += ".sig" } - if err := indexResource.Download(indexpath, downloadCB); err != nil { + if err := indexResource.Download(stream.Context(), indexpath, downloadCB, config); err != nil { failed = true + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(URL, rpc.IndexUpdateReport_STATUS_FAILED)) + } else { + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(URL, rpc.IndexUpdateReport_STATUS_UPDATED)) } } - + syncSend.Send(&rpc.UpdateIndexResponse{ + Message: &rpc.UpdateIndexResponse_Result_{Result: result}, + }) if failed { - return &arduino.FailedDownloadError{Message: tr("Some indexes could not be updated.")} + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Some indexes could not be updated.")} } return nil } // firstUpdate downloads libraries and packages indexes if they don't exist. // This ideally is only executed the first time the CLI is run. -func firstUpdate(ctx context.Context, instance *rpc.Instance, downloadCb func(msg *rpc.DownloadProgress), externalPackageIndexes []*url.URL) error { - // Gets the data directory to verify if library_index.json and package_index.json exist - dataDir := configuration.DataDir(configuration.Settings) - libraryIndex := dataDir.Join("library_index.json") +func firstUpdate(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, indexDir *paths.Path, downloadCb func(msg *rpc.DownloadProgress), externalPackageIndexes []*url.URL) error { + libraryIndex := indexDir.Join("library_index.json") if libraryIndex.NotExist() { // The library_index.json file doesn't exists, that means the CLI is run for the first time // so we proceed with the first update that downloads the file req := &rpc.UpdateLibrariesIndexRequest{Instance: instance} - if err := UpdateLibrariesIndex(ctx, req, downloadCb); err != nil { + stream, _ := UpdateLibrariesIndexStreamResponseToCallbackFunction(ctx, downloadCb) + if err := srv.UpdateLibrariesIndex(req, stream); err != nil { return err } } @@ -475,18 +657,19 @@ func firstUpdate(ctx context.Context, instance *rpc.Instance, downloadCb func(ms } packageIndexFileName, err := (&resources.IndexResource{URL: URL}).IndexFileName() if err != nil { - return &arduino.FailedDownloadError{ - Message: tr("Error downloading index '%s'", URL), - Cause: &arduino.InvalidURLError{}} + return &cmderrors.FailedDownloadError{ + Message: i18n.Tr("Error downloading index '%s'", URL), + Cause: &cmderrors.InvalidURLError{}} } - packageIndexFile := dataDir.Join(packageIndexFileName) + packageIndexFile := indexDir.Join(packageIndexFileName) if packageIndexFile.NotExist() { // The index file doesn't exists, that means the CLI is run for the first time, // or the 3rd party package index URL has just been added. Similarly to the // library update we download that file and all the other package indexes from // additional_urls req := &rpc.UpdateIndexRequest{Instance: instance} - if err := UpdateIndex(ctx, req, downloadCb); err != nil { + stream, _ := UpdateIndexStreamResponseToCallbackFunction(ctx, downloadCb) + if err := srv.UpdateIndex(req, stream); err != nil { return err } break diff --git a/commands/internal/instances/instances.go b/commands/internal/instances/instances.go index 7b13f77234d..272eaaaafdb 100644 --- a/commands/internal/instances/instances.go +++ b/commands/internal/instances/instances.go @@ -1,25 +1,40 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + package instances import ( "sync" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/arduino-cli/version" + "github.com/arduino/go-paths-helper" + "go.bug.st/downloader/v2" ) -var tr = i18n.Tr - // coreInstance is an instance of the Arduino Core Services. The user can // instantiate as many as needed by providing a different configuration // for each one. type coreInstance struct { pm *packagemanager.PackageManager lm *librariesmanager.LibrariesManager + li *librariesindex.Index } // instances contains all the running Arduino Core Services instances @@ -30,36 +45,80 @@ var instancesMux sync.Mutex // GetPackageManager returns a PackageManager. If the package manager is not found // (because the instance is invalid or has been destroyed), nil is returned. // Deprecated: use GetPackageManagerExplorer instead. -func GetPackageManager(inst *rpc.Instance) *packagemanager.PackageManager { +func GetPackageManager(inst *rpc.Instance) (*packagemanager.PackageManager, error) { instancesMux.Lock() i := instances[inst.GetId()] instancesMux.Unlock() if i == nil { - return nil + return nil, &cmderrors.InvalidInstanceError{} } - return i.pm + return i.pm, nil } // GetPackageManagerExplorer returns a new package manager Explorer. The // explorer holds a read lock on the underlying PackageManager and it should // be released by calling the returned "release" function. -func GetPackageManagerExplorer(req *rpc.Instance) (explorer *packagemanager.Explorer, release func()) { - pm := GetPackageManager(req) - if pm == nil { - return nil, nil +func GetPackageManagerExplorer(req *rpc.Instance) (explorer *packagemanager.Explorer, release func(), _err error) { + pm, err := GetPackageManager(req) + if err != nil { + return nil, nil, err } - return pm.NewExplorer() + pme, release := pm.NewExplorer() + return pme, release, nil } // GetLibraryManager returns the library manager for the given instance. -func GetLibraryManager(inst *rpc.Instance) *librariesmanager.LibrariesManager { +func GetLibraryManager(inst *rpc.Instance) (*librariesmanager.LibrariesManager, error) { instancesMux.Lock() i := instances[inst.GetId()] instancesMux.Unlock() if i == nil { - return nil + return nil, &cmderrors.InvalidInstanceError{} + } + return i.lm, nil +} + +// GetLibraryManagerExplorer returns the library manager Explorer for the given instance. +func GetLibraryManagerExplorer(inst *rpc.Instance) (*librariesmanager.Explorer, func(), error) { + lm, err := GetLibraryManager(inst) + if err != nil { + return nil, nil, err + } + lmi, release := lm.NewExplorer() + return lmi, release, nil +} + +// GetLibraryManagerInstaller returns the library manager Installer for the given instance. +func GetLibraryManagerInstaller(inst *rpc.Instance) (*librariesmanager.Installer, func(), error) { + lm, err := GetLibraryManager(inst) + if err != nil { + return nil, nil, err } - return i.lm + lmi, release := lm.NewInstaller() + return lmi, release, nil +} + +// GetLibrariesIndex returns the library index for the given instance. +func GetLibrariesIndex(inst *rpc.Instance) (*librariesindex.Index, error) { + instancesMux.Lock() + defer instancesMux.Unlock() + i := instances[inst.GetId()] + if i == nil { + return nil, &cmderrors.InvalidInstanceError{} + } + return i.li, nil +} + +// SetLibrariesIndex sets the library index for the given instance. +func SetLibrariesIndex(inst *rpc.Instance, li *librariesindex.Index) error { + instancesMux.Lock() + defer instancesMux.Unlock() + i := instances[inst.GetId()] + if i == nil { + return &cmderrors.InvalidInstanceError{} + } + i.li = li + return nil } // SetLibraryManager sets the library manager for the given instance. @@ -74,45 +133,23 @@ func SetLibraryManager(inst *rpc.Instance, lm *librariesmanager.LibrariesManager return true } -// Create a new *rpc.Instance ready to be initialized, supporting directories are also created. -func Create(extraUserAgent ...string) (*rpc.Instance, error) { - instance := &coreInstance{} - - // Setup downloads directory - downloadsDir := configuration.DownloadsDir(configuration.Settings) - if downloadsDir.NotExist() { - err := downloadsDir.MkdirAll() - if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Failed to create downloads directory"), Cause: err} - } +// Create a new *rpc.Instance ready to be initialized +func Create(dataDir, packagesDir, userPackagesDir, downloadsDir *paths.Path, extraUserAgent string, downloaderConfig downloader.Config) (*rpc.Instance, error) { + // Create package manager + userAgent := "arduino-cli/" + version.VersionInfo.VersionString + if extraUserAgent != "" { + userAgent += " " + extraUserAgent } + tempDir := dataDir.Join("tmp") - // Setup data directory - dataDir := configuration.DataDir(configuration.Settings) - packagesDir := configuration.PackagesDir(configuration.Settings) - if packagesDir.NotExist() { - err := packagesDir.MkdirAll() - if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Failed to create data directory"), Cause: err} - } - } + pm := packagemanager.NewBuilder(dataDir, packagesDir, userPackagesDir, downloadsDir, tempDir, userAgent, downloaderConfig).Build() + lm, _ := librariesmanager.NewBuilder().Build() - // Create package manager - userAgent := "arduino-cli/" + version.VersionInfo.VersionString - for _, ua := range extraUserAgent { - userAgent += " " + ua + instance := &coreInstance{ + pm: pm, + lm: lm, + li: librariesindex.EmptyIndex, } - instance.pm = packagemanager.NewBuilder( - dataDir, - configuration.PackagesDir(configuration.Settings), - downloadsDir, - dataDir.Join("tmp"), - userAgent, - ).Build() - instance.lm = librariesmanager.NewLibraryManager( - dataDir, - downloadsDir, - ) // Save instance instancesMux.Lock() diff --git a/commands/lib.go b/commands/lib.go deleted file mode 100644 index 8794f4ea94a..00000000000 --- a/commands/lib.go +++ /dev/null @@ -1,46 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package commands - -/* -import ( - "fmt" - "context" -) - -func (s *Service) ListLibraries(ctx context.Context, in *ListLibrariesReq) (*ListLibrariesResp, error) { - if in.Instance == nil { - return nil, fmt.Errorf("invalid request") - } - instance, ok := instances[in.Instance.Id] - if !ok { - return nil, fmt.Errorf("instance not found") - } - libs := lib.ListLibraries(instance.lm, in.Updatable) - - result := []*pb.Library{} - for _, lib := range libs.Libraries { - result = append(result, &pb.Library{ - Name: lib.Library.Name, - Paragraph: lib.Library.Paragraph, - Precompiled: lib.Library.Precompiled, - }) - } - return &pb.ListLibrariesResp{ - Libraries: result, - }, nil -} -*/ diff --git a/commands/lib/download.go b/commands/lib/download.go deleted file mode 100644 index 1d30ba1dc48..00000000000 --- a/commands/lib/download.go +++ /dev/null @@ -1,71 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/httpclient" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/sirupsen/logrus" -) - -var tr = i18n.Tr - -// LibraryDownload executes the download of the library. -// A DownloadProgressCB callback function must be passed to monitor download progress. -func LibraryDownload(ctx context.Context, req *rpc.LibraryDownloadRequest, downloadCB rpc.DownloadProgressCB) (*rpc.LibraryDownloadResponse, error) { - logrus.Info("Executing `arduino-cli lib download`") - - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return nil, &arduino.InvalidInstanceError{} - } - - logrus.Info("Preparing download") - - lib, err := findLibraryIndexRelease(lm, req) - if err != nil { - return nil, err - } - - if err := downloadLibrary(lm, lib, downloadCB, func(*rpc.TaskProgress) {}, "download"); err != nil { - return nil, err - } - - return &rpc.LibraryDownloadResponse{}, nil -} - -func downloadLibrary(lm *librariesmanager.LibrariesManager, libRelease *librariesindex.Release, - downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, queryParameter string) error { - - taskCB(&rpc.TaskProgress{Name: tr("Downloading %s", libRelease)}) - config, err := httpclient.GetDownloaderConfig() - if err != nil { - return &arduino.FailedDownloadError{Message: tr("Can't download library"), Cause: err} - } - if err := libRelease.Resource.Download(lm.DownloadsDir, config, libRelease.String(), downloadCB, queryParameter); err != nil { - return &arduino.FailedDownloadError{Message: tr("Can't download library"), Cause: err} - } - taskCB(&rpc.TaskProgress{Completed: true}) - - return nil -} diff --git a/commands/lib/install.go b/commands/lib/install.go deleted file mode 100644 index d06102b57a6..00000000000 --- a/commands/lib/install.go +++ /dev/null @@ -1,163 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "context" - "errors" - "fmt" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" - "github.com/sirupsen/logrus" -) - -// LibraryInstall resolves the library dependencies, then downloads and installs the libraries into the install location. -func LibraryInstall(ctx context.Context, req *rpc.LibraryInstallRequest, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return &arduino.InvalidInstanceError{} - } - - toInstall := map[string]*rpc.LibraryDependencyStatus{} - installLocation := libraries.FromRPCLibraryInstallLocation(req.GetInstallLocation()) - if req.NoDeps { - toInstall[req.Name] = &rpc.LibraryDependencyStatus{ - Name: req.Name, - VersionRequired: req.Version, - } - } else { - res, err := LibraryResolveDependencies(ctx, &rpc.LibraryResolveDependenciesRequest{ - Instance: req.Instance, - Name: req.Name, - Version: req.Version, - }) - if err != nil { - return err - } - - for _, dep := range res.Dependencies { - if existingDep, has := toInstall[dep.Name]; has { - if existingDep.VersionRequired != dep.VersionRequired { - err := errors.New( - tr("two different versions of the library %[1]s are required: %[2]s and %[3]s", - dep.Name, dep.VersionRequired, existingDep.VersionRequired)) - return &arduino.LibraryDependenciesResolutionFailedError{Cause: err} - } - } - toInstall[dep.Name] = dep - } - } - - // Find the libReleasesToInstall to install - libReleasesToInstall := map[*librariesindex.Release]*librariesmanager.LibraryInstallPlan{} - for _, lib := range toInstall { - libRelease, err := findLibraryIndexRelease(lm, &rpc.LibraryInstallRequest{ - Name: lib.Name, - Version: lib.VersionRequired, - }) - if err != nil { - return err - } - - installTask, err := lm.InstallPrerequisiteCheck(libRelease.Library.Name, libRelease.Version, installLocation) - if err != nil { - return err - } - if installTask.UpToDate { - taskCB(&rpc.TaskProgress{Message: tr("Already installed %s", libRelease), Completed: true}) - continue - } - - if req.GetNoOverwrite() { - if installTask.ReplacedLib != nil { - return fmt.Errorf(tr("Library %[1]s is already installed, but with a different version: %[2]s", libRelease, installTask.ReplacedLib)) - } - } - libReleasesToInstall[libRelease] = installTask - } - - for libRelease, installTask := range libReleasesToInstall { - // Checks if libRelease is the requested library and not a dependency - downloadReason := "depends" - if libRelease.GetName() == req.Name { - downloadReason = "install" - if installTask.ReplacedLib != nil { - downloadReason = "upgrade" - } - if installLocation == libraries.IDEBuiltIn { - downloadReason += "-builtin" - } - } - if err := downloadLibrary(lm, libRelease, downloadCB, taskCB, downloadReason); err != nil { - return err - } - if err := installLibrary(lm, libRelease, installTask, taskCB); err != nil { - return err - } - } - - if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil { - return err - } - - return nil -} - -func installLibrary(lm *librariesmanager.LibrariesManager, libRelease *librariesindex.Release, installTask *librariesmanager.LibraryInstallPlan, taskCB rpc.TaskProgressCB) error { - taskCB(&rpc.TaskProgress{Name: tr("Installing %s", libRelease)}) - logrus.WithField("library", libRelease).Info("Installing library") - - if libReplaced := installTask.ReplacedLib; libReplaced != nil { - taskCB(&rpc.TaskProgress{Message: tr("Replacing %[1]s with %[2]s", libReplaced, libRelease)}) - if err := lm.Uninstall(libReplaced); err != nil { - return &arduino.FailedLibraryInstallError{ - Cause: fmt.Errorf("%s: %s", tr("could not remove old library"), err)} - } - } - if err := lm.Install(libRelease, installTask.TargetPath); err != nil { - return &arduino.FailedLibraryInstallError{Cause: err} - } - - taskCB(&rpc.TaskProgress{Message: tr("Installed %s", libRelease), Completed: true}) - return nil -} - -// ZipLibraryInstall FIXMEDOC -func ZipLibraryInstall(ctx context.Context, req *rpc.ZipLibraryInstallRequest, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - if err := lm.InstallZipLib(ctx, paths.New(req.Path), req.Overwrite); err != nil { - return &arduino.FailedLibraryInstallError{Cause: err} - } - taskCB(&rpc.TaskProgress{Message: tr("Library installed"), Completed: true}) - return nil -} - -// GitLibraryInstall FIXMEDOC -func GitLibraryInstall(ctx context.Context, req *rpc.GitLibraryInstallRequest, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - if err := lm.InstallGitLib(req.Url, req.Overwrite); err != nil { - return &arduino.FailedLibraryInstallError{Cause: err} - } - taskCB(&rpc.TaskProgress{Message: tr("Library installed"), Completed: true}) - return nil -} diff --git a/commands/lib/resolve_deps.go b/commands/lib/resolve_deps.go deleted file mode 100644 index 1c26d026f97..00000000000 --- a/commands/lib/resolve_deps.go +++ /dev/null @@ -1,82 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "context" - "errors" - "sort" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// LibraryResolveDependencies FIXMEDOC -func LibraryResolveDependencies(ctx context.Context, req *rpc.LibraryResolveDependenciesRequest) (*rpc.LibraryResolveDependenciesResponse, error) { - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return nil, &arduino.InvalidInstanceError{} - } - - // Search the requested lib - reqLibRelease, err := findLibraryIndexRelease(lm, req) - if err != nil { - return nil, err - } - - // Extract all installed libraries - installedLibs := map[string]*libraries.Library{} - for _, lib := range listLibraries(lm, false, false) { - installedLibs[lib.Library.Name] = lib.Library - } - - // Resolve all dependencies... - deps := lm.Index.ResolveDependencies(reqLibRelease) - - // If no solution has been found - if len(deps) == 0 { - // Check if there is a problem with the first level deps - for _, directDep := range reqLibRelease.GetDependencies() { - if _, ok := lm.Index.Libraries[directDep.GetName()]; !ok { - err := errors.New(tr("dependency '%s' is not available", directDep.GetName())) - return nil, &arduino.LibraryDependenciesResolutionFailedError{Cause: err} - } - } - - // Otherwise there is no possible solution, the depends field has an invalid formula - return nil, &arduino.LibraryDependenciesResolutionFailedError{} - } - - res := []*rpc.LibraryDependencyStatus{} - for _, dep := range deps { - // ...and add information on currently installed versions of the libraries - installed := "" - if installedLib, has := installedLibs[dep.GetName()]; has { - installed = installedLib.Version.String() - } - res = append(res, &rpc.LibraryDependencyStatus{ - Name: dep.GetName(), - VersionRequired: dep.GetVersion().String(), - VersionInstalled: installed, - }) - } - sort.Slice(res, func(i, j int) bool { - return res[i].Name < res[j].Name - }) - return &rpc.LibraryResolveDependenciesResponse{Dependencies: res}, nil -} diff --git a/commands/lib/search_test.go b/commands/lib/search_test.go deleted file mode 100644 index affb9ba6911..00000000000 --- a/commands/lib/search_test.go +++ /dev/null @@ -1,96 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "strings" - "testing" - - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - paths "github.com/arduino/go-paths-helper" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -var customIndexPath = paths.New("testdata", "test1") -var fullIndexPath = paths.New("testdata", "full") - -func TestSearchLibrary(t *testing.T) { - lm := librariesmanager.NewLibraryManager(customIndexPath, nil) - lm.LoadIndex() - - resp := searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: "test"}, lm) - assert := assert.New(t) - assert.Equal(resp.GetStatus(), rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS) - assert.Equal(len(resp.GetLibraries()), 2) - assert.True(strings.Contains(resp.GetLibraries()[0].Name, "Test")) - assert.True(strings.Contains(resp.GetLibraries()[1].Name, "Test")) -} - -func TestSearchLibrarySimilar(t *testing.T) { - lm := librariesmanager.NewLibraryManager(customIndexPath, nil) - lm.LoadIndex() - - resp := searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: "arduino"}, lm) - assert := assert.New(t) - assert.Equal(resp.GetStatus(), rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS) - assert.Equal(len(resp.GetLibraries()), 2) - libs := map[string]*rpc.SearchedLibrary{} - for _, l := range resp.GetLibraries() { - libs[l.Name] = l - } - assert.Contains(libs, "ArduinoTestPackage") - assert.Contains(libs, "Arduino") -} - -func TestSearchLibraryFields(t *testing.T) { - lm := librariesmanager.NewLibraryManager(fullIndexPath, nil) - lm.LoadIndex() - - query := func(q string) []string { - libs := []string{} - for _, lib := range searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: q}, lm).Libraries { - libs = append(libs, lib.Name) - } - return libs - } - - res := query("SparkFun_u-blox_GNSS") - require.Len(t, res, 3) - require.Equal(t, "SparkFun u-blox Arduino Library", res[0]) - require.Equal(t, "SparkFun u-blox GNSS Arduino Library", res[1]) - require.Equal(t, "SparkFun u-blox SARA-R5 Arduino Library", res[2]) - - res = query("SparkFun u-blox GNSS") - require.Len(t, res, 3) - require.Equal(t, "SparkFun u-blox Arduino Library", res[0]) - require.Equal(t, "SparkFun u-blox GNSS Arduino Library", res[1]) - require.Equal(t, "SparkFun u-blox SARA-R5 Arduino Library", res[2]) - - res = query("painlessMesh") - require.Len(t, res, 1) - require.Equal(t, "Painless Mesh", res[0]) - - res = query("cristian maglie") - require.Len(t, res, 2) - require.Equal(t, "Arduino_ConnectionHandler", res[0]) - require.Equal(t, "FlashStorage_SAMD", res[1]) - - res = query("flashstorage") - require.Len(t, res, 19) - require.Equal(t, "FlashStorage", res[0]) -} diff --git a/commands/lib/uninstall.go b/commands/lib/uninstall.go deleted file mode 100644 index 63b54ba064e..00000000000 --- a/commands/lib/uninstall.go +++ /dev/null @@ -1,59 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" -) - -// LibraryUninstall FIXMEDOC -func LibraryUninstall(ctx context.Context, req *rpc.LibraryUninstallRequest, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - ref, err := createLibIndexReference(lm, req) - if err != nil { - return &arduino.InvalidLibraryError{Cause: err} - } - - libs := lm.FindByReference(ref, libraries.User) - - if len(libs) == 0 { - taskCB(&rpc.TaskProgress{Message: tr("Library %s is not installed", req.Name), Completed: true}) - return nil - } - - if len(libs) == 1 { - taskCB(&rpc.TaskProgress{Name: tr("Uninstalling %s", libs)}) - lm.Uninstall(libs[0]) - taskCB(&rpc.TaskProgress{Completed: true}) - return nil - } - - libsDir := paths.NewPathList() - for _, lib := range libs { - libsDir.Add(lib.InstallDir) - } - return &arduino.MultipleLibraryInstallDetected{ - LibName: libs[0].Name, - LibsDir: libsDir, - Message: tr("Automatic library uninstall can't be performed in this case, please manually remove them."), - } -} diff --git a/commands/lib/upgrade.go b/commands/lib/upgrade.go deleted file mode 100644 index fe7e938a040..00000000000 --- a/commands/lib/upgrade.go +++ /dev/null @@ -1,93 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// LibraryUpgradeAll upgrades all the available libraries -func LibraryUpgradeAll(req *rpc.LibraryUpgradeAllRequest, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return &arduino.InvalidInstanceError{} - } - - if err := upgrade(req.Instance, listLibraries(lm, true, false), downloadCB, taskCB); err != nil { - return err - } - - if err := commands.Init(&rpc.InitRequest{Instance: req.GetInstance()}, nil); err != nil { - return err - } - - return nil -} - -// LibraryUpgrade upgrades a library -func LibraryUpgrade(ctx context.Context, req *rpc.LibraryUpgradeRequest, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return &arduino.InvalidInstanceError{} - } - - // Get the library to upgrade - name := req.GetName() - lib := filterByName(listLibraries(lm, false, false), name) - if lib == nil { - // library not installed... - return &arduino.LibraryNotFoundError{Library: name} - } - if lib.Available == nil { - taskCB(&rpc.TaskProgress{Message: tr("Library %s is already at the latest version", name), Completed: true}) - return nil - } - - // Install update - return upgrade(req.Instance, []*installedLib{lib}, downloadCB, taskCB) -} - -func upgrade(instance *rpc.Instance, libs []*installedLib, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { - for _, lib := range libs { - libInstallReq := &rpc.LibraryInstallRequest{ - Instance: instance, - Name: lib.Library.Name, - Version: "", - NoDeps: false, - NoOverwrite: false, - } - err := LibraryInstall(context.Background(), libInstallReq, downloadCB, taskCB) - if err != nil { - return err - } - } - - return nil -} - -func filterByName(libs []*installedLib, name string) *installedLib { - for _, lib := range libs { - if lib.Library.Name == name { - return lib - } - } - return nil -} diff --git a/commands/lib/utils.go b/commands/lib/utils.go deleted file mode 100644 index fa8290ab997..00000000000 --- a/commands/lib/utils.go +++ /dev/null @@ -1,49 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/commands" -) - -type libraryReferencer interface { - commands.Versioned - GetName() string -} - -func createLibIndexReference(lm *librariesmanager.LibrariesManager, req libraryReferencer) (*librariesindex.Reference, error) { - version, err := commands.ParseVersion(req) - if err != nil { - return nil, &arduino.InvalidVersionError{Cause: err} - } - - return &librariesindex.Reference{Name: req.GetName(), Version: version}, nil -} - -func findLibraryIndexRelease(lm *librariesmanager.LibrariesManager, req libraryReferencer) (*librariesindex.Release, error) { - ref, err := createLibIndexReference(lm, req) - if err != nil { - return nil, err - } - lib := lm.Index.FindRelease(ref) - if lib == nil { - return nil, &arduino.LibraryNotFoundError{Library: ref.String()} - } - return lib, nil -} diff --git a/commands/monitor/monitor.go b/commands/monitor/monitor.go deleted file mode 100644 index 4da0c902868..00000000000 --- a/commands/monitor/monitor.go +++ /dev/null @@ -1,176 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package monitor - -import ( - "context" - "fmt" - "io" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - pluggableMonitor "github.com/arduino/arduino-cli/arduino/monitor" - "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-properties-orderedmap" - "github.com/sirupsen/logrus" -) - -var tr = i18n.Tr - -// PortProxy is an io.ReadWriteCloser that maps into the monitor port of the board -type PortProxy struct { - rw io.ReadWriter - changeSettingsCB func(setting, value string) error - closeCB func() error -} - -func (p *PortProxy) Read(buff []byte) (int, error) { - return p.rw.Read(buff) -} - -func (p *PortProxy) Write(buff []byte) (int, error) { - return p.rw.Write(buff) -} - -// Config sets the port configuration setting to the specified value -func (p *PortProxy) Config(setting, value string) error { - return p.changeSettingsCB(setting, value) -} - -// Close the port -func (p *PortProxy) Close() error { - return p.closeCB() -} - -// Monitor opens a communication port. It returns a PortProxy to communicate with the port and a PortDescriptor -// that describes the available configuration settings. -func Monitor(ctx context.Context, req *rpc.MonitorRequest) (*PortProxy, *pluggableMonitor.PortDescriptor, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, nil, &arduino.InvalidInstanceError{} - } - defer release() - - m, boardSettings, err := findMonitorAndSettingsForProtocolAndBoard(pme, req.GetPort().GetProtocol(), req.GetFqbn()) - if err != nil { - return nil, nil, err - } - - if err := m.Run(); err != nil { - return nil, nil, &arduino.FailedMonitorError{Cause: err} - } - - descriptor, err := m.Describe() - if err != nil { - m.Quit() - return nil, nil, &arduino.FailedMonitorError{Cause: err} - } - - // Apply user-requested settings - if portConfig := req.GetPortConfiguration(); portConfig != nil { - for _, setting := range portConfig.Settings { - boardSettings.Remove(setting.SettingId) // Remove board settings overridden by the user - if err := m.Configure(setting.SettingId, setting.Value); err != nil { - logrus.Errorf("Could not set configuration %s=%s: %s", setting.SettingId, setting.Value, err) - } - } - } - // Apply specific board settings - for setting, value := range boardSettings.AsMap() { - m.Configure(setting, value) - } - - monIO, err := m.Open(req.GetPort().GetAddress(), req.GetPort().GetProtocol()) - if err != nil { - m.Quit() - return nil, nil, &arduino.FailedMonitorError{Cause: err} - } - - logrus.Infof("Port %s successfully opened", req.GetPort().GetAddress()) - return &PortProxy{ - rw: monIO, - changeSettingsCB: m.Configure, - closeCB: func() error { - m.Close() - return m.Quit() - }, - }, descriptor, nil -} - -func findMonitorAndSettingsForProtocolAndBoard(pme *packagemanager.Explorer, protocol, fqbn string) (*pluggableMonitor.PluggableMonitor, *properties.Map, error) { - if protocol == "" { - return nil, nil, &arduino.MissingPortProtocolError{} - } - - var monitorDepOrRecipe *cores.MonitorDependency - boardSettings := properties.NewMap() - - // If a board is specified search the monitor in the board package first - if fqbn != "" { - fqbn, err := cores.ParseFQBN(fqbn) - if err != nil { - return nil, nil, &arduino.InvalidFQBNError{Cause: err} - } - - _, boardPlatform, _, boardProperties, _, err := pme.ResolveFQBN(fqbn) - if err != nil { - return nil, nil, &arduino.UnknownFQBNError{Cause: err} - } - - boardSettings = cores.GetMonitorSettings(protocol, boardProperties) - - if mon, ok := boardPlatform.Monitors[protocol]; ok { - monitorDepOrRecipe = mon - } else if recipe, ok := boardPlatform.MonitorsDevRecipes[protocol]; ok { - // If we have a recipe we must resolve it - cmdLine := boardProperties.ExpandPropsInString(recipe) - cmdArgs, err := properties.SplitQuotedString(cmdLine, `"'`, false) - if err != nil { - return nil, nil, &arduino.InvalidArgumentError{Message: tr("Invalid recipe in platform.txt"), Cause: err} - } - id := fmt.Sprintf("%s-%s", boardPlatform, protocol) - return pluggableMonitor.New(id, cmdArgs...), boardSettings, nil - } - } - - if monitorDepOrRecipe == nil { - // Otherwise look in all package for a suitable monitor - for _, platformRel := range pme.InstalledPlatformReleases() { - if mon, ok := platformRel.Monitors[protocol]; ok { - monitorDepOrRecipe = mon - break - } - } - } - - if monitorDepOrRecipe == nil { - return nil, nil, &arduino.NoMonitorAvailableForProtocolError{Protocol: protocol} - } - - // If it is a monitor dependency, resolve tool and create a monitor client - tool := pme.FindMonitorDependency(monitorDepOrRecipe) - if tool == nil { - return nil, nil, &arduino.MonitorNotFoundError{Monitor: monitorDepOrRecipe.String()} - } - - return pluggableMonitor.New( - monitorDepOrRecipe.Name, - tool.InstallDir.Join(monitorDepOrRecipe.Name).String(), - ), boardSettings, nil -} diff --git a/commands/service.go b/commands/service.go new file mode 100644 index 00000000000..46c7bf3e6d5 --- /dev/null +++ b/commands/service.go @@ -0,0 +1,48 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/internal/cli/configuration" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/arduino-cli/version" +) + +// NewArduinoCoreServer returns an implementation of the ArduinoCoreService gRPC service +// that uses the provided version string. +func NewArduinoCoreServer() rpc.ArduinoCoreServiceServer { + settings := configuration.NewSettings() + + // Setup i18n + i18n.Init(settings.Locale()) + + return &arduinoCoreServerImpl{settings: settings} +} + +type arduinoCoreServerImpl struct { + rpc.UnsafeArduinoCoreServiceServer // Force compile error for unimplemented methods + + // Settings holds configurations of the CLI and the gRPC consumers + settings *configuration.Settings +} + +// Version returns the version of the Arduino CLI +func (s *arduinoCoreServerImpl) Version(ctx context.Context, req *rpc.VersionRequest) (*rpc.VersionResponse, error) { + return &rpc.VersionResponse{Version: version.VersionInfo.VersionString}, nil +} diff --git a/commands/board/details.go b/commands/service_board_details.go similarity index 61% rename from commands/board/details.go rename to commands/service_board_details.go index 17314aa1432..5f042452582 100644 --- a/commands/board/details.go +++ b/commands/service_board_details.go @@ -13,35 +13,35 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package board +package commands import ( "context" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/utils" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/utils" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) -// Details returns all details for a board including tools and HW identifiers. +// BoardDetails returns all details for a board including tools and HW identifiers. // This command basically gather al the information and translates it into the required grpc struct properties -func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetailsResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) BoardDetails(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetailsResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() fqbn, err := cores.ParseFQBN(req.GetFqbn()) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } - boardPackage, boardPlatform, board, boardProperties, boardRefPlatform, err := pme.ResolveFQBN(fqbn) + boardPackage, boardPlatformRelease, board, boardProperties, _, err := pme.ResolveFQBN(fqbn) if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} + return nil, &cmderrors.UnknownFQBNError{Cause: err} } details := &rpc.BoardDetailsResponse{} @@ -52,25 +52,18 @@ func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetai details.Version = board.PlatformRelease.Version.String() details.IdentificationProperties = []*rpc.BoardIdentificationProperties{} for _, p := range board.GetIdentificationProperties() { - details.IdentificationProperties = append(details.IdentificationProperties, &rpc.BoardIdentificationProperties{ + details.IdentificationProperties = append(details.GetIdentificationProperties(), &rpc.BoardIdentificationProperties{ Properties: p.AsMap(), }) } for _, k := range boardProperties.Keys() { v := boardProperties.Get(k) - details.BuildProperties = append(details.BuildProperties, k+"="+v) + details.BuildProperties = append(details.GetBuildProperties(), k+"="+v) } if !req.GetDoNotExpandBuildProperties() { - details.BuildProperties, _ = utils.ExpandBuildProperties(details.BuildProperties) + details.BuildProperties, _ = utils.ExpandBuildProperties(details.GetBuildProperties()) } - details.DebuggingSupported = boardProperties.ContainsKey("debug.executable") || - boardPlatform.Properties.ContainsKey("debug.executable") || - (boardRefPlatform != nil && boardRefPlatform.Properties.ContainsKey("debug.executable")) || - // HOTFIX: Remove me when the `arduino:samd` core is updated - boardPlatform.String() == "arduino:samd@1.8.9" || - boardPlatform.String() == "arduino:samd@1.8.8" - details.Package = &rpc.Package{ Name: boardPackage.Name, Maintainer: boardPackage.Maintainer, @@ -81,16 +74,16 @@ func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetai } details.Platform = &rpc.BoardPlatform{ - Architecture: boardPlatform.Platform.Architecture, - Category: boardPlatform.Platform.Category, - Name: boardPlatform.Platform.Name, + Architecture: boardPlatformRelease.Platform.Architecture, + Category: boardPlatformRelease.Category, + Name: boardPlatformRelease.Name, } - if boardPlatform.Resource != nil { - details.Platform.Url = boardPlatform.Resource.URL - details.Platform.ArchiveFilename = boardPlatform.Resource.ArchiveFileName - details.Platform.Checksum = boardPlatform.Resource.Checksum - details.Platform.Size = boardPlatform.Resource.Size + if boardPlatformRelease.Resource != nil { + details.Platform.Url = boardPlatformRelease.Resource.URL + details.Platform.ArchiveFilename = boardPlatformRelease.Resource.ArchiveFileName + details.Platform.Checksum = boardPlatformRelease.Resource.Checksum + details.Platform.Size = boardPlatformRelease.Resource.Size } details.ConfigOptions = []*rpc.ConfigOption{} @@ -111,14 +104,14 @@ func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetai } configValue.Value = value configValue.ValueLabel = values.Get(value) - configOption.Values = append(configOption.Values, configValue) + configOption.Values = append(configOption.GetValues(), configValue) } - details.ConfigOptions = append(details.ConfigOptions, configOption) + details.ConfigOptions = append(details.GetConfigOptions(), configOption) } details.ToolsDependencies = []*rpc.ToolsDependencies{} - for _, tool := range boardPlatform.ToolDependencies { + for _, tool := range boardPlatformRelease.ToolDependencies { toolRelease := pme.FindToolDependency(tool) var systems []*rpc.Systems if toolRelease != nil { @@ -132,7 +125,7 @@ func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetai }) } } - details.ToolsDependencies = append(details.ToolsDependencies, &rpc.ToolsDependencies{ + details.ToolsDependencies = append(details.GetToolsDependencies(), &rpc.ToolsDependencies{ Name: tool.ToolName, Packager: tool.ToolPackager, Version: tool.ToolVersion.String(), @@ -140,10 +133,11 @@ func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetai }) } + details.DefaultProgrammerId = board.GetDefaultProgrammerID() details.Programmers = []*rpc.Programmer{} - for id, p := range boardPlatform.Programmers { - details.Programmers = append(details.Programmers, &rpc.Programmer{ - Platform: boardPlatform.Platform.Name, + for id, p := range boardPlatformRelease.Programmers { + details.Programmers = append(details.GetProgrammers(), &rpc.Programmer{ + Platform: boardPlatformRelease.Name, Id: id, Name: p.Name, }) diff --git a/commands/board/list.go b/commands/service_board_list.go similarity index 60% rename from commands/board/list.go rename to commands/service_board_list.go index d0b5cb78dc4..a5376cb9f1f 100644 --- a/commands/board/list.go +++ b/commands/service_board_list.go @@ -13,11 +13,12 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package board +package commands import ( "context" "encoding/json" + "errors" "fmt" "io" "net/http" @@ -26,16 +27,17 @@ import ( "strings" "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/arduino/httpclient" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" + f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/cli/configuration" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/arduino-cli/internal/inventory" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" + discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2" "github.com/sirupsen/logrus" ) @@ -44,7 +46,7 @@ var ( validVidPid = regexp.MustCompile(`0[xX][a-fA-F\d]{4}`) ) -func cachedAPIByVidPid(vid, pid string) ([]*rpc.BoardListItem, error) { +func cachedAPIByVidPid(vid, pid string, settings *configuration.Settings) ([]*rpc.BoardListItem, error) { var resp []*rpc.BoardListItem cacheKey := fmt.Sprintf("cache.builder-api.v3/boards/byvid/pid/%s/%s", vid, pid) @@ -58,7 +60,7 @@ func cachedAPIByVidPid(vid, pid string) ([]*rpc.BoardListItem, error) { } } - resp, err := apiByVidPid(vid, pid) // Perform API requrest + resp, err := apiByVidPid(vid, pid, settings) // Perform API requrest if err == nil { if cachedResp, err := json.Marshal(resp); err == nil { @@ -70,37 +72,34 @@ func cachedAPIByVidPid(vid, pid string) ([]*rpc.BoardListItem, error) { return resp, err } -func apiByVidPid(vid, pid string) ([]*rpc.BoardListItem, error) { +func apiByVidPid(vid, pid string, settings *configuration.Settings) ([]*rpc.BoardListItem, error) { // ensure vid and pid are valid before hitting the API if !validVidPid.MatchString(vid) { - return nil, errors.Errorf(tr("Invalid vid value: '%s'"), vid) + return nil, errors.New(i18n.Tr("Invalid vid value: '%s'", vid)) } if !validVidPid.MatchString(pid) { - return nil, errors.Errorf(tr("Invalid pid value: '%s'"), pid) + return nil, errors.New(i18n.Tr("Invalid pid value: '%s'", pid)) } url := fmt.Sprintf("%s/%s/%s", vidPidURL, vid, pid) req, _ := http.NewRequest("GET", url, nil) req.Header.Set("Content-Type", "application/json") - // TODO: use proxy if set - - httpClient, err := httpclient.New() - + httpClient, err := settings.NewHttpClient() if err != nil { - return nil, errors.Wrap(err, tr("failed to initialize http client")) + return nil, fmt.Errorf("%s: %w", i18n.Tr("failed to initialize http client"), err) } res, err := httpClient.Do(req) if err != nil { - return nil, errors.Wrap(err, tr("error querying Arduino Cloud Api")) + return nil, fmt.Errorf("%s: %w", i18n.Tr("error querying Arduino Cloud Api"), err) } if res.StatusCode == 404 { // This is not an error, it just means that the board is not recognized return nil, nil } if res.StatusCode >= 400 { - return nil, errors.Errorf(tr("the server responded with status %s"), res.Status) + return nil, errors.New(i18n.Tr("the server responded with status %s", res.Status)) } resp, err := io.ReadAll(res.Body) @@ -113,12 +112,12 @@ func apiByVidPid(vid, pid string) ([]*rpc.BoardListItem, error) { var dat map[string]interface{} if err := json.Unmarshal(resp, &dat); err != nil { - return nil, errors.Wrap(err, tr("error processing response from server")) + return nil, fmt.Errorf("%s: %w", i18n.Tr("error processing response from server"), err) } name, nameFound := dat["name"].(string) fqbn, fbqnFound := dat["fqbn"].(string) if !nameFound || !fbqnFound { - return nil, errors.New(tr("wrong format in server response")) + return nil, errors.New(i18n.Tr("wrong format in server response")) } return []*rpc.BoardListItem{ @@ -129,18 +128,18 @@ func apiByVidPid(vid, pid string) ([]*rpc.BoardListItem, error) { }, nil } -func identifyViaCloudAPI(props *properties.Map) ([]*rpc.BoardListItem, error) { +func identifyViaCloudAPI(props *properties.Map, settings *configuration.Settings) ([]*rpc.BoardListItem, error) { // If the port is not USB do not try identification via cloud if !props.ContainsKey("vid") || !props.ContainsKey("pid") { return nil, nil } logrus.Debug("Querying builder API for board identification...") - return cachedAPIByVidPid(props.Get("vid"), props.Get("pid")) + return cachedAPIByVidPid(props.Get("vid"), props.Get("pid"), settings) } // identify returns a list of boards checking first the installed platforms or the Cloud API -func identify(pme *packagemanager.Explorer, port *discovery.Port) ([]*rpc.BoardListItem, error) { +func identify(pme *packagemanager.Explorer, port *discovery.Port, settings *configuration.Settings) ([]*rpc.BoardListItem, error) { boards := []*rpc.BoardListItem{} if port.Properties == nil { return boards, nil @@ -151,13 +150,15 @@ func identify(pme *packagemanager.Explorer, port *discovery.Port) ([]*rpc.BoardL for _, board := range pme.IdentifyBoard(port.Properties) { fqbn, err := cores.ParseFQBN(board.FQBN()) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } fqbn.Configs = board.IdentifyBoardConfiguration(port.Properties) // We need the Platform maintaner for sorting so we set it here platform := &rpc.Platform{ - Maintainer: board.PlatformRelease.Platform.Package.Maintainer, + Metadata: &rpc.PlatformMetadata{ + Maintainer: board.PlatformRelease.Platform.Package.Maintainer, + }, } boards = append(boards, &rpc.BoardListItem{ Name: board.Name(), @@ -170,7 +171,7 @@ func identify(pme *packagemanager.Explorer, port *discovery.Port) ([]*rpc.BoardL // if installed cores didn't recognize the board, try querying // the builder API if the board is a USB device port if len(boards) == 0 { - items, err := identifyViaCloudAPI(port.Properties) + items, err := identifyViaCloudAPI(port.Properties, settings) if err != nil { // this is bad, but keep going logrus.WithError(err).Debug("Error querying builder API") @@ -180,12 +181,12 @@ func identify(pme *packagemanager.Explorer, port *discovery.Port) ([]*rpc.BoardL // Sort by FQBN alphabetically sort.Slice(boards, func(i, j int) bool { - return strings.ToLower(boards[i].Fqbn) < strings.ToLower(boards[j].Fqbn) + return strings.ToLower(boards[i].GetFqbn()) < strings.ToLower(boards[j].GetFqbn()) }) // Put Arduino boards before others in case there are non Arduino boards with identical VID:PID combination sort.SliceStable(boards, func(i, j int) bool { - if boards[i].Platform.Maintainer == "Arduino" && boards[j].Platform.Maintainer != "Arduino" { + if boards[i].GetPlatform().GetMetadata().GetMaintainer() == "Arduino" && boards[j].GetPlatform().GetMetadata().GetMaintainer() != "Arduino" { return true } return false @@ -199,13 +200,13 @@ func identify(pme *packagemanager.Explorer, port *discovery.Port) ([]*rpc.BoardL return boards, nil } -// List returns a list of boards found by the loaded discoveries. +// BoardList returns a list of boards found by the loaded discoveries. // In case of errors partial results from discoveries that didn't fail // are returned. -func List(req *rpc.BoardListRequest) (r []*rpc.DetectedPort, discoveryStartErrors []error, e error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) BoardList(ctx context.Context, req *rpc.BoardListRequest) (*rpc.BoardListResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() @@ -214,38 +215,41 @@ func List(req *rpc.BoardListRequest) (r []*rpc.DetectedPort, discoveryStartError var err error fqbnFilter, err = cores.ParseFQBN(f) if err != nil { - return nil, nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } } dm := pme.DiscoveryManager() - discoveryStartErrors = dm.Start() + warnings := f.Map(dm.Start(), (error).Error) time.Sleep(time.Duration(req.GetTimeout()) * time.Millisecond) - retVal := []*rpc.DetectedPort{} + ports := []*rpc.DetectedPort{} for _, port := range dm.List() { - boards, err := identify(pme, port) + boards, err := identify(pme, port, s.settings) if err != nil { - return nil, discoveryStartErrors, err + warnings = append(warnings, err.Error()) } // boards slice can be empty at this point if neither the cores nor the // API managed to recognize the connected board b := &rpc.DetectedPort{ - Port: port.ToRPC(), + Port: rpc.DiscoveryPortToRPC(port), MatchingBoards: boards, } if fqbnFilter == nil || hasMatchingBoard(b, fqbnFilter) { - retVal = append(retVal, b) + ports = append(ports, b) } } - return retVal, discoveryStartErrors, nil + return &rpc.BoardListResponse{ + Ports: ports, + Warnings: warnings, + }, nil } func hasMatchingBoard(b *rpc.DetectedPort, fqbnFilter *cores.FQBN) bool { - for _, detectedBoard := range b.MatchingBoards { - detectedFqbn, err := cores.ParseFQBN(detectedBoard.Fqbn) + for _, detectedBoard := range b.GetMatchingBoards() { + detectedFqbn, err := cores.ParseFQBN(detectedBoard.GetFqbn()) if err != nil { continue } @@ -256,49 +260,63 @@ func hasMatchingBoard(b *rpc.DetectedPort, fqbnFilter *cores.FQBN) bool { return false } -// Watch returns a channel that receives boards connection and disconnection events. -func Watch(ctx context.Context, req *rpc.BoardListWatchRequest) (<-chan *rpc.BoardListWatchResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +// BoardListWatchProxyToChan return a stream, to be used in BoardListWatch method, +// that proxies all the responses to a channel. +func BoardListWatchProxyToChan(ctx context.Context) (rpc.ArduinoCoreService_BoardListWatchServer, <-chan *rpc.BoardListWatchResponse) { + return streamResponseToChan[rpc.BoardListWatchResponse](ctx) +} + +// BoardListWatch FIXMEDOC +func (s *arduinoCoreServerImpl) BoardListWatch(req *rpc.BoardListWatchRequest, stream rpc.ArduinoCoreService_BoardListWatchServer) error { + syncSend := NewSynchronizedSend(stream.Send) + if req.GetInstance() == nil { + err := errors.New(i18n.Tr("no instance specified")) + syncSend.Send(&rpc.BoardListWatchResponse{ + EventType: "error", + Error: err.Error(), + }) + return err + } + + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err } defer release() dm := pme.DiscoveryManager() watcher, err := dm.Watch() if err != nil { - return nil, err + return err } go func() { - <-ctx.Done() + <-stream.Context().Done() logrus.Trace("closed watch") watcher.Close() }() - outChan := make(chan *rpc.BoardListWatchResponse) go func() { - defer close(outChan) for event := range watcher.Feed() { port := &rpc.DetectedPort{ - Port: event.Port.ToRPC(), + Port: rpc.DiscoveryPortToRPC(event.Port), } boardsError := "" if event.Type == "add" { - boards, err := identify(pme, event.Port) + boards, err := identify(pme, event.Port, s.settings) if err != nil { boardsError = err.Error() } port.MatchingBoards = boards } - outChan <- &rpc.BoardListWatchResponse{ + stream.Send(&rpc.BoardListWatchResponse{ EventType: event.Type, Port: port, Error: boardsError, - } + }) } }() - return outChan, nil + return nil } diff --git a/commands/board/list_test.go b/commands/service_board_list_test.go similarity index 75% rename from commands/board/list_test.go rename to commands/service_board_list_test.go index 0f92e4c3896..6fb1366d111 100644 --- a/commands/board/list_test.go +++ b/commands/service_board_list_test.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package board +package commands import ( "fmt" @@ -21,19 +21,16 @@ import ( "net/http/httptest" "testing" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/cli/configuration" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" + discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2" "github.com/stretchr/testify/require" + "go.bug.st/downloader/v2" semver "go.bug.st/relaxed-semver" ) -func init() { - configuration.Settings = configuration.Init("") -} - func TestGetByVidPid(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, ` @@ -51,30 +48,36 @@ func TestGetByVidPid(t *testing.T) { defer ts.Close() vidPidURL = ts.URL - res, err := apiByVidPid("0xf420", "0XF069") + settings := configuration.NewSettings() + res, err := apiByVidPid("0xf420", "0XF069", settings) require.Nil(t, err) require.Len(t, res, 1) - require.Equal(t, "Arduino/Genuino MKR1000", res[0].Name) - require.Equal(t, "arduino:samd:mkr1000", res[0].Fqbn) + require.Equal(t, "Arduino/Genuino MKR1000", res[0].GetName()) + require.Equal(t, "arduino:samd:mkr1000", res[0].GetFqbn()) // wrong vid (too long), wrong pid (not an hex value) - _, err = apiByVidPid("0xfffff", "0xDEFG") + + _, err = apiByVidPid("0xfffff", "0xDEFG", settings) require.NotNil(t, err) } func TestGetByVidPidNotFound(t *testing.T) { + settings := configuration.NewSettings() + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) })) defer ts.Close() vidPidURL = ts.URL - res, err := apiByVidPid("0x0420", "0x0069") + res, err := apiByVidPid("0x0420", "0x0069", settings) require.NoError(t, err) require.Empty(t, res) } func TestGetByVidPid5xx(t *testing.T) { + settings := configuration.NewSettings() + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("500 - Ooooops!")) @@ -82,27 +85,30 @@ func TestGetByVidPid5xx(t *testing.T) { defer ts.Close() vidPidURL = ts.URL - res, err := apiByVidPid("0x0420", "0x0069") + res, err := apiByVidPid("0x0420", "0x0069", settings) require.NotNil(t, err) require.Equal(t, "the server responded with status 500 Internal Server Error", err.Error()) require.Len(t, res, 0) } func TestGetByVidPidMalformedResponse(t *testing.T) { + settings := configuration.NewSettings() + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "{}") })) defer ts.Close() vidPidURL = ts.URL - res, err := apiByVidPid("0x0420", "0x0069") + res, err := apiByVidPid("0x0420", "0x0069", settings) require.NotNil(t, err) require.Equal(t, "wrong format in server response", err.Error()) require.Len(t, res, 0) } func TestBoardDetectionViaAPIWithNonUSBPort(t *testing.T) { - items, err := identifyViaCloudAPI(properties.NewMap()) + settings := configuration.NewSettings() + items, err := identifyViaCloudAPI(properties.NewMap(), settings) require.NoError(t, err) require.Empty(t, items) } @@ -114,7 +120,7 @@ func TestBoardIdentifySorting(t *testing.T) { defer paths.TempDir().Join("test").RemoveAll() // We don't really care about the paths in this case - pmb := packagemanager.NewBuilder(dataDir, dataDir, dataDir, dataDir, "test") + pmb := packagemanager.NewBuilder(dataDir, dataDir, nil, dataDir, dataDir, "test", downloader.GetDefaultConfig()) // Create some boards with identical VID:PID combination pack := pmb.GetOrCreatePackage("packager") @@ -150,14 +156,15 @@ func TestBoardIdentifySorting(t *testing.T) { pme, release := pm.NewExplorer() defer release() - res, err := identify(pme, &discovery.Port{Properties: idPrefs}) + settings := configuration.NewSettings() + res, err := identify(pme, &discovery.Port{Properties: idPrefs}, settings) require.NoError(t, err) require.NotNil(t, res) require.Len(t, res, 4) // Verify expected sorting - require.Equal(t, res[0].Fqbn, "arduino:avr:assurdo") - require.Equal(t, res[1].Fqbn, "arduino:avr:nessuno") - require.Equal(t, res[2].Fqbn, "packager:platform:boardA") - require.Equal(t, res[3].Fqbn, "packager:platform:boardB") + require.Equal(t, res[0].GetFqbn(), "arduino:avr:assurdo") + require.Equal(t, res[1].GetFqbn(), "arduino:avr:nessuno") + require.Equal(t, res[2].GetFqbn(), "packager:platform:boardA") + require.Equal(t, res[3].GetFqbn(), "packager:platform:boardB") } diff --git a/commands/board/listall.go b/commands/service_board_listall.go similarity index 72% rename from commands/board/listall.go rename to commands/service_board_listall.go index d4118aca4e7..93df1f4e338 100644 --- a/commands/board/listall.go +++ b/commands/service_board_listall.go @@ -13,25 +13,24 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package board +package commands import ( "context" "sort" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/utils" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/utils" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) -// ListAll FIXMEDOC -func ListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListAllResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +// BoardListAll list all the boards provided by installed platforms. +func (s *arduinoCoreServerImpl) BoardListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListAllResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() @@ -46,29 +45,14 @@ func ListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListA continue } - installedVersion := installedPlatformRelease.Version.String() - - latestVersion := "" - if latestPlatformRelease := platform.GetLatestRelease(); latestPlatformRelease != nil { - latestVersion = latestPlatformRelease.Version.String() - } - rpcPlatform := &rpc.Platform{ - Id: platform.String(), - Installed: installedVersion, - Latest: latestVersion, - Name: platform.Name, - Maintainer: platform.Package.Maintainer, - Website: platform.Package.WebsiteURL, - Email: platform.Package.Email, - ManuallyInstalled: platform.ManuallyInstalled, - Indexed: platform.Indexed, - MissingMetadata: !installedPlatformRelease.HasMetadata(), + Metadata: platformToRPCPlatformMetadata(platform), + Release: platformReleaseToRPC(installedPlatformRelease), } toTest := []string{ platform.String(), - platform.Name, + installedPlatformRelease.Name, platform.Architecture, targetPackage.Name, targetPackage.Maintainer, @@ -85,7 +69,7 @@ func ListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListA continue } - list.Boards = append(list.Boards, &rpc.BoardListItem{ + list.Boards = append(list.GetBoards(), &rpc.BoardListItem{ Name: board.Name(), Fqbn: board.FQBN(), IsHidden: board.IsHidden(), diff --git a/commands/board/search.go b/commands/service_board_search.go similarity index 60% rename from commands/board/search.go rename to commands/service_board_search.go index da0553463fa..bbe4ca22529 100644 --- a/commands/board/search.go +++ b/commands/service_board_search.go @@ -13,58 +13,39 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package board +package commands import ( "context" "sort" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/utils" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/utils" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) -// Search returns all boards that match the search arg. +// BoardSearch returns all boards that match the search arg. // Boards are searched in all platforms, including those in the index that are not yet // installed. Note that platforms that are not installed don't include boards' FQBNs. // If no search argument is used all boards are returned. -func Search(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) BoardSearch(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() - res := &rpc.BoardSearchResponse{Boards: []*rpc.BoardListItem{}} + foundBoards := []*rpc.BoardListItem{} for _, targetPackage := range pme.GetPackages() { for _, platform := range targetPackage.Platforms { - latestPlatformRelease := platform.GetLatestRelease() + latestPlatformRelease := platform.GetLatestCompatibleRelease() installedPlatformRelease := pme.GetInstalledPlatformRelease(platform) if latestPlatformRelease == nil && installedPlatformRelease == nil { continue } - rpcPlatform := &rpc.Platform{ - Id: platform.String(), - Name: platform.Name, - Maintainer: platform.Package.Maintainer, - Website: platform.Package.WebsiteURL, - Email: platform.Package.Email, - ManuallyInstalled: platform.ManuallyInstalled, - Indexed: platform.Indexed, - } - - if latestPlatformRelease != nil { - rpcPlatform.Latest = latestPlatformRelease.Version.String() - } - if installedPlatformRelease != nil { - rpcPlatform.Installed = installedPlatformRelease.Version.String() - rpcPlatform.MissingMetadata = !installedPlatformRelease.HasMetadata() - } - // Platforms that are not installed don't have a list of boards // generated from their boards.txt file so we need two different // ways of reading board data. @@ -81,11 +62,14 @@ func Search(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchR continue } - res.Boards = append(res.Boards, &rpc.BoardListItem{ + foundBoards = append(foundBoards, &rpc.BoardListItem{ Name: board.Name(), Fqbn: board.FQBN(), IsHidden: board.IsHidden(), - Platform: rpcPlatform, + Platform: &rpc.Platform{ + Metadata: platformToRPCPlatformMetadata(platform), + Release: platformReleaseToRPC(installedPlatformRelease), + }, }) } } else if latestPlatformRelease != nil { @@ -95,20 +79,24 @@ func Search(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchR continue } - res.Boards = append(res.Boards, &rpc.BoardListItem{ - Name: strings.Trim(board.Name, " \n"), - Platform: rpcPlatform, + foundBoards = append(foundBoards, &rpc.BoardListItem{ + Name: strings.Trim(board.Name, " \n"), + Platform: &rpc.Platform{ + Metadata: platformToRPCPlatformMetadata(platform), + Release: platformReleaseToRPC(latestPlatformRelease), + }, }) } } } } - sort.Slice(res.Boards, func(i, j int) bool { - if res.Boards[i].Name != res.Boards[j].Name { - return res.Boards[i].Name < res.Boards[j].Name + sort.Slice(foundBoards, func(i, j int) bool { + if foundBoards[i].GetName() != foundBoards[j].GetName() { + return foundBoards[i].GetName() < foundBoards[j].GetName() } - return res.Boards[i].Platform.Id < res.Boards[j].Platform.Id + return foundBoards[i].GetPlatform().GetMetadata().GetId() < foundBoards[j].GetPlatform().GetMetadata().GetId() }) - return res, nil + + return &rpc.BoardSearchResponse{Boards: foundBoards}, nil } diff --git a/arduino/libraries/librariesmanager/librariesmanager_test.go b/commands/service_cache_clean.go similarity index 57% rename from arduino/libraries/librariesmanager/librariesmanager_test.go rename to commands/service_cache_clean.go index a987462b6b2..5897ebd2e99 100644 --- a/arduino/libraries/librariesmanager/librariesmanager_test.go +++ b/commands/service_cache_clean.go @@ -12,21 +12,21 @@ // modify or otherwise use the software for commercial activities involving the // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package librariesmanager + +package commands import ( - "testing" + "context" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/go-paths-helper" - "github.com/stretchr/testify/require" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) -func Test_RescanLibrariesCallClear(t *testing.T) { - baseDir := paths.New(t.TempDir()) - lm := NewLibraryManager(baseDir.Join("index_dir"), baseDir.Join("downloads_dir")) - lm.Libraries["testLibA"] = libraries.List{} - lm.Libraries["testLibB"] = libraries.List{} - lm.RescanLibraries() - require.Len(t, lm.Libraries, 0) +// CleanDownloadCacheDirectory clean the download cache directory (where archives are downloaded). +func (s *arduinoCoreServerImpl) CleanDownloadCacheDirectory(ctx context.Context, req *rpc.CleanDownloadCacheDirectoryRequest) (*rpc.CleanDownloadCacheDirectoryResponse, error) { + cachePath := s.settings.DownloadsDir() + err := cachePath.RemoveAll() + if err != nil { + return nil, err + } + return &rpc.CleanDownloadCacheDirectoryResponse{}, nil } diff --git a/commands/service_check_for_updates.go b/commands/service_check_for_updates.go new file mode 100644 index 00000000000..15221905d56 --- /dev/null +++ b/commands/service_check_for_updates.go @@ -0,0 +1,112 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "strings" + "time" + + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/inventory" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/arduino-cli/version" + semver "go.bug.st/relaxed-semver" +) + +func (s *arduinoCoreServerImpl) CheckForArduinoCLIUpdates(ctx context.Context, req *rpc.CheckForArduinoCLIUpdatesRequest) (*rpc.CheckForArduinoCLIUpdatesResponse, error) { + currentVersion, err := semver.Parse(version.VersionInfo.VersionString) + if err != nil { + return nil, err + } + + if !s.shouldCheckForUpdate(currentVersion) && !req.GetForceCheck() { + return &rpc.CheckForArduinoCLIUpdatesResponse{}, nil + } + + defer func() { + // Always save the last time we checked for updates at the end + inventory.Store.Set("updater.last_check_time", time.Now()) + inventory.WriteStore() + }() + + latestVersion, err := semver.Parse(s.getLatestRelease()) + if err != nil { + return nil, err + } + + if currentVersion.GreaterThanOrEqual(latestVersion) { + // Current version is already good enough + return &rpc.CheckForArduinoCLIUpdatesResponse{}, nil + } + + return &rpc.CheckForArduinoCLIUpdatesResponse{ + NewestVersion: latestVersion.String(), + }, nil +} + +// shouldCheckForUpdate return true if it actually makes sense to check for new updates, +// false in all other cases. +func (s *arduinoCoreServerImpl) shouldCheckForUpdate(currentVersion *semver.Version) bool { + if strings.Contains(currentVersion.String(), "git-snapshot") || strings.Contains(currentVersion.String(), "nightly") { + // This is a dev build, no need to check for updates + return false + } + + if !s.settings.GetBool("updater.enable_notification") { + // Don't check if the user disabled the notification + return false + } + + if inventory.Store.IsSet("updater.last_check_time") && time.Since(inventory.Store.GetTime("updater.last_check_time")).Hours() < 24 { + // Checked less than 24 hours ago, let's wait + return false + } + + // Don't check when running on CI or on non interactive consoles + return !feedback.IsCI() && feedback.IsInteractive() && feedback.HasConsole() +} + +// getLatestRelease queries the official Arduino download server for the latest release, +// if there are no errors or issues a version string is returned, in all other case an empty string. +func (s *arduinoCoreServerImpl) getLatestRelease() string { + client, err := s.settings.NewHttpClient() + if err != nil { + return "" + } + + // We just use this URL to check if there's a new release available and + // never show it to the user, so it's fine to use the Linux one for all OSs. + URL := "https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_64bit.tar.gz" + res, err := client.Head(URL) + if err != nil { + // Yes, we ignore it + return "" + } + + // Get redirected URL + location := res.Request.URL.String() + + // The location header points to the latest release of the CLI, it's supposed to be formatted like this: + // https://downloads.arduino.cc/arduino-cli/arduino-cli_0.18.3_Linux_64bit.tar.gz + // so we split it to get the version, if there are not enough splits something must have gone wrong. + split := strings.Split(location, "_") + if len(split) < 2 { + return "" + } + + return split[1] +} diff --git a/commands/compile/compile.go b/commands/service_compile.go similarity index 58% rename from commands/compile/compile.go rename to commands/service_compile.go index 604a7acb215..69865f3522c 100644 --- a/commands/compile/compile.go +++ b/commands/service_compile.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package compile +package commands import ( "context" @@ -22,60 +22,84 @@ import ( "io" "sort" "strings" + "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/builder" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/arduino/utils" - "github.com/arduino/arduino-cli/buildcache" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/builder" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/arduino/utils" + "github.com/arduino/arduino-cli/internal/buildcache" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/arduino-cli/internal/inventory" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" ) -var tr = i18n.Tr +// CompilerServerToStreams creates a gRPC CompileServer that sends the responses to the provided streams. +// The returned callback function can be used to retrieve the builder result after the compilation is done. +func CompilerServerToStreams(ctx context.Context, stdOut, stderr io.Writer, progressCB rpc.TaskProgressCB) (server rpc.ArduinoCoreService_CompileServer, resultCB func() *rpc.BuilderResult) { + var builderResult *rpc.BuilderResult + stream := streamResponseToCallback(ctx, func(resp *rpc.CompileResponse) error { + if out := resp.GetOutStream(); len(out) > 0 { + if _, err := stdOut.Write(out); err != nil { + return err + } + } + if err := resp.GetErrStream(); len(err) > 0 { + if _, err := stderr.Write(err); err != nil { + return err + } + } + if result := resp.GetResult(); result != nil { + builderResult = result + } + if progress := resp.GetProgress(); progress != nil { + if progressCB != nil { + progressCB(progress) + } + } + return nil + }) + return stream, func() *rpc.BuilderResult { return builderResult } +} -// Compile FIXMEDOC -func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream io.Writer, progressCB rpc.TaskProgressCB) (r *rpc.CompileResponse, e error) { +// Compile performs a compilation of a sketch. +func (s *arduinoCoreServerImpl) Compile(req *rpc.CompileRequest, stream rpc.ArduinoCoreService_CompileServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) - // There is a binding between the export binaries setting and the CLI flag to explicitly set it, - // since we want this binding to work also for the gRPC interface we must read it here in this - // package instead of the cli/compile one, otherwise we'd lose the binding. - exportBinaries := configuration.Settings.GetBool("sketch.always_export_binaries") - // If we'd just read the binding in any case, even if the request sets the export binaries setting, - // the settings value would always overwrite the request one and it wouldn't have any effect - // setting it for individual requests. To solve this we use a wrapper.BoolValue to handle - // the optionality of this property, otherwise we would have no way of knowing if the property - // was set in the request or it's just the default boolean value. - if reqExportBinaries := req.GetExportBinaries(); reqExportBinaries != nil { - exportBinaries = reqExportBinaries.Value + exportBinaries := s.settings.SketchAlwaysExportBinaries() + if e := req.ExportBinaries; e != nil { + exportBinaries = *e } - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err } defer release() - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return nil, &arduino.InvalidInstanceError{} + if pme.Dirty() { + return &cmderrors.InstanceNeedsReinitialization{} + } + + lm, err := instances.GetLibraryManager(req.GetInstance()) + if err != nil { + return err } logrus.Tracef("Compile %s for %s started", req.GetSketchPath(), req.GetFqbn()) if req.GetSketchPath() == "" { - return nil, &arduino.MissingSketchPathError{} + return &cmderrors.MissingSketchPathError{} } sketchPath := paths.New(req.GetSketchPath()) sk, err := sketch.New(sketchPath) if err != nil { - return nil, &arduino.CantOpenSketchError{Cause: err} + return &cmderrors.CantOpenSketchError{Cause: err} } fqbnIn := req.GetFqbn() @@ -87,36 +111,41 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream } } if fqbnIn == "" { - return nil, &arduino.MissingFQBNError{} + return &cmderrors.MissingFQBNError{} } fqbn, err := cores.ParseFQBN(fqbnIn) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return &cmderrors.InvalidFQBNError{Cause: err} } _, targetPlatform, targetBoard, boardBuildProperties, buildPlatform, err := pme.ResolveFQBN(fqbn) if err != nil { if targetPlatform == nil { - return nil, &arduino.PlatformNotFoundError{ + return &cmderrors.PlatformNotFoundError{ Platform: fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch), - Cause: fmt.Errorf(tr("platform not installed")), + Cause: errors.New(i18n.Tr("platform not installed")), } } - return nil, &arduino.InvalidFQBNError{Cause: err} + return &cmderrors.InvalidFQBNError{Cause: err} } - r = &rpc.CompileResponse{} + r := &rpc.BuilderResult{} + defer func() { + syncSend.Send(&rpc.CompileResponse{ + Message: &rpc.CompileResponse_Result{Result: r}, + }) + }() r.BoardPlatform = targetPlatform.ToRPCPlatformReference() r.BuildPlatform = buildPlatform.ToRPCPlatformReference() // Setup sign keys if requested - if req.KeysKeychain != "" { + if req.GetKeysKeychain() != "" { boardBuildProperties.Set("build.keys.keychain", req.GetKeysKeychain()) } - if req.SignKey != "" { + if req.GetSignKey() != "" { boardBuildProperties.Set("build.keys.sign_key", req.GetSignKey()) } - if req.EncryptKey != "" { + if req.GetEncryptKey() != "" { boardBuildProperties.Set("build.keys.encrypt_key", req.GetEncryptKey()) } // At the current time we do not have a way of knowing if a board supports the secure boot or not, @@ -128,7 +157,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream encryptProp := boardBuildProperties.ContainsKey("build.keys.encrypt_key") // we verify that all the properties for the secure boot keys are defined or none of them is defined. if !(keychainProp == signProp && signProp == encryptProp) { - return nil, fmt.Errorf(tr("Firmware encryption/signing requires all the following properties to be defined: %s", "build.keys.keychain, build.keys.sign_key, build.keys.encrypt_key")) + return errors.New(i18n.Tr("Firmware encryption/signing requires all the following properties to be defined: %s", "build.keys.keychain, build.keys.sign_key, build.keys.encrypt_key")) } // Generate or retrieve build path @@ -137,7 +166,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream buildPath = paths.New(req.GetBuildPath()).Canonical() if in, _ := buildPath.IsInsideDir(sk.FullPath); in && buildPath.IsDir() { if sk.AdditionalFiles, err = removeBuildFromSketchFiles(sk.AdditionalFiles, buildPath); err != nil { - return nil, err + return err } } } @@ -145,50 +174,85 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream buildPath = sk.DefaultBuildPath() } if err = buildPath.MkdirAll(); err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Cannot create build directory"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Cannot create build directory"), Cause: err} } buildcache.New(buildPath.Parent()).GetOrCreate(buildPath.Base()) // cache is purged after compilation to not remove entries that might be required - defer maybePurgeBuildCache() - var coreBuildCachePath *paths.Path - if req.GetBuildCachePath() == "" { - coreBuildCachePath = paths.TempDir().Join("arduino", "cores") - } else { - buildCachePath, err := paths.New(req.GetBuildCachePath()).Abs() + defer maybePurgeBuildCache( + s.settings.GetCompilationsBeforeBuildCachePurge(), + s.settings.GetBuildCacheTTL().Abs()) + + var buildCachePath *paths.Path + if req.GetBuildCachePath() != "" { + p, err := paths.New(req.GetBuildCachePath()).Abs() if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Cannot create build cache directory"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Cannot create build cache directory"), Cause: err} } - if err := buildCachePath.MkdirAll(); err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Cannot create build cache directory"), Cause: err} - } - coreBuildCachePath = buildCachePath.Join("core") + buildCachePath = p + } else if p, ok := s.settings.GetBuildCachePath(); ok { + buildCachePath = p + } else { + buildCachePath = paths.TempDir().Join("arduino") + } + if err := buildCachePath.MkdirAll(); err != nil { + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Cannot create build cache directory"), Cause: err} + } + coreBuildCachePath := buildCachePath.Join("cores") + + var extraCoreBuildCachePaths paths.PathList + if len(req.GetBuildCacheExtraPaths()) == 0 { + extraCoreBuildCachePaths = s.settings.GetBuildCacheExtraPaths() + } else { + extraCoreBuildCachePaths = paths.NewPathList(req.GetBuildCacheExtraPaths()...) + } + for i, p := range extraCoreBuildCachePaths { + extraCoreBuildCachePaths[i] = p.Join("cores") } if _, err := pme.FindToolsRequiredForBuild(targetPlatform, buildPlatform); err != nil { - return nil, err + return err } actualPlatform := buildPlatform otherLibrariesDirs := paths.NewPathList(req.GetLibraries()...) - otherLibrariesDirs.Add(configuration.LibrariesDir(configuration.Settings)) + otherLibrariesDirs.Add(s.settings.LibrariesDir()) var libsManager *librariesmanager.LibrariesManager if pme.GetProfile() != nil { libsManager = lm } + + outStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.CompileResponse{ + Message: &rpc.CompileResponse_OutStream{OutStream: data}, + }) + }) + defer outStream.Close() + errStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.CompileResponse{ + Message: &rpc.CompileResponse_ErrStream{ErrStream: data}, + }) + }) + defer errStream.Close() + progressCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.CompileResponse{ + Message: &rpc.CompileResponse_Progress{Progress: p}, + }) + } sketchBuilder, err := builder.NewBuilder( + ctx, sk, boardBuildProperties, buildPath, req.GetOptimizeForDebug(), coreBuildCachePath, + extraCoreBuildCachePaths, int(req.GetJobs()), req.GetBuildProperties(), - configuration.HardwareDirectories(configuration.Settings), - configuration.BuiltinToolsDirectories(configuration.Settings), + s.settings.HardwareDirectories(), otherLibrariesDirs, - configuration.IDEBuiltinLibrariesDir(configuration.Settings), + s.settings.IDEBuiltinLibrariesDir(), fqbn, req.GetClean(), req.GetSourceOverride(), @@ -196,20 +260,21 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream targetPlatform, actualPlatform, req.GetSkipLibrariesDiscovery(), libsManager, - paths.NewPathList(req.Library...), + paths.NewPathList(req.GetLibrary()...), outStream, errStream, req.GetVerbose(), req.GetWarnings(), progressCB, + pme.GetEnvVarsForSpawnedProcess(), ) if err != nil { if strings.Contains(err.Error(), "invalid build properties") { - return nil, &arduino.InvalidArgumentError{Message: tr("Invalid build properties"), Cause: err} + return &cmderrors.InvalidArgumentError{Message: i18n.Tr("Invalid build properties"), Cause: err} } if errors.Is(err, builder.ErrSketchCannotBeLocatedInBuildPath) { - return r, &arduino.CompileFailedError{ - Message: tr("Sketch cannot be located in build path. Please specify a different build path"), + return &cmderrors.CompileFailedError{ + Message: i18n.Tr("Sketch cannot be located in build path. Please specify a different build path"), } } - return r, &arduino.CompileFailedError{Message: err.Error()} + return &cmderrors.CompileFailedError{Message: err.Error()} } defer func() { @@ -218,6 +283,10 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream } }() + defer func() { + r.Diagnostics = sketchBuilder.CompilerDiagnostics().ToRPC() + }() + defer func() { buildProperties := sketchBuilder.GetBuildProperties() if buildProperties == nil { @@ -226,27 +295,27 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream keys := buildProperties.Keys() sort.Strings(keys) for _, key := range keys { - r.BuildProperties = append(r.BuildProperties, key+"="+buildProperties.Get(key)) + r.BuildProperties = append(r.GetBuildProperties(), key+"="+buildProperties.Get(key)) } if !req.GetDoNotExpandBuildProperties() { - r.BuildProperties, _ = utils.ExpandBuildProperties(r.BuildProperties) + r.BuildProperties, _ = utils.ExpandBuildProperties(r.GetBuildProperties()) } }() // Just get build properties and exit if req.GetShowProperties() { - return r, nil + return nil } if req.GetPreprocess() { // Just output preprocessed source code and exit preprocessedSketch, err := sketchBuilder.Preprocess() if err != nil { - err = &arduino.CompileFailedError{Message: err.Error()} - return r, err + err = &cmderrors.CompileFailedError{Message: err.Error()} + return err } _, err = outStream.Write(preprocessedSketch) - return r, err + return err } defer func() { @@ -254,7 +323,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream for _, lib := range sketchBuilder.ImportedLibraries() { rpcLib, err := lib.ToRPCLibrary() if err != nil { - msg := tr("Error getting information for library %s", lib.Name) + ": " + err.Error() + "\n" + msg := i18n.Tr("Error getting information for library %s", lib.Name) + ": " + err.Error() + "\n" errStream.Write([]byte(msg)) } importedLibs = append(importedLibs, rpcLib) @@ -277,18 +346,18 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream } outStream.Write([]byte(fmt.Sprintf("FQBN: %s\n", normalizedFQBN))) core = core[strings.Index(core, ":")+1:] - outStream.Write([]byte(tr("Using board '%[1]s' from platform in folder: %[2]s", targetBoard.BoardID, targetPlatform.InstallDir) + "\n")) - outStream.Write([]byte(tr("Using core '%[1]s' from platform in folder: %[2]s", core, buildPlatform.InstallDir) + "\n")) + outStream.Write([]byte(i18n.Tr("Using board '%[1]s' from platform in folder: %[2]s", targetBoard.BoardID, targetPlatform.InstallDir) + "\n")) + outStream.Write([]byte(i18n.Tr("Using core '%[1]s' from platform in folder: %[2]s", core, buildPlatform.InstallDir) + "\n")) outStream.Write([]byte("\n")) } if !targetBoard.Properties.ContainsKey("build.board") { outStream.Write([]byte( - tr("Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s", + i18n.Tr("Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s", targetBoard.String(), "'build.board'", sketchBuilder.GetBuildProperties().Get("build.board")) + "\n")) } if err := sketchBuilder.Build(); err != nil { - return r, &arduino.CompileFailedError{Message: err.Error()} + return &cmderrors.CompileFailedError{Message: err.Error()} } // If the export directory is set we assume you want to export the binaries @@ -300,9 +369,8 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream exportBinaries = false } if exportBinaries { - err := sketchBuilder.RunRecipe("recipe.hooks.savehex.presavehex", ".pattern", false) - if err != nil { - return r, err + if err := sketchBuilder.RunRecipe("recipe.hooks.savehex.presavehex", ".pattern", false); err != nil { + return err } exportPath := paths.New(req.GetExportDir()) @@ -316,44 +384,40 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream if !buildPath.EqualsTo(exportPath) { logrus.WithField("path", exportPath).Trace("Saving sketch to export path.") if err := exportPath.MkdirAll(); err != nil { - return r, &arduino.PermissionDeniedError{Message: tr("Error creating output dir"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error creating output dir"), Cause: err} } baseName, ok := sketchBuilder.GetBuildProperties().GetOk("build.project_name") // == "sketch.ino" if !ok { - return r, &arduino.MissingPlatformPropertyError{Property: "build.project_name"} + return &cmderrors.MissingPlatformPropertyError{Property: "build.project_name"} } buildFiles, err := sketchBuilder.GetBuildPath().ReadDir() if err != nil { - return r, &arduino.PermissionDeniedError{Message: tr("Error reading build directory"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error reading build directory"), Cause: err} } buildFiles.FilterPrefix(baseName) for _, buildFile := range buildFiles { exportedFile := exportPath.Join(buildFile.Base()) logrus.WithField("src", buildFile).WithField("dest", exportedFile).Trace("Copying artifact.") if err = buildFile.CopyTo(exportedFile); err != nil { - return r, &arduino.PermissionDeniedError{Message: tr("Error copying output file %s", buildFile), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error copying output file %s", buildFile), Cause: err} } } } - err = sketchBuilder.RunRecipe("recipe.hooks.savehex.postsavehex", ".pattern", false) - if err != nil { - return r, err + if err = sketchBuilder.RunRecipe("recipe.hooks.savehex.postsavehex", ".pattern", false); err != nil { + return err } } r.ExecutableSectionsSize = sketchBuilder.ExecutableSectionsSize().ToRPCExecutableSectionSizeArray() logrus.Tracef("Compile %s for %s successful", sk.Name, fqbnIn) - - return r, nil + return nil } // maybePurgeBuildCache runs the build files cache purge if the policy conditions are met. -func maybePurgeBuildCache() { - - compilationsBeforePurge := configuration.Settings.GetUint("build_cache.compilations_before_purge") +func maybePurgeBuildCache(compilationsBeforePurge uint, cacheTTL time.Duration) { // 0 means never purge if compilationsBeforePurge == 0 { return @@ -366,7 +430,6 @@ func maybePurgeBuildCache() { return } inventory.Store.Set("build_cache.compilation_count_since_last_purge", 0) - cacheTTL := configuration.Settings.GetDuration("build_cache.ttl").Abs() buildcache.New(paths.TempDir().Join("arduino", "cores")).Purge(cacheTTL) buildcache.New(paths.TempDir().Join("arduino", "sketches")).Purge(cacheTTL) } diff --git a/commands/daemon/debug.go b/commands/service_debug.go similarity index 69% rename from commands/daemon/debug.go rename to commands/service_debug.go index 0e024881788..d17c99622a6 100644 --- a/commands/daemon/debug.go +++ b/commands/service_debug.go @@ -13,21 +13,21 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package daemon +package commands import ( "context" + "errors" "os" - cmd "github.com/arduino/arduino-cli/commands/debug" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/pkg/errors" ) // Debug returns a stream response that can be used to fetch data from the // target. The first message passed through the `Debug` request must // contain DebugRequest configuration params, not data. -func (s *ArduinoCoreServerImpl) Debug(stream rpc.ArduinoCoreService_DebugServer) error { +func (s *arduinoCoreServerImpl) Debug(stream rpc.ArduinoCoreService_DebugServer) error { // Grab the first message msg, err := stream.Recv() if err != nil { @@ -37,14 +37,18 @@ func (s *ArduinoCoreServerImpl) Debug(stream rpc.ArduinoCoreService_DebugServer) // Ensure it's a config message and not data req := msg.GetDebugRequest() if req == nil { - return errors.Errorf(tr("First message must contain debug request, not data")) + return errors.New(i18n.Tr("First message must contain debug request, not data")) } // Launch debug recipe attaching stdin and out to grpc streaming signalChan := make(chan os.Signal) defer close(signalChan) - outStream := feedStreamTo(func(data []byte) { stream.Send(&rpc.DebugResponse{Data: data}) }) - resp, debugErr := cmd.Debug(stream.Context(), req, + outStream := feedStreamTo(func(data []byte) { + stream.Send(&rpc.DebugResponse{Message: &rpc.DebugResponse_Data{ + Data: data, + }}) + }) + resp, debugErr := Debug(stream.Context(), req, consumeStreamFrom(func() ([]byte, error) { command, err := stream.Recv() if command.GetSendInterrupt() { @@ -62,6 +66,11 @@ func (s *ArduinoCoreServerImpl) Debug(stream rpc.ArduinoCoreService_DebugServer) } // GetDebugConfig return metadata about a debug session -func (s *ArduinoCoreServerImpl) GetDebugConfig(ctx context.Context, req *rpc.GetDebugConfigRequest) (*rpc.GetDebugConfigResponse, error) { - return cmd.GetDebugConfig(ctx, req) +func (s *arduinoCoreServerImpl) GetDebugConfig(ctx context.Context, req *rpc.GetDebugConfigRequest) (*rpc.GetDebugConfigResponse, error) { + return GetDebugConfig(ctx, req) +} + +// IsDebugSupported checks if debugging is supported for a given configuration +func (s *arduinoCoreServerImpl) IsDebugSupported(ctx context.Context, req *rpc.IsDebugSupportedRequest) (*rpc.IsDebugSupportedResponse, error) { + return IsDebugSupported(ctx, req) } diff --git a/commands/service_debug_config.go b/commands/service_debug_config.go new file mode 100644 index 00000000000..393a81811e6 --- /dev/null +++ b/commands/service_debug_config.go @@ -0,0 +1,357 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "encoding/json" + "errors" + "reflect" + "slices" + "strconv" + "strings" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/arduino/go-properties-orderedmap" + "github.com/sirupsen/logrus" + "google.golang.org/protobuf/types/known/anypb" +) + +// GetDebugConfig returns metadata to start debugging with the specified board +func GetDebugConfig(ctx context.Context, req *rpc.GetDebugConfigRequest) (*rpc.GetDebugConfigResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + defer release() + return getDebugProperties(req, pme, false) +} + +// IsDebugSupported checks if the given board/programmer configuration supports debugging. +func IsDebugSupported(ctx context.Context, req *rpc.IsDebugSupportedRequest) (*rpc.IsDebugSupportedResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + defer release() + configRequest := &rpc.GetDebugConfigRequest{ + Instance: req.GetInstance(), + Fqbn: req.GetFqbn(), + SketchPath: "", + Port: req.GetPort(), + Interpreter: req.GetInterpreter(), + ImportDir: "", + Programmer: req.GetProgrammer(), + } + expectedOutput, err := getDebugProperties(configRequest, pme, true) + var x *cmderrors.FailedDebugError + if errors.As(err, &x) { + return &rpc.IsDebugSupportedResponse{DebuggingSupported: false}, nil + } + if err != nil { + return nil, err + } + + // Compute the minimum FQBN required to get the same debug configuration. + // (i.e. the FQBN cleaned up of the options that do not affect the debugger configuration) + minimumFQBN := cores.MustParseFQBN(req.GetFqbn()) + for _, config := range minimumFQBN.Configs.Keys() { + checkFQBN := minimumFQBN.Clone() + checkFQBN.Configs.Remove(config) + configRequest.Fqbn = checkFQBN.String() + checkOutput, err := getDebugProperties(configRequest, pme, true) + if err == nil && reflect.DeepEqual(expectedOutput, checkOutput) { + minimumFQBN.Configs.Remove(config) + } + } + return &rpc.IsDebugSupportedResponse{ + DebuggingSupported: true, + DebugFqbn: minimumFQBN.String(), + }, nil +} + +func getDebugProperties(req *rpc.GetDebugConfigRequest, pme *packagemanager.Explorer, skipSketchChecks bool) (*rpc.GetDebugConfigResponse, error) { + var ( + sketchName string + sketchDefaultFQBN string + sketchDefaultBuildPath *paths.Path + ) + if !skipSketchChecks { + // TODO: make a generic function to extract sketch from request + // and remove duplication in commands/compile.go + if req.GetSketchPath() == "" { + return nil, &cmderrors.MissingSketchPathError{} + } + sketchPath := paths.New(req.GetSketchPath()) + sk, err := sketch.New(sketchPath) + if err != nil { + return nil, &cmderrors.CantOpenSketchError{Cause: err} + } + sketchName = sk.Name + sketchDefaultFQBN = sk.GetDefaultFQBN() + sketchDefaultBuildPath = sk.DefaultBuildPath() + } else { + // Use placeholder sketch data + sketchName = "Sketch" + sketchDefaultFQBN = "" + sketchDefaultBuildPath = paths.New("SketchBuildPath") + } + + // XXX Remove this code duplication!! + fqbnIn := req.GetFqbn() + if fqbnIn == "" { + fqbnIn = sketchDefaultFQBN + } + if fqbnIn == "" { + return nil, &cmderrors.MissingFQBNError{} + } + fqbn, err := cores.ParseFQBN(fqbnIn) + if err != nil { + return nil, &cmderrors.InvalidFQBNError{Cause: err} + } + + // Find target board and board properties + _, platformRelease, _, boardProperties, referencedPlatformRelease, err := pme.ResolveFQBN(fqbn) + if err != nil { + return nil, &cmderrors.UnknownFQBNError{Cause: err} + } + + // Build configuration for debug + toolProperties := properties.NewMap() + if referencedPlatformRelease != nil { + toolProperties.Merge(referencedPlatformRelease.Properties) + } + toolProperties.Merge(platformRelease.Properties) + toolProperties.Merge(platformRelease.RuntimeProperties()) + toolProperties.Merge(boardProperties) + + for _, tool := range pme.GetAllInstalledToolsReleases() { + toolProperties.Merge(tool.RuntimeProperties()) + } + if requiredTools, err := pme.FindToolsRequiredForBuild(platformRelease, referencedPlatformRelease); err == nil { + for _, requiredTool := range requiredTools { + logrus.WithField("tool", requiredTool).Info("Tool required for debug") + toolProperties.Merge(requiredTool.RuntimeProperties()) + } + } + + if req.GetProgrammer() != "" { + if p, ok := platformRelease.Programmers[req.GetProgrammer()]; ok { + toolProperties.Merge(p.Properties) + } else if refP, ok := referencedPlatformRelease.Programmers[req.GetProgrammer()]; ok { + toolProperties.Merge(refP.Properties) + } else { + return nil, &cmderrors.ProgrammerNotFoundError{Programmer: req.GetProgrammer()} + } + } + + var importPath *paths.Path + if importDir := req.GetImportDir(); importDir != "" { + importPath = paths.New(importDir) + } else { + importPath = sketchDefaultBuildPath + } + if !skipSketchChecks { + if !importPath.Exist() { + return nil, &cmderrors.NotFoundError{Message: i18n.Tr("Compiled sketch not found in %s", importPath)} + } + if !importPath.IsDir() { + return nil, &cmderrors.NotFoundError{Message: i18n.Tr("Expected compiled sketch in directory %s, but is a file instead", importPath)} + } + } + toolProperties.SetPath("build.path", importPath) + toolProperties.Set("build.project_name", sketchName+".ino") + + // Set debug port property + port := req.GetPort() + if port.GetAddress() != "" { + toolProperties.Set("debug.port", port.GetAddress()) + portFile := strings.TrimPrefix(port.GetAddress(), "/dev/") + toolProperties.Set("debug.port.file", portFile) + } + + // Extract and expand all debugging properties + debugProperties := properties.NewMap() + for k, v := range toolProperties.SubTree("debug").AsMap() { + debugProperties.Set(k, toolProperties.ExpandPropsInString(v)) + } + if debugAdditionalConfig, ok := toolProperties.GetOk("debug.additional_config"); ok { + debugAdditionalConfig = toolProperties.ExpandPropsInString(debugAdditionalConfig) + for k, v := range toolProperties.SubTree(debugAdditionalConfig).AsMap() { + debugProperties.Set(k, toolProperties.ExpandPropsInString(v)) + } + } + + if !debugProperties.ContainsKey("executable") || debugProperties.Get("executable") == "" { + return nil, &cmderrors.FailedDebugError{Message: i18n.Tr("Debugging not supported for board %s", req.GetFqbn())} + } + + server := debugProperties.Get("server") + toolchain := debugProperties.Get("toolchain") + + var serverConfiguration anypb.Any + switch server { + case "openocd": + openocdProperties := debugProperties.SubTree("server." + server) + scripts := openocdProperties.ExtractSubIndexLists("scripts") + if s := openocdProperties.Get("script"); s != "" && len(scripts) == 0 { + // backward compatibility: use "script" property if there are no "scipts.N" + scripts = append(scripts, s) + } + openocdConf := &rpc.DebugOpenOCDServerConfiguration{ + Path: openocdProperties.Get("path"), + ScriptsDir: openocdProperties.Get("scripts_dir"), + Scripts: scripts, + } + if err := serverConfiguration.MarshalFrom(openocdConf); err != nil { + return nil, err + } + } + + var toolchainConfiguration anypb.Any + switch toolchain { + case "gcc": + gccConf := &rpc.DebugGCCToolchainConfiguration{} + if err := toolchainConfiguration.MarshalFrom(gccConf); err != nil { + return nil, err + } + } + + toolchainPrefix := debugProperties.Get("toolchain.prefix") + // HOTFIX: for samd (and maybe some other platforms). We should keep this for a reasonable + // amount of time to allow seamless platforms update. + toolchainPrefix = strings.TrimSuffix(toolchainPrefix, "-") + + customConfigs := map[string]string{} + if cortexDebugProps := debugProperties.SubTree("cortex-debug.custom"); cortexDebugProps.Size() > 0 { + customConfigs["cortex-debug"] = convertToJsonMap(cortexDebugProps) + } + return &rpc.GetDebugConfigResponse{ + Executable: debugProperties.Get("executable"), + Server: server, + ServerPath: debugProperties.Get("server." + server + ".path"), + ServerConfiguration: &serverConfiguration, + SvdFile: debugProperties.Get("svd_file"), + Toolchain: toolchain, + ToolchainPath: debugProperties.Get("toolchain.path"), + ToolchainPrefix: toolchainPrefix, + ToolchainConfiguration: &toolchainConfiguration, + CustomConfigs: customConfigs, + Programmer: req.GetProgrammer(), + }, nil +} + +// Extract a JSON from a given properies.Map and converts key-indexed arrays +// like: +// +// my.indexed.array.0=first +// my.indexed.array.1=second +// my.indexed.array.2=third +// +// into the corresponding JSON arrays. +// If a value should be converted into a JSON type different from string, the value +// may be prefiex with "[boolean]", "[number]", or "[object]": +// +// my.stringValue=a string +// my.booleanValue=[boolean]true +// my.numericValue=[number]20 +func convertToJsonMap(in *properties.Map) string { + data, _ := json.MarshalIndent(convertToRawInterface(in), "", " ") + return string(data) +} + +func allNumerics(in []string) bool { + for _, i := range in { + for _, c := range i { + if c < '0' || c > '9' { + return false + } + } + } + return true +} + +func convertToRawInterface(in *properties.Map) any { + subtrees := in.FirstLevelOf() + keys := in.FirstLevelKeys() + + if allNumerics(keys) { + // Compose an array + res := []any{} + slices.SortFunc(keys, func(x, y string) int { + nx, _ := strconv.Atoi(x) + ny, _ := strconv.Atoi(y) + return nx - ny + }) + for _, k := range keys { + switch { + case subtrees[k] != nil: + res = append(res, convertToRawInterface(subtrees[k])) + default: + res = append(res, convertToRawValue(in.Get(k))) + } + } + return res + } + + // Compose an object + res := map[string]any{} + for _, k := range keys { + switch { + case subtrees[k] != nil: + res[k] = convertToRawInterface(subtrees[k]) + default: + res[k] = convertToRawValue(in.Get(k)) + } + } + return res +} + +func convertToRawValue(v string) any { + switch { + case strings.HasPrefix(v, "[boolean]"): + v = strings.TrimSpace(strings.TrimPrefix(v, "[boolean]")) + if strings.EqualFold(v, "true") { + return true + } else if strings.EqualFold(v, "false") { + return false + } + case strings.HasPrefix(v, "[number]"): + v = strings.TrimPrefix(v, "[number]") + if i, err := strconv.Atoi(v); err == nil { + return i + } else if f, err := strconv.ParseFloat(v, 64); err == nil { + return f + } + case strings.HasPrefix(v, "[object]"): + v = strings.TrimPrefix(v, "[object]") + var o interface{} + if err := json.Unmarshal([]byte(v), &o); err == nil { + return o + } + case strings.HasPrefix(v, "[string]"): + v = strings.TrimPrefix(v, "[string]") + } + // default or conversion error, return string as is + return v +} diff --git a/commands/debug/debug.go b/commands/service_debug_run.go similarity index 73% rename from commands/debug/debug.go rename to commands/service_debug_run.go index ab55e317508..94cdc43efa8 100644 --- a/commands/debug/debug.go +++ b/commands/service_debug_run.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package debug +package commands import ( "context" @@ -24,18 +24,15 @@ import ( "runtime" "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" ) -var tr = i18n.Tr - // Debug command launches a debug tool for a sketch. // It also implements streams routing: // gRPC In -> tool stdIn @@ -45,9 +42,9 @@ var tr = i18n.Tr func Debug(ctx context.Context, req *rpc.GetDebugConfigRequest, inStream io.Reader, out io.Writer, interrupt <-chan os.Signal) (*rpc.DebugResponse, error) { // Get debugging command line to run debugger - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() @@ -67,15 +64,17 @@ func Debug(ctx context.Context, req *rpc.GetDebugConfigRequest, inStream io.Read } entry.Debug("Executing debugger") - cmd, err := executils.NewProcess(pme.GetEnvVarsForSpawnedProcess(), commandLine...) + cmd, err := paths.NewProcess(pme.GetEnvVarsForSpawnedProcess(), commandLine...) if err != nil { - return nil, &arduino.FailedDebugError{Message: tr("Cannot execute debug tool"), Cause: err} + return nil, &cmderrors.FailedDebugError{Message: i18n.Tr("Cannot execute debug tool"), Cause: err} } // Get stdIn pipe from tool in, err := cmd.StdinPipe() if err != nil { - return &rpc.DebugResponse{Error: err.Error()}, nil + return &rpc.DebugResponse{Message: &rpc.DebugResponse_Result_{ + Result: &rpc.DebugResponse_Result{Error: err.Error()}, + }}, nil } defer in.Close() @@ -85,7 +84,9 @@ func Debug(ctx context.Context, req *rpc.GetDebugConfigRequest, inStream io.Read // Start the debug command if err := cmd.Start(); err != nil { - return &rpc.DebugResponse{Error: err.Error()}, nil + return &rpc.DebugResponse{Message: &rpc.DebugResponse_Result_{ + Result: &rpc.DebugResponse_Result{Error: err.Error()}, + }}, nil } if interrupt != nil { @@ -111,14 +112,18 @@ func Debug(ctx context.Context, req *rpc.GetDebugConfigRequest, inStream io.Read // Wait for process to finish if err := cmd.Wait(); err != nil { - return &rpc.DebugResponse{Error: err.Error()}, nil + return &rpc.DebugResponse{Message: &rpc.DebugResponse_Result_{ + Result: &rpc.DebugResponse_Result{Error: err.Error()}, + }}, nil } - return &rpc.DebugResponse{}, nil + return &rpc.DebugResponse{Message: &rpc.DebugResponse_Result_{ + Result: &rpc.DebugResponse_Result{}, + }}, nil } // getCommandLine compose a debug command represented by a core recipe func getCommandLine(req *rpc.GetDebugConfigRequest, pme *packagemanager.Explorer) ([]string, error) { - debugInfo, err := getDebugProperties(req, pme) + debugInfo, err := getDebugProperties(req, pme, false) if err != nil { return nil, err } @@ -130,13 +135,13 @@ func getCommandLine(req *rpc.GetDebugConfigRequest, pme *packagemanager.Explorer var gdbPath *paths.Path switch debugInfo.GetToolchain() { case "gcc": - gdbexecutable := debugInfo.ToolchainPrefix + "gdb" + gdbexecutable := debugInfo.GetToolchainPrefix() + "-gdb" if runtime.GOOS == "windows" { gdbexecutable += ".exe" } - gdbPath = paths.New(debugInfo.ToolchainPath).Join(gdbexecutable) + gdbPath = paths.New(debugInfo.GetToolchainPath()).Join(gdbexecutable) default: - return nil, &arduino.FailedDebugError{Message: tr("Toolchain '%s' is not supported", debugInfo.GetToolchain())} + return nil, &cmderrors.FailedDebugError{Message: i18n.Tr("Toolchain '%s' is not supported", debugInfo.GetToolchain())} } add(gdbPath.String()) @@ -159,11 +164,11 @@ func getCommandLine(req *rpc.GetDebugConfigRequest, pme *packagemanager.Explorer switch debugInfo.GetServer() { case "openocd": var openocdConf rpc.DebugOpenOCDServerConfiguration - if err := debugInfo.ServerConfiguration.UnmarshalTo(&openocdConf); err != nil { + if err := debugInfo.GetServerConfiguration().UnmarshalTo(&openocdConf); err != nil { return nil, err } - serverCmd := fmt.Sprintf(`target extended-remote | "%s"`, debugInfo.ServerPath) + serverCmd := fmt.Sprintf(`target extended-remote | "%s"`, debugInfo.GetServerPath()) if cfg := openocdConf.GetScriptsDir(); cfg != "" { serverCmd += fmt.Sprintf(` -s "%s"`, cfg) @@ -180,11 +185,11 @@ func getCommandLine(req *rpc.GetDebugConfigRequest, pme *packagemanager.Explorer add(serverCmd) default: - return nil, &arduino.FailedDebugError{Message: tr("GDB server '%s' is not supported", debugInfo.GetServer())} + return nil, &cmderrors.FailedDebugError{Message: i18n.Tr("GDB server '%s' is not supported", debugInfo.GetServer())} } // Add executable - add(debugInfo.Executable) + add(debugInfo.GetExecutable()) // Transform every path to forward slashes (on Windows some tools further // escapes the command line so the backslash "\" gets in the way). diff --git a/commands/debug/debug_test.go b/commands/service_debug_test.go similarity index 54% rename from commands/debug/debug_test.go rename to commands/service_debug_test.go index 0b99a105c64..1aa4feb9796 100644 --- a/commands/debug/debug_test.go +++ b/commands/service_debug_test.go @@ -12,7 +12,7 @@ // modify or otherwise use the software for commercial activities involving the // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package debug +package commands import ( "fmt" @@ -21,21 +21,23 @@ import ( "strings" "testing" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" + "github.com/arduino/go-properties-orderedmap" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.bug.st/downloader/v2" ) func TestGetCommandLine(t *testing.T) { - customHardware := paths.New("testdata", "custom_hardware") - dataDir := paths.New("testdata", "data_dir", "packages") + customHardware := paths.New("testdata", "debug", "custom_hardware") + dataDir := paths.New("testdata", "debug", "data_dir", "packages") sketch := "hello" - sketchPath := paths.New("testdata", sketch) + sketchPath := paths.New("testdata", "debug", sketch) require.NoError(t, sketchPath.ToAbs()) - pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "test") + pmb := packagemanager.NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) pmb.LoadHardwareFromDirectory(customHardware) pmb.LoadHardwareFromDirectory(dataDir) @@ -63,6 +65,15 @@ func TestGetCommandLine(t *testing.T) { pm := pmb.Build() pme, release := pm.NewExplorer() defer release() + + { + // Check programmer not found + req.Programmer = "not-existent" + _, err := getCommandLine(req, pme) + require.Error(t, err) + } + + req.Programmer = "edbg" command, err := getCommandLine(req, pme) require.Nil(t, err) commandToTest := strings.Join(command, " ") @@ -76,6 +87,7 @@ func TestGetCommandLine(t *testing.T) { SketchPath: sketchPath.String(), Interpreter: "mi1", ImportDir: sketchPath.Join("build", "arduino-test.samd.mkr1000").String(), + Programmer: "edbg", } goldCommand2 := fmt.Sprintf("%s/arduino-test/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-gdb%s", dataDir, toolExtension) + @@ -90,3 +102,99 @@ func TestGetCommandLine(t *testing.T) { commandToTest2 := strings.Join(command2, " ") assert.Equal(t, filepath.FromSlash(goldCommand2), filepath.FromSlash(commandToTest2)) } + +func TestConvertToJSONMap(t *testing.T) { + testIn := properties.NewFromHashmap(map[string]string{ + "k": "v", + "string": "[string]aaa", + "bool": "[boolean]true", + "number": "[number]10", + "number2": "[number]10.2", + "object": `[object]{ "key":"value", "bool":true }`, + "array.0": "first", + "array.1": "second", + "array.2": "[boolean]true", + "array.3": "[number]10", + "array.4": `[object]{ "key":"value", "bool":true }`, + "array.5.k": "v", + "array.5.bool": "[boolean]true", + "array.5.number": "[number]10", + "array.5.number2": "[number]10.2", + "array.5.object": `[object]{ "key":"value", "bool":true }`, + "array.6.sub.k": "v", + "array.6.sub.bool": "[boolean]true", + "array.6.sub.number": "[number]10", + "array.6.sub.number2": "[number]10.2", + "array.6.sub.object": `[object]{ "key":"value", "bool":true }`, + "array.7.0": "v", + "array.7.1": "[boolean]true", + "array.7.2": "[number]10", + "array.7.3": "[number]10.2", + "array.7.4": `[object]{ "key":"value", "bool":true }`, + "array.8.array.0": "v", + "array.8.array.1": "[boolean]true", + "array.8.array.2": "[number]10", + "array.8.array.3": "[number]10.2", + "array.8.array.4": `[object]{ "key":"value", "bool":true }`, + "sub.k": "v", + "sub.bool": "[boolean]true", + "sub.number": "[number]10", + "sub.number2": "[number]10.2", + "sub.object": `[object]{ "key":"value", "bool":true }`, + }) + jsonString := convertToJsonMap(testIn) + require.JSONEq(t, `{ + "k": "v", + "string": "aaa", + "bool": true, + "number": 10, + "number2": 10.2, + "object": { "key":"value", "bool":true }, + "array": [ + "first", + "second", + true, + 10, + { "key":"value", "bool":true }, + { + "k": "v", + "bool": true, + "number": 10, + "number2": 10.2, + "object": { "key":"value", "bool":true } + }, + { + "sub": { + "k": "v", + "bool": true, + "number": 10, + "number2": 10.2, + "object": { "key":"value", "bool":true } + } + }, + [ + "v", + true, + 10, + 10.2, + { "key":"value", "bool":true } + ], + { + "array": [ + "v", + true, + 10, + 10.2, + { "key":"value", "bool":true } + ] + } + ], + "sub": { + "k": "v", + "bool": true, + "number": 10, + "number2": 10.2, + "object": { "key":"value", "bool":true } + } + }`, jsonString) +} diff --git a/commands/service_library_download.go b/commands/service_library_download.go new file mode 100644 index 00000000000..2384d59396f --- /dev/null +++ b/commands/service_library_download.go @@ -0,0 +1,99 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/cli/configuration" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" +) + +// LibraryDownloadStreamResponseToCallbackFunction returns a gRPC stream to be used in LibraryDownload that sends +// all responses to the callback function. +func LibraryDownloadStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB) rpc.ArduinoCoreService_LibraryDownloadServer { + return streamResponseToCallback(ctx, func(r *rpc.LibraryDownloadResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + return nil + }) +} + +// LibraryDownload downloads a library +func (s *arduinoCoreServerImpl) LibraryDownload(req *rpc.LibraryDownloadRequest, stream rpc.ArduinoCoreService_LibraryDownloadServer) error { + syncSend := NewSynchronizedSend(stream.Send) + ctx := stream.Context() + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.LibraryDownloadResponse{ + Message: &rpc.LibraryDownloadResponse_Progress{Progress: p}, + }) + } + + var downloadsDir *paths.Path + if pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()); err != nil { + return err + } else { + downloadsDir = pme.DownloadDir + release() + } + + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return err + } + + version, err := parseVersion(req.GetVersion()) + if err != nil { + return err + } + + lib, err := li.FindRelease(req.GetName(), version) + if err != nil { + return err + } + + if err := downloadLibrary(ctx, downloadsDir, lib, downloadCB, func(*rpc.TaskProgress) {}, "download", s.settings); err != nil { + return err + } + + return syncSend.Send(&rpc.LibraryDownloadResponse{ + Message: &rpc.LibraryDownloadResponse_Result_{ + Result: &rpc.LibraryDownloadResponse_Result{}, + }, + }) +} + +func downloadLibrary(ctx context.Context, downloadsDir *paths.Path, libRelease *librariesindex.Release, + downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, queryParameter string, settings *configuration.Settings) error { + + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Downloading %s", libRelease)}) + config, err := settings.DownloaderConfig() + if err != nil { + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Can't download library"), Cause: err} + } + if err := libRelease.Resource.Download(ctx, downloadsDir, config, libRelease.String(), downloadCB, queryParameter); err != nil { + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Can't download library"), Cause: err} + } + taskCB(&rpc.TaskProgress{Completed: true}) + + return nil +} diff --git a/commands/service_library_install.go b/commands/service_library_install.go new file mode 100644 index 00000000000..ca1531ac267 --- /dev/null +++ b/commands/service_library_install.go @@ -0,0 +1,281 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "errors" + "fmt" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/sirupsen/logrus" +) + +// LibraryInstallStreamResponseToCallbackFunction returns a gRPC stream to be used in LibraryInstall that sends +// all responses to the callback function. +func LibraryInstallStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_LibraryInstallServer { + return streamResponseToCallback(ctx, func(r *rpc.LibraryInstallResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// LibraryInstall resolves the library dependencies, then downloads and installs the libraries into the install location. +func (s *arduinoCoreServerImpl) LibraryInstall(req *rpc.LibraryInstallRequest, stream rpc.ArduinoCoreService_LibraryInstallServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.LibraryInstallResponse{ + Message: &rpc.LibraryInstallResponse_Progress{Progress: p}, + }) + } + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.LibraryInstallResponse{ + Message: &rpc.LibraryInstallResponse_TaskProgress{TaskProgress: p}, + }) + } + + // Obtain the library index from the manager + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return err + } + + toInstall := map[string]*rpc.LibraryDependencyStatus{} + if req.GetNoDeps() { + toInstall[req.GetName()] = &rpc.LibraryDependencyStatus{ + Name: req.GetName(), + VersionRequired: req.GetVersion(), + } + } else { + // Obtain the library explorer from the instance + lme, releaseLme, err := instances.GetLibraryManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + + res, err := libraryResolveDependencies(lme, li, req.GetName(), req.GetVersion(), req.GetNoOverwrite()) + releaseLme() + if err != nil { + return err + } + + for _, dep := range res.GetDependencies() { + if existingDep, has := toInstall[dep.GetName()]; has { + if existingDep.GetVersionRequired() != dep.GetVersionRequired() { + err := errors.New( + i18n.Tr("two different versions of the library %[1]s are required: %[2]s and %[3]s", + dep.GetName(), dep.GetVersionRequired(), existingDep.GetVersionRequired())) + return &cmderrors.LibraryDependenciesResolutionFailedError{Cause: err} + } + } + toInstall[dep.GetName()] = dep + } + } + + // Obtain the download directory + var downloadsDir *paths.Path + if pme, releasePme, err := instances.GetPackageManagerExplorer(req.GetInstance()); err != nil { + return err + } else { + downloadsDir = pme.DownloadDir + releasePme() + } + + // Obtain the library installer from the manager + lmi, releaseLmi, err := instances.GetLibraryManagerInstaller(req.GetInstance()) + if err != nil { + return err + } + defer releaseLmi() + + // Find the libReleasesToInstall to install + libReleasesToInstall := map[*librariesindex.Release]*librariesmanager.LibraryInstallPlan{} + installLocation := libraries.FromRPCLibraryInstallLocation(req.GetInstallLocation()) + for _, lib := range toInstall { + version, err := parseVersion(lib.GetVersionRequired()) + if err != nil { + return err + } + libRelease, err := li.FindRelease(lib.GetName(), version) + if err != nil { + return err + } + + installTask, err := lmi.InstallPrerequisiteCheck(libRelease.Library.Name, libRelease.Version, installLocation) + if err != nil { + return err + } + if installTask.UpToDate { + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Already installed %s", libRelease), Completed: true}) + continue + } + + if req.GetNoOverwrite() { + if installTask.ReplacedLib != nil { + return errors.New(i18n.Tr("Library %[1]s is already installed, but with a different version: %[2]s", libRelease, installTask.ReplacedLib)) + } + } + libReleasesToInstall[libRelease] = installTask + } + + for libRelease, installTask := range libReleasesToInstall { + // Checks if libRelease is the requested library and not a dependency + downloadReason := "depends" + if libRelease.GetName() == req.GetName() { + downloadReason = "install" + if installTask.ReplacedLib != nil { + downloadReason = "upgrade" + } + if installLocation == libraries.IDEBuiltIn { + downloadReason += "-builtin" + } + } + if err := downloadLibrary(ctx, downloadsDir, libRelease, downloadCB, taskCB, downloadReason, s.settings); err != nil { + return err + } + if err := installLibrary(lmi, downloadsDir, libRelease, installTask, taskCB); err != nil { + return err + } + } + + err = s.Init( + &rpc.InitRequest{Instance: req.GetInstance()}, + InitStreamResponseToCallbackFunction(ctx, nil)) + if err != nil { + return err + } + + syncSend.Send(&rpc.LibraryInstallResponse{ + Message: &rpc.LibraryInstallResponse_Result_{ + Result: &rpc.LibraryInstallResponse_Result{}, + }, + }) + return nil +} + +func installLibrary(lmi *librariesmanager.Installer, downloadsDir *paths.Path, libRelease *librariesindex.Release, installTask *librariesmanager.LibraryInstallPlan, taskCB rpc.TaskProgressCB) error { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Installing %s", libRelease)}) + logrus.WithField("library", libRelease).Info("Installing library") + + if libReplaced := installTask.ReplacedLib; libReplaced != nil { + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Replacing %[1]s with %[2]s", libReplaced, libRelease)}) + if err := lmi.Uninstall(libReplaced); err != nil { + return &cmderrors.FailedLibraryInstallError{ + Cause: fmt.Errorf("%s: %s", i18n.Tr("could not remove old library"), err)} + } + } + + installPath := installTask.TargetPath + tmpDirPath := installPath.Parent() + if err := libRelease.Resource.Install(downloadsDir, tmpDirPath, installPath); err != nil { + return &cmderrors.FailedLibraryInstallError{Cause: err} + } + + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Installed %s", libRelease), Completed: true}) + return nil +} + +// ZipLibraryInstallStreamResponseToCallbackFunction returns a gRPC stream to be used in ZipLibraryInstall that sends +// all responses to the callback function. +func ZipLibraryInstallStreamResponseToCallbackFunction(ctx context.Context, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_ZipLibraryInstallServer { + return streamResponseToCallback(ctx, func(r *rpc.ZipLibraryInstallResponse) error { + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// ZipLibraryInstall FIXMEDOC +func (s *arduinoCoreServerImpl) ZipLibraryInstall(req *rpc.ZipLibraryInstallRequest, stream rpc.ArduinoCoreService_ZipLibraryInstallServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.ZipLibraryInstallResponse{ + Message: &rpc.ZipLibraryInstallResponse_TaskProgress{TaskProgress: p}, + }) + } + + lm, err := instances.GetLibraryManager(req.GetInstance()) + if err != nil { + return err + } + lmi, release := lm.NewInstaller() + defer release() + if err := lmi.InstallZipLib(ctx, paths.New(req.GetPath()), req.GetOverwrite()); err != nil { + return &cmderrors.FailedLibraryInstallError{Cause: err} + } + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Library installed"), Completed: true}) + syncSend.Send(&rpc.ZipLibraryInstallResponse{ + Message: &rpc.ZipLibraryInstallResponse_Result_{ + Result: &rpc.ZipLibraryInstallResponse_Result{}, + }, + }) + return nil +} + +// GitLibraryInstallStreamResponseToCallbackFunction returns a gRPC stream to be used in GitLibraryInstall that sends +// all responses to the callback function. +func GitLibraryInstallStreamResponseToCallbackFunction(ctx context.Context, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_GitLibraryInstallServer { + return streamResponseToCallback(ctx, func(r *rpc.GitLibraryInstallResponse) error { + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// GitLibraryInstall FIXMEDOC +func (s *arduinoCoreServerImpl) GitLibraryInstall(req *rpc.GitLibraryInstallRequest, stream rpc.ArduinoCoreService_GitLibraryInstallServer) error { + syncSend := NewSynchronizedSend(stream.Send) + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.GitLibraryInstallResponse{ + Message: &rpc.GitLibraryInstallResponse_TaskProgress{TaskProgress: p}, + }) + } + lm, err := instances.GetLibraryManager(req.GetInstance()) + if err != nil { + return err + } + lmi, release := lm.NewInstaller() + defer release() + + // TODO: pass context + // ctx := stream.Context() + if err := lmi.InstallGitLib(req.GetUrl(), req.GetOverwrite()); err != nil { + return &cmderrors.FailedLibraryInstallError{Cause: err} + } + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Library installed"), Completed: true}) + syncSend.Send(&rpc.GitLibraryInstallResponse{ + Message: &rpc.GitLibraryInstallResponse_Result_{ + Result: &rpc.GitLibraryInstallResponse_Result{}, + }, + }) + return nil +} diff --git a/commands/lib/list.go b/commands/service_library_list.go similarity index 60% rename from commands/lib/list.go rename to commands/service_library_list.go index 553101620e4..35104caf08b 100644 --- a/commands/lib/list.go +++ b/commands/service_library_list.go @@ -13,19 +13,20 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package lib +package commands import ( "context" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/libraries/librariesresolver" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesresolver" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) @@ -35,30 +36,36 @@ type installedLib struct { } // LibraryList FIXMEDOC -func LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.LibraryListResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.LibraryListResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return nil, &arduino.InvalidInstanceError{} + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return nil, err } + lme, release, err := instances.GetLibraryManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + defer release() + nameFilter := strings.ToLower(req.GetName()) var allLibs []*installedLib if fqbnString := req.GetFqbn(); fqbnString != "" { - allLibs = listLibraries(lm, req.GetUpdatable(), true) + allLibs = listLibraries(lme, li, req.GetUpdatable(), true) fqbn, err := cores.ParseFQBN(req.GetFqbn()) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } _, boardPlatform, _, _, refBoardPlatform, err := pme.ResolveFQBN(fqbn) if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} + return nil, &cmderrors.UnknownFQBNError{Cause: err} } filteredRes := map[string]*installedLib{} @@ -91,7 +98,7 @@ func LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.Library allLibs = append(allLibs, lib) } } else { - allLibs = listLibraries(lm, req.GetUpdatable(), req.GetAll()) + allLibs = listLibraries(lme, li, req.GetUpdatable(), req.GetAll()) } installedLibs := []*rpc.InstalledLibrary{} @@ -105,7 +112,7 @@ func LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.Library } rpcLib, err := lib.Library.ToRPCLibrary() if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error getting information for library %s", lib.Library.Name), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error getting information for library %s", lib.Library.Name), Cause: err} } installedLibs = append(installedLibs, &rpc.InstalledLibrary{ Library: rpcLib, @@ -117,25 +124,25 @@ func LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.Library } // listLibraries returns the list of installed libraries. If updatable is true it -// returns only the libraries that may be updated. -func listLibraries(lm *librariesmanager.LibrariesManager, updatable bool, all bool) []*installedLib { +// returns only the libraries that may be updated by looking at the index for updates. +// If all is true, it returns all the libraries (including the libraries builtin in the +// platforms), otherwise only the user installed libraries. +func listLibraries(lme *librariesmanager.Explorer, li *librariesindex.Index, updatable bool, all bool) []*installedLib { res := []*installedLib{} - for _, libAlternatives := range lm.Libraries { - for _, lib := range libAlternatives { - if !all { - if lib.Location != libraries.User { - continue - } - } - available := lm.Index.FindLibraryUpdate(lib) - if updatable && available == nil { + for _, lib := range lme.FindAllInstalled() { + if !all { + if lib.Location != libraries.User { continue } - res = append(res, &installedLib{ - Library: lib, - Available: available, - }) } + available := li.FindLibraryUpdate(lib) + if updatable && available == nil { + continue + } + res = append(res, &installedLib{ + Library: lib, + Available: available, + }) } return res } diff --git a/commands/service_library_resolve_deps.go b/commands/service_library_resolve_deps.go new file mode 100644 index 00000000000..83cc7f1f737 --- /dev/null +++ b/commands/service_library_resolve_deps.go @@ -0,0 +1,117 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "errors" + "sort" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + semver "go.bug.st/relaxed-semver" +) + +// LibraryResolveDependencies FIXMEDOC +func (s *arduinoCoreServerImpl) LibraryResolveDependencies(ctx context.Context, req *rpc.LibraryResolveDependenciesRequest) (*rpc.LibraryResolveDependenciesResponse, error) { + lme, release, err := instances.GetLibraryManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + defer release() + + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return nil, err + } + + return libraryResolveDependencies(lme, li, req.GetName(), req.GetVersion(), req.GetDoNotUpdateInstalledLibraries()) +} + +func libraryResolveDependencies(lme *librariesmanager.Explorer, li *librariesindex.Index, + reqName, reqVersion string, noOverwrite bool) (*rpc.LibraryResolveDependenciesResponse, error) { + version, err := parseVersion(reqVersion) + if err != nil { + return nil, err + } + + // Search the requested lib + reqLibRelease, err := li.FindRelease(reqName, version) + if err != nil { + return nil, err + } + + // Extract all installed libraries + installedLibs := map[string]*libraries.Library{} + for _, lib := range listLibraries(lme, li, false, false) { + installedLibs[lib.Library.Name] = lib.Library + } + + // Resolve all dependencies... + var overrides []*librariesindex.Release + if noOverwrite { + libs := lme.FindAllInstalled() + libs = libs.FilterByVersionAndInstallLocation(nil, libraries.User) + for _, lib := range libs { + if release, err := li.FindRelease(lib.Name, lib.Version); err == nil { + overrides = append(overrides, release) + } + } + } + deps := li.ResolveDependencies(reqLibRelease, overrides) + + // If no solution has been found + if len(deps) == 0 { + // Check if there is a problem with the first level deps + for _, directDep := range reqLibRelease.GetDependencies() { + if _, ok := li.Libraries[directDep.GetName()]; !ok { + err := errors.New(i18n.Tr("dependency '%s' is not available", directDep.GetName())) + return nil, &cmderrors.LibraryDependenciesResolutionFailedError{Cause: err} + } + } + + // Otherwise there is no possible solution, the depends field has an invalid formula + return nil, &cmderrors.LibraryDependenciesResolutionFailedError{} + } + + res := []*rpc.LibraryDependencyStatus{} + for _, dep := range deps { + // ...and add information on currently installed versions of the libraries + var installed *semver.Version + required := dep.GetVersion() + if installedLib, has := installedLibs[dep.GetName()]; has { + installed = installedLib.Version + if installed != nil && required != nil && installed.Equal(required) { + // avoid situations like installed=0.53 and required=0.53.0 + required = installed + } + } + res = append(res, &rpc.LibraryDependencyStatus{ + Name: dep.GetName(), + VersionRequired: required.String(), + VersionInstalled: installed.String(), + }) + } + sort.Slice(res, func(i, j int) bool { + return res[i].GetName() < res[j].GetName() + }) + return &rpc.LibraryResolveDependenciesResponse{Dependencies: res}, nil +} diff --git a/commands/lib/search.go b/commands/service_library_search.go similarity index 73% rename from commands/lib/search.go rename to commands/service_library_search.go index 5e44e2273e1..39ff4c51c6e 100644 --- a/commands/lib/search.go +++ b/commands/service_library_search.go @@ -13,49 +13,35 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package lib +package commands import ( "context" "sort" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/utils" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" semver "go.bug.st/relaxed-semver" ) // LibrarySearch FIXMEDOC -func LibrarySearch(ctx context.Context, req *rpc.LibrarySearchRequest) (*rpc.LibrarySearchResponse, error) { - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) LibrarySearch(ctx context.Context, req *rpc.LibrarySearchRequest) (*rpc.LibrarySearchResponse, error) { + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return nil, err } - return searchLibrary(req, lm), nil + return searchLibrary(req, li), nil } -func searchLibrary(req *rpc.LibrarySearchRequest, lm *librariesmanager.LibrariesManager) *rpc.LibrarySearchResponse { +func searchLibrary(req *rpc.LibrarySearchRequest, li *librariesindex.Index) *rpc.LibrarySearchResponse { res := []*rpc.SearchedLibrary{} query := req.GetSearchArgs() - if query == "" { - query = req.GetQuery() - } - queryTerms := utils.SearchTermsFromQueryString(query) - - for _, lib := range lm.Index.Libraries { - toTest := lib.Name + " " + - lib.Latest.Paragraph + " " + - lib.Latest.Sentence + " " + - lib.Latest.Author + " " - for _, include := range lib.Latest.ProvidesIncludes { - toTest += include + " " - } + matcher := MatcherFromQueryString(query) - if utils.Match(toTest, queryTerms) { + for _, lib := range li.Libraries { + if matcher(lib) { res = append(res, indexLibraryToRPCSearchLibrary(lib, req.GetOmitReleasesDetails())) } } @@ -63,14 +49,14 @@ func searchLibrary(req *rpc.LibrarySearchRequest, lm *librariesmanager.Libraries // get a sorted slice of results sort.Slice(res, func(i, j int) bool { // Sort by name, but bubble up exact matches - equalsI := strings.EqualFold(res[i].Name, query) - equalsJ := strings.EqualFold(res[j].Name, query) + equalsI := strings.EqualFold(res[i].GetName(), query) + equalsJ := strings.EqualFold(res[j].GetName(), query) if equalsI && !equalsJ { return true } else if !equalsI && equalsJ { return false } - return res[i].Name < res[j].Name + return res[i].GetName() < res[j].GetName() }) return &rpc.LibrarySearchResponse{Libraries: res, Status: rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS} @@ -130,7 +116,7 @@ func getLibraryParameters(rel *librariesindex.Release) *rpc.LibraryRelease { } } -func getLibraryDependenciesParameter(deps []semver.Dependency) []*rpc.LibraryDependency { +func getLibraryDependenciesParameter(deps []*librariesindex.Dependency) []*rpc.LibraryDependency { res := []*rpc.LibraryDependency{} for _, dep := range deps { res = append(res, &rpc.LibraryDependency{ diff --git a/commands/service_library_search_test.go b/commands/service_library_search_test.go new file mode 100644 index 00000000000..84f625b511e --- /dev/null +++ b/commands/service_library_search_test.go @@ -0,0 +1,208 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "strings" + "testing" + + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + paths "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +var indexFilename, _ = globals.LibrariesIndexResource.IndexFileName() +var customIndexPath = paths.New("testdata", "libraries", "test1", indexFilename) +var fullIndexPath = paths.New("testdata", "libraries", "full", indexFilename) +var qualifiedSearchIndexPath = paths.New("testdata", "libraries", "qualified_search", indexFilename) + +func TestSearchLibrary(t *testing.T) { + li, err := librariesindex.LoadIndex(customIndexPath) + require.NoError(t, err) + + resp := searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: "test"}, li) + assert := assert.New(t) + assert.Equal(resp.GetStatus(), rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS) + assert.Equal(len(resp.GetLibraries()), 2) + assert.True(strings.Contains(resp.GetLibraries()[0].GetName(), "Test")) + assert.True(strings.Contains(resp.GetLibraries()[1].GetName(), "Test")) +} + +func TestSearchLibrarySimilar(t *testing.T) { + li, err := librariesindex.LoadIndex(customIndexPath) + require.NoError(t, err) + + resp := searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: "arduino"}, li) + assert := assert.New(t) + assert.Equal(resp.GetStatus(), rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS) + assert.Equal(len(resp.GetLibraries()), 2) + libs := map[string]*rpc.SearchedLibrary{} + for _, l := range resp.GetLibraries() { + libs[l.GetName()] = l + } + assert.Contains(libs, "ArduinoTestPackage") + assert.Contains(libs, "Arduino") +} + +func TestSearchLibraryFields(t *testing.T) { + li, err := librariesindex.LoadIndex(fullIndexPath) + require.NoError(t, err) + + query := func(q string) []string { + libs := []string{} + for _, lib := range searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: q}, li).GetLibraries() { + libs = append(libs, lib.GetName()) + } + return libs + } + + res := query("SparkFun_u-blox_GNSS") + require.Len(t, res, 3) + require.Equal(t, "SparkFun u-blox Arduino Library", res[0]) + require.Equal(t, "SparkFun u-blox GNSS Arduino Library", res[1]) + require.Equal(t, "SparkFun u-blox SARA-R5 Arduino Library", res[2]) + + res = query("SparkFun u-blox GNSS") + require.Len(t, res, 3) + require.Equal(t, "SparkFun u-blox Arduino Library", res[0]) + require.Equal(t, "SparkFun u-blox GNSS Arduino Library", res[1]) + require.Equal(t, "SparkFun u-blox SARA-R5 Arduino Library", res[2]) + + res = query("painlessMesh") + require.Len(t, res, 1) + require.Equal(t, "Painless Mesh", res[0]) + + res = query("cristian maglie") + require.Len(t, res, 2) + require.Equal(t, "Arduino_ConnectionHandler", res[0]) + require.Equal(t, "FlashStorage_SAMD", res[1]) + + res = query("flashstorage") + require.Len(t, res, 19) + require.Equal(t, "FlashStorage", res[0]) +} + +func TestSearchLibraryWithQualifiers(t *testing.T) { + li, err := librariesindex.LoadIndex(qualifiedSearchIndexPath) + require.NoError(t, err) + + query := func(q string) []string { + libs := []string{} + for _, lib := range searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: q}, li).GetLibraries() { + libs = append(libs, lib.GetName()) + } + return libs + } + + res := query("mesh") + require.Len(t, res, 4) + + res = query("name:Mesh") + require.Len(t, res, 3) + + res = query("name=Mesh") + require.Len(t, res, 0) + + // Space not in double-quoted string + res = query("name=Painless Mesh") + require.Len(t, res, 0) + + // Embedded space in double-quoted string + res = query("name=\"Painless Mesh\"") + require.Len(t, res, 1) + require.Equal(t, "Painless Mesh", res[0]) + + // No closing double-quote - still tokenizes with embedded space + res = query("name:\"Painless Mesh") + require.Len(t, res, 1) + + // Malformed double-quoted string with escaped first double-quote + res = query("name:\\\"Painless Mesh\"") + require.Len(t, res, 0) + + res = query("name:mesh author:TMRh20") + require.Len(t, res, 1) + require.Equal(t, "RF24Mesh", res[0]) + + res = query("mesh dependencies:ArduinoJson") + require.Len(t, res, 1) + require.Equal(t, "Painless Mesh", res[0]) + + res = query("architectures:esp author=\"Suraj I.\"") + require.Len(t, res, 1) + require.Equal(t, "esp8266-framework", res[0]) + + res = query("mesh esp") + require.Len(t, res, 2) + + res = query("mesh esp paragraph:wifi") + require.Len(t, res, 1) + require.Equal(t, "esp8266-framework", res[0]) + + // Unknown qualifier should revert to original matching + res = query("std::array") + require.Len(t, res, 1) + require.Equal(t, "Array", res[0]) + + res = query("data storage") + require.Len(t, res, 1) + require.Equal(t, "Pushdata_ESP8266_SSL", res[0]) + + res = query("category:\"data storage\"") + require.Len(t, res, 1) + require.Equal(t, "Array", res[0]) + + res = query("maintainer:@") + require.Len(t, res, 4) + + res = query("sentence:\"A library for NRF24L01(+) devices mesh.\"") + require.Len(t, res, 1) + require.Equal(t, "RF24Mesh", res[0]) + + res = query("types=contributed") + require.Len(t, res, 7) + + res = query("version:1.0") + require.Len(t, res, 3) + + res = query("version=1.2.1") + require.Len(t, res, 1) + require.Equal(t, "Array", res[0]) + + // Non-SSL URLs + res = query("website:http://") + require.Len(t, res, 1) + require.Equal(t, "RF24Mesh", res[0]) + + // Literal double-quote + res = query("sentence:\\\"") + require.Len(t, res, 1) + require.Equal(t, "RTCtime", res[0]) + + res = query("license=MIT") + require.Len(t, res, 2) + + // Empty string + res = query("license=\"\"") + require.Len(t, res, 5) + + res = query("provides:painlessmesh.h") + require.Len(t, res, 1) + require.Equal(t, "Painless Mesh", res[0]) +} diff --git a/commands/service_library_uninstall.go b/commands/service_library_uninstall.go new file mode 100644 index 00000000000..27b5acbfde5 --- /dev/null +++ b/commands/service_library_uninstall.go @@ -0,0 +1,89 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" +) + +// LibraryUninstallStreamResponseToCallbackFunction returns a gRPC stream to be used in LibraryUninstall that sends +// all responses to the callback function. +func LibraryUninstallStreamResponseToCallbackFunction(ctx context.Context, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_LibraryUninstallServer { + return streamResponseToCallback(ctx, func(r *rpc.LibraryUninstallResponse) error { + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// LibraryUninstall uninstalls a library +func (s *arduinoCoreServerImpl) LibraryUninstall(req *rpc.LibraryUninstallRequest, stream rpc.ArduinoCoreService_LibraryUninstallServer) error { + syncSend := NewSynchronizedSend(stream.Send) + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.LibraryUninstallResponse{ + Message: &rpc.LibraryUninstallResponse_TaskProgress{TaskProgress: p}, + }) + } + + lm, err := instances.GetLibraryManager(req.GetInstance()) + if err != nil { + return err + } + + version, err := parseVersion(req.GetVersion()) + if err != nil { + return err + } + lmi, release := lm.NewInstaller() + defer release() + + libs := lmi.FindByReference(req.GetName(), version, libraries.User) + if len(libs) == 0 { + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Library %s is not installed", req.GetName()), Completed: true}) + syncSend.Send(&rpc.LibraryUninstallResponse{ + Message: &rpc.LibraryUninstallResponse_Result_{Result: &rpc.LibraryUninstallResponse_Result{}}, + }) + return nil + } + + if len(libs) == 1 { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Uninstalling %s", libs)}) + lmi.Uninstall(libs[0]) + taskCB(&rpc.TaskProgress{Completed: true}) + syncSend.Send(&rpc.LibraryUninstallResponse{ + Message: &rpc.LibraryUninstallResponse_Result_{Result: &rpc.LibraryUninstallResponse_Result{}}, + }) + return nil + } + + libsDir := paths.NewPathList() + for _, lib := range libs { + libsDir.Add(lib.InstallDir) + } + return &cmderrors.MultipleLibraryInstallDetected{ + LibName: libs[0].Name, + LibsDir: libsDir, + Message: i18n.Tr("Automatic library uninstall can't be performed in this case, please manually remove them."), + } +} diff --git a/commands/service_library_upgrade.go b/commands/service_library_upgrade.go new file mode 100644 index 00000000000..d63e01a4c3a --- /dev/null +++ b/commands/service_library_upgrade.go @@ -0,0 +1,178 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// LibraryUpgradeAllStreamResponseToCallbackFunction returns a gRPC stream to be used in LibraryUpgradeAll that sends +// all responses to the callback function. +func LibraryUpgradeAllStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_LibraryUpgradeAllServer { + return streamResponseToCallback(ctx, func(r *rpc.LibraryUpgradeAllResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// LibraryUpgradeAll upgrades all the available libraries +func (s *arduinoCoreServerImpl) LibraryUpgradeAll(req *rpc.LibraryUpgradeAllRequest, stream rpc.ArduinoCoreService_LibraryUpgradeAllServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.LibraryUpgradeAllResponse{ + Message: &rpc.LibraryUpgradeAllResponse_Progress{Progress: p}, + }) + } + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.LibraryUpgradeAllResponse{ + Message: &rpc.LibraryUpgradeAllResponse_TaskProgress{TaskProgress: p}, + }) + } + + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return err + } + + lme, release, err := instances.GetLibraryManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + libsToUpgrade := listLibraries(lme, li, true, false) + release() + + if err := s.libraryUpgrade(ctx, req.GetInstance(), libsToUpgrade, downloadCB, taskCB); err != nil { + return err + } + + err = s.Init( + &rpc.InitRequest{Instance: req.GetInstance()}, + InitStreamResponseToCallbackFunction(ctx, nil)) + if err != nil { + return err + } + + syncSend.Send(&rpc.LibraryUpgradeAllResponse{ + Message: &rpc.LibraryUpgradeAllResponse_Result_{ + Result: &rpc.LibraryUpgradeAllResponse_Result{}, + }, + }) + return nil +} + +// LibraryUpgradeStreamResponseToCallbackFunction returns a gRPC stream to be used in LibraryUpgrade that sends +// all responses to the callback function. +func LibraryUpgradeStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_LibraryUpgradeServer { + return streamResponseToCallback(ctx, func(r *rpc.LibraryUpgradeResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// LibraryUpgrade upgrades a library +func (s *arduinoCoreServerImpl) LibraryUpgrade(req *rpc.LibraryUpgradeRequest, stream rpc.ArduinoCoreService_LibraryUpgradeServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.LibraryUpgradeResponse{ + Message: &rpc.LibraryUpgradeResponse_Progress{Progress: p}, + }) + } + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.LibraryUpgradeResponse{ + Message: &rpc.LibraryUpgradeResponse_TaskProgress{TaskProgress: p}, + }) + } + + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return err + } + + lme, release, err := instances.GetLibraryManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + libs := listLibraries(lme, li, false, false) + release() + + // Get the library to upgrade + name := req.GetName() + lib := filterByName(libs, name) + if lib == nil { + // library not installed... + return &cmderrors.LibraryNotFoundError{Library: name} + } + if lib.Available == nil { + // library already at the latest version + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Library %s is already at the latest version", name), Completed: true}) + } else { + // Install update + if err := s.libraryUpgrade(ctx, req.GetInstance(), []*installedLib{lib}, downloadCB, taskCB); err != nil { + return err + } + } + + syncSend.Send(&rpc.LibraryUpgradeResponse{ + Message: &rpc.LibraryUpgradeResponse_Result_{ + Result: &rpc.LibraryUpgradeResponse_Result{}, + }, + }) + return nil +} + +func (s *arduinoCoreServerImpl) libraryUpgrade(ctx context.Context, instance *rpc.Instance, libs []*installedLib, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { + for _, lib := range libs { + libInstallReq := &rpc.LibraryInstallRequest{ + Instance: instance, + Name: lib.Library.Name, + Version: "", + NoDeps: false, + NoOverwrite: false, + } + stream := LibraryInstallStreamResponseToCallbackFunction(ctx, downloadCB, taskCB) + if err := s.LibraryInstall(libInstallReq, stream); err != nil { + return err + } + } + + return nil +} + +func filterByName(libs []*installedLib, name string) *installedLib { + for _, lib := range libs { + if lib.Library.Name == name { + return lib + } + } + return nil +} diff --git a/commands/service_monitor.go b/commands/service_monitor.go new file mode 100644 index 00000000000..7c47e201ada --- /dev/null +++ b/commands/service_monitor.go @@ -0,0 +1,300 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "errors" + "fmt" + "io" + "sync/atomic" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + pluggableMonitor "github.com/arduino/arduino-cli/internal/arduino/monitor" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-properties-orderedmap" + "github.com/djherbis/buffer" + "github.com/djherbis/nio/v3" + "github.com/sirupsen/logrus" + "google.golang.org/grpc/metadata" +) + +type monitorPipeServer struct { + ctx context.Context + req atomic.Pointer[rpc.MonitorPortOpenRequest] + in *nio.PipeReader + out *nio.PipeWriter +} + +func (s *monitorPipeServer) Send(resp *rpc.MonitorResponse) error { + if len(resp.GetRxData()) > 0 { + if _, err := s.out.Write(resp.GetRxData()); err != nil { + return err + } + } + return nil +} + +func (s *monitorPipeServer) Recv() (r *rpc.MonitorRequest, e error) { + if conf := s.req.Swap(nil); conf != nil { + return &rpc.MonitorRequest{Message: &rpc.MonitorRequest_OpenRequest{OpenRequest: conf}}, nil + } + buff := make([]byte, 4096) + n, err := s.in.Read(buff) + if err != nil { + return nil, err + } + return &rpc.MonitorRequest{Message: &rpc.MonitorRequest_TxData{TxData: buff[:n]}}, nil +} + +func (s *monitorPipeServer) Context() context.Context { + return s.ctx +} + +func (s *monitorPipeServer) RecvMsg(m any) error { return nil } +func (s *monitorPipeServer) SendHeader(metadata.MD) error { return nil } +func (s *monitorPipeServer) SendMsg(m any) error { return nil } +func (s *monitorPipeServer) SetHeader(metadata.MD) error { return nil } +func (s *monitorPipeServer) SetTrailer(metadata.MD) {} + +type monitorPipeClient struct { + in *nio.PipeReader + out *nio.PipeWriter + close func() +} + +func (s *monitorPipeClient) Read(buff []byte) (n int, err error) { + return s.in.Read(buff) +} + +func (s *monitorPipeClient) Write(buff []byte) (n int, err error) { + return s.out.Write(buff) +} + +func (s *monitorPipeClient) Close() error { + s.in.Close() + s.out.Close() + s.close() + return nil +} + +// MonitorServerToReadWriteCloser creates a monitor server that proxies the data to a ReadWriteCloser. +// The server is returned along with the ReadWriteCloser that can be used to send and receive data +// to the server. The MonitorPortOpenRequest is used to configure the monitor. +func MonitorServerToReadWriteCloser(ctx context.Context, req *rpc.MonitorPortOpenRequest) (rpc.ArduinoCoreService_MonitorServer, io.ReadWriteCloser) { + server := &monitorPipeServer{} + client := &monitorPipeClient{} + server.req.Store(req) + server.ctx, client.close = context.WithCancel(ctx) + client.in, server.out = nio.Pipe(buffer.New(32 * 1024)) + server.in, client.out = nio.Pipe(buffer.New(32 * 1024)) + return server, client +} + +// Monitor opens a port monitor and streams data back and forth until the request is kept alive. +func (s *arduinoCoreServerImpl) Monitor(stream rpc.ArduinoCoreService_MonitorServer) error { + // The configuration must be sent on the first message + req, err := stream.Recv() + if err != nil { + return err + } + + openReq := req.GetOpenRequest() + if openReq == nil { + return &cmderrors.InvalidInstanceError{} + } + + pme, release, err := instances.GetPackageManagerExplorer(openReq.GetInstance()) + if err != nil { + return err + } + defer release() + monitor, boardSettings, err := findMonitorAndSettingsForProtocolAndBoard(pme, openReq.GetPort().GetProtocol(), openReq.GetFqbn()) + if err != nil { + return err + } + if err := monitor.Run(); err != nil { + return &cmderrors.FailedMonitorError{Cause: err} + } + if _, err := monitor.Describe(); err != nil { + monitor.Quit() + return &cmderrors.FailedMonitorError{Cause: err} + } + if portConfig := openReq.GetPortConfiguration(); portConfig != nil { + for _, setting := range portConfig.GetSettings() { + boardSettings.Remove(setting.GetSettingId()) + if err := monitor.Configure(setting.GetSettingId(), setting.GetValue()); err != nil { + logrus.Errorf("Could not set configuration %s=%s: %s", setting.GetSettingId(), setting.GetValue(), err) + } + } + } + for setting, value := range boardSettings.AsMap() { + monitor.Configure(setting, value) + } + monitorIO, err := monitor.Open(openReq.GetPort().GetAddress(), openReq.GetPort().GetProtocol()) + if err != nil { + monitor.Quit() + return &cmderrors.FailedMonitorError{Cause: err} + } + logrus.Infof("Port %s successfully opened", openReq.GetPort().GetAddress()) + monitorClose := func() error { + monitor.Close() + return monitor.Quit() + } + + // Send a message with Success set to true to notify the caller of the port being now active + syncSend := NewSynchronizedSend(stream.Send) + _ = syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_Success{Success: true}}) + + ctx, cancel := context.WithCancel(stream.Context()) + gracefulCloseInitiated := &atomic.Bool{} + gracefuleCloseCtx, gracefulCloseCancel := context.WithCancel(context.Background()) + + // gRPC stream receiver (gRPC data -> monitor, config, close) + go func() { + defer cancel() + for { + msg, err := stream.Recv() + if errors.Is(err, io.EOF) { + return + } + if err != nil { + syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_Error{Error: err.Error()}}) + return + } + if conf := msg.GetUpdatedConfiguration(); conf != nil { + for _, c := range conf.GetSettings() { + if err := monitor.Configure(c.GetSettingId(), c.GetValue()); err != nil { + syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_Error{Error: err.Error()}}) + } + } + } + if closeMsg := msg.GetClose(); closeMsg { + gracefulCloseInitiated.Store(true) + if err := monitorClose(); err != nil { + logrus.WithError(err).Debug("Error closing monitor port") + } + gracefulCloseCancel() + } + tx := msg.GetTxData() + for len(tx) > 0 { + n, err := monitorIO.Write(tx) + if errors.Is(err, io.EOF) { + return + } + if err != nil { + syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_Error{Error: err.Error()}}) + return + } + tx = tx[n:] + } + } + }() + + // gRPC stream sender (monitor -> gRPC) + go func() { + defer cancel() // unlock the receiver + buff := make([]byte, 4096) + for { + n, err := monitorIO.Read(buff) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_Error{Error: err.Error()}}) + break + } + if err := syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_RxData{RxData: buff[:n]}}); err != nil { + break + } + } + }() + + <-ctx.Done() + if gracefulCloseInitiated.Load() { + // Port closing has been initiated in the receiver + <-gracefuleCloseCtx.Done() + } else { + monitorClose() + } + return nil +} + +func findMonitorAndSettingsForProtocolAndBoard(pme *packagemanager.Explorer, protocol, fqbn string) (*pluggableMonitor.PluggableMonitor, *properties.Map, error) { + if protocol == "" { + return nil, nil, &cmderrors.MissingPortProtocolError{} + } + + var monitorDepOrRecipe *cores.MonitorDependency + boardSettings := properties.NewMap() + + // If a board is specified search the monitor in the board package first + if fqbn != "" { + fqbn, err := cores.ParseFQBN(fqbn) + if err != nil { + return nil, nil, &cmderrors.InvalidFQBNError{Cause: err} + } + + _, boardPlatform, _, boardProperties, _, err := pme.ResolveFQBN(fqbn) + if err != nil { + return nil, nil, &cmderrors.UnknownFQBNError{Cause: err} + } + + boardSettings = cores.GetMonitorSettings(protocol, boardProperties) + + if mon, ok := boardPlatform.Monitors[protocol]; ok { + monitorDepOrRecipe = mon + } else if recipe, ok := boardPlatform.MonitorsDevRecipes[protocol]; ok { + // If we have a recipe we must resolve it + cmdLine := boardProperties.ExpandPropsInString(recipe) + cmdArgs, err := properties.SplitQuotedString(cmdLine, `"'`, false) + if err != nil { + return nil, nil, &cmderrors.InvalidArgumentError{Message: i18n.Tr("Invalid recipe in platform.txt"), Cause: err} + } + id := fmt.Sprintf("%s-%s", boardPlatform, protocol) + return pluggableMonitor.New(id, cmdArgs...), boardSettings, nil + } + } + + if monitorDepOrRecipe == nil { + // Otherwise look in all package for a suitable monitor + for _, platformRel := range pme.InstalledPlatformReleases() { + if mon, ok := platformRel.Monitors[protocol]; ok { + monitorDepOrRecipe = mon + break + } + } + } + + if monitorDepOrRecipe == nil { + return nil, nil, &cmderrors.NoMonitorAvailableForProtocolError{Protocol: protocol} + } + + // If it is a monitor dependency, resolve tool and create a monitor client + tool := pme.FindMonitorDependency(monitorDepOrRecipe) + if tool == nil { + return nil, nil, &cmderrors.MonitorNotFoundError{Monitor: monitorDepOrRecipe.String()} + } + + return pluggableMonitor.New( + monitorDepOrRecipe.Name, + tool.InstallDir.Join(monitorDepOrRecipe.Name).String(), + ), boardSettings, nil +} diff --git a/commands/monitor/settings.go b/commands/service_monitor_settings.go similarity index 78% rename from commands/monitor/settings.go rename to commands/service_monitor_settings.go index 89976c94d77..4eb71c7add9 100644 --- a/commands/monitor/settings.go +++ b/commands/service_monitor_settings.go @@ -13,22 +13,22 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package monitor +package commands import ( "context" - "github.com/arduino/arduino-cli/arduino" - pluggableMonitor "github.com/arduino/arduino-cli/arduino/monitor" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" + pluggableMonitor "github.com/arduino/arduino-cli/internal/arduino/monitor" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) // EnumerateMonitorPortSettings returns a description of the configuration settings of a monitor port -func EnumerateMonitorPortSettings(ctx context.Context, req *rpc.EnumerateMonitorPortSettingsRequest) (*rpc.EnumerateMonitorPortSettingsResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) EnumerateMonitorPortSettings(ctx context.Context, req *rpc.EnumerateMonitorPortSettingsRequest) (*rpc.EnumerateMonitorPortSettingsResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() @@ -38,13 +38,13 @@ func EnumerateMonitorPortSettings(ctx context.Context, req *rpc.EnumerateMonitor } if err := m.Run(); err != nil { - return nil, &arduino.FailedMonitorError{Cause: err} + return nil, &cmderrors.FailedMonitorError{Cause: err} } defer m.Quit() desc, err := m.Describe() if err != nil { - return nil, &arduino.FailedMonitorError{Cause: err} + return nil, &cmderrors.FailedMonitorError{Cause: err} } // Apply default settings for this board and protocol diff --git a/commands/service_platform_download.go b/commands/service_platform_download.go new file mode 100644 index 00000000000..1f542d3abf1 --- /dev/null +++ b/commands/service_platform_download.go @@ -0,0 +1,85 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// PlatformDownloadStreamResponseToCallbackFunction returns a gRPC stream to be used in PlatformDownload that sends +// all responses to the callback function. +func PlatformDownloadStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB) rpc.ArduinoCoreService_PlatformDownloadServer { + return streamResponseToCallback(ctx, func(r *rpc.PlatformDownloadResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + return nil + }) +} + +// PlatformDownload downloads a platform package +func (s *arduinoCoreServerImpl) PlatformDownload(req *rpc.PlatformDownloadRequest, stream rpc.ArduinoCoreService_PlatformDownloadServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + defer release() + + version, err := parseVersion(req.GetVersion()) + if err != nil { + return &cmderrors.InvalidVersionError{Cause: err} + } + + ref := &packagemanager.PlatformReference{ + Package: req.GetPlatformPackage(), + PlatformArchitecture: req.GetArchitecture(), + PlatformVersion: version, + } + platform, tools, err := pme.FindPlatformReleaseDependencies(ref) + if err != nil { + return &cmderrors.PlatformNotFoundError{Platform: ref.String(), Cause: err} + } + + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.PlatformDownloadResponse{ + Message: &rpc.PlatformDownloadResponse_Progress{ + Progress: p, + }, + }) + } + + if err := pme.DownloadPlatformRelease(ctx, platform, downloadCB); err != nil { + return err + } + + for _, tool := range tools { + if err := pme.DownloadToolRelease(ctx, tool, downloadCB); err != nil { + return err + } + } + + return syncSend.Send(&rpc.PlatformDownloadResponse{Message: &rpc.PlatformDownloadResponse_Result_{ + Result: &rpc.PlatformDownloadResponse_Result{}, + }}) +} diff --git a/commands/service_platform_install.go b/commands/service_platform_install.go new file mode 100644 index 00000000000..6a9583fa429 --- /dev/null +++ b/commands/service_platform_install.go @@ -0,0 +1,122 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "fmt" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// UpdateIndexStreamResponseToCallbackFunction returns a gRPC stream to be used in PlatformInstall that sends +// all responses to the callback function. +func PlatformInstallStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_PlatformInstallServer { + return streamResponseToCallback(ctx, func(r *rpc.PlatformInstallResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// PlatformInstall installs a platform package +func (s *arduinoCoreServerImpl) PlatformInstall(req *rpc.PlatformInstallRequest, stream rpc.ArduinoCoreService_PlatformInstallServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.PlatformInstallResponse{ + Message: &rpc.PlatformInstallResponse_TaskProgress{ + TaskProgress: p, + }, + }) + } + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.PlatformInstallResponse{ + Message: &rpc.PlatformInstallResponse_Progress{ + Progress: p, + }, + }) + } + + install := func() error { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + defer release() + + version, err := parseVersion(req.GetVersion()) + if err != nil { + return &cmderrors.InvalidVersionError{Cause: err} + } + + ref := &packagemanager.PlatformReference{ + Package: req.GetPlatformPackage(), + PlatformArchitecture: req.GetArchitecture(), + PlatformVersion: version, + } + platformRelease, tools, err := pme.FindPlatformReleaseDependencies(ref) + if err != nil { + return &cmderrors.PlatformNotFoundError{Platform: ref.String(), Cause: err} + } + + // Prerequisite checks before install + if platformRelease.IsInstalled() { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Platform %s already installed", platformRelease), Completed: true}) + return nil + } + + if req.GetNoOverwrite() { + if installed := pme.GetInstalledPlatformRelease(platformRelease.Platform); installed != nil { + return fmt.Errorf("%s: %s", + i18n.Tr("Platform %s already installed", installed), + i18n.Tr("could not overwrite")) + } + } + + if err := pme.DownloadAndInstallPlatformAndTools(ctx, platformRelease, tools, downloadCB, taskCB, req.GetSkipPostInstall(), req.GetSkipPreUninstall()); err != nil { + return err + } + + return nil + } + + if err := install(); err != nil { + return err + } + + err := s.Init( + &rpc.InitRequest{Instance: req.GetInstance()}, + InitStreamResponseToCallbackFunction(ctx, nil), + ) + if err != nil { + return err + } + + return syncSend.Send(&rpc.PlatformInstallResponse{ + Message: &rpc.PlatformInstallResponse_Result_{ + Result: &rpc.PlatformInstallResponse_Result{}, + }, + }) +} diff --git a/commands/core/search.go b/commands/service_platform_search.go similarity index 50% rename from commands/core/search.go rename to commands/service_platform_search.go index 4562eb570e0..4117bf7be18 100644 --- a/commands/core/search.go +++ b/commands/service_platform_search.go @@ -13,54 +13,54 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package core +package commands import ( + "context" "regexp" "sort" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/utils" - "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/utils" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) // PlatformSearch FIXMEDOC -func PlatformSearch(req *rpc.PlatformSearchRequest) (*rpc.PlatformSearchResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) PlatformSearch(_ context.Context, req *rpc.PlatformSearchRequest) (*rpc.PlatformSearchResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() - res := []*cores.PlatformRelease{} - if isUsb, _ := regexp.MatchString("[0-9a-f]{4}:[0-9a-f]{4}", req.SearchArgs); isUsb { - vid, pid := req.SearchArgs[:4], req.SearchArgs[5:] + res := []*cores.Platform{} + if isUsb, _ := regexp.MatchString("[0-9a-f]{4}:[0-9a-f]{4}", req.GetSearchArgs()); isUsb { + vid, pid := req.GetSearchArgs()[:4], req.GetSearchArgs()[5:] res = pme.FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid) } else { - searchArgs := utils.SearchTermsFromQueryString(req.SearchArgs) - allVersions := req.AllVersions + searchArgs := utils.SearchTermsFromQueryString(req.GetSearchArgs()) for _, targetPackage := range pme.GetPackages() { for _, platform := range targetPackage.Platforms { + if platform == nil { + continue + } // Users can install platforms manually in the Sketchbook hardware folder, - // the core search command must operate only on platforms installed through - // the PlatformManager, thus we skip the manually installed ones. - if platform == nil || platform.Name == "" || platform.ManuallyInstalled { + // if not explictily requested we skip them. + if !req.GetManuallyInstalled() && platform.ManuallyInstalled { continue } // Discard platforms with no releases latestRelease := platform.GetLatestRelease() - if latestRelease == nil { + if latestRelease == nil || latestRelease.Name == "" { continue } // Gather all strings that can be used for searching toTest := platform.String() + " " + - platform.Name + " " + + latestRelease.Name + " " + platform.Architecture + " " + targetPackage.Name + " " + targetPackage.Maintainer + " " + @@ -74,33 +74,36 @@ func PlatformSearch(req *rpc.PlatformSearchRequest) (*rpc.PlatformSearchResponse continue } - if allVersions { - res = append(res, platform.GetAllReleases()...) - } else { - res = append(res, latestRelease) - } + res = append(res, platform) } } } - out := make([]*rpc.Platform, len(res)) - for i, platformRelease := range res { - out[i] = commands.PlatformReleaseToRPC(platformRelease) - if platformRelease.IsInstalled() { - out[i].Installed = platformRelease.Version.String() + out := []*rpc.PlatformSummary{} + for _, platform := range res { + rpcPlatformSummary := &rpc.PlatformSummary{ + Metadata: platformToRPCPlatformMetadata(platform), + Releases: map[string]*rpc.PlatformRelease{}, + } + if installed := pme.GetInstalledPlatformRelease(platform); installed != nil { + rpcPlatformSummary.InstalledVersion = installed.Version.String() } + if latestCompatible := platform.GetLatestCompatibleRelease(); latestCompatible != nil { + rpcPlatformSummary.LatestVersion = latestCompatible.Version.String() + } + for _, platformRelease := range platform.GetAllReleases() { + rpcPlatformRelease := platformReleaseToRPC(platformRelease) + rpcPlatformSummary.Releases[rpcPlatformRelease.GetVersion()] = rpcPlatformRelease + } + out = append(out, rpcPlatformSummary) } + // Sort result alphabetically and put deprecated platforms at the bottom - sort.Slice( - out, func(i, j int) bool { - return strings.ToLower(out[i].Name) < strings.ToLower(out[j].Name) - }) - sort.SliceStable( - out, func(i, j int) bool { - if !out[i].Deprecated && out[j].Deprecated { - return true - } - return false - }) + sort.Slice(out, func(i, j int) bool { + return strings.ToLower(out[i].GetMetadata().GetId()) < strings.ToLower(out[j].GetMetadata().GetId()) + }) + sort.SliceStable(out, func(i, j int) bool { + return !out[i].GetMetadata().GetDeprecated() && out[j].GetMetadata().GetDeprecated() + }) return &rpc.PlatformSearchResponse{SearchOutput: out}, nil } diff --git a/commands/service_platform_search_test.go b/commands/service_platform_search_test.go new file mode 100644 index 00000000000..8fd78e540f8 --- /dev/null +++ b/commands/service_platform_search_test.go @@ -0,0 +1,369 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "testing" + + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestPlatformSearch(t *testing.T) { + dataDir := paths.TempDir().Join("test", "data_dir") + downloadDir := paths.TempDir().Join("test", "staging") + t.Setenv("ARDUINO_DATA_DIR", dataDir.String()) + t.Setenv("ARDUINO_DOWNLOADS_DIR", downloadDir.String()) + dataDir.MkdirAll() + downloadDir.MkdirAll() + defer paths.TempDir().Join("test").RemoveAll() + err := paths.New("testdata", "platform", "package_index.json").CopyTo(dataDir.Join("package_index.json")) + require.Nil(t, err) + + ctx := context.Background() + srv := NewArduinoCoreServer() + + _, err = srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{SettingsFormat: "yaml"}) + require.NoError(t, err) + + createResp, err := srv.Create(ctx, &rpc.CreateRequest{}) + require.NoError(t, err) + + inst := createResp.GetInstance() + require.NotNil(t, inst) + + err = srv.Init(&rpc.InitRequest{Instance: inst}, InitStreamResponseToCallbackFunction(ctx, nil)) + require.NoError(t, err) + + t.Run("SearchAllVersions", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "retrokit", + }) + require.Nil(t, stat) + require.NotNil(t, res) + + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "Retrokits-RK002:arm", + Maintainer: "Retrokits (www.retrokits.com)", + Website: "https://www.retrokits.com", + Email: "info@retrokits.com", + Indexed: true, + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.0.5": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.5", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + "1.0.6": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.6", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) + + t.Run("SearchThePackageMaintainer", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "Retrokits (www.retrokits.com)", + }) + require.Nil(t, stat) + require.NotNil(t, res) + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "Retrokits-RK002:arm", + Maintainer: "Retrokits (www.retrokits.com)", + Website: "https://www.retrokits.com", + Email: "info@retrokits.com", + Indexed: true, + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.0.5": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.5", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + "1.0.6": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.6", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) + + t.Run("SearchPackageName", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "Retrokits-RK002", + }) + require.Nil(t, stat) + require.NotNil(t, res) + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "Retrokits-RK002:arm", + Maintainer: "Retrokits (www.retrokits.com)", + Website: "https://www.retrokits.com", + Email: "info@retrokits.com", + Indexed: true, + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.0.5": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.5", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + "1.0.6": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.6", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) + + t.Run("SearchPlatformName", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "rk002", + }) + require.Nil(t, stat) + require.NotNil(t, res) + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "Retrokits-RK002:arm", + Maintainer: "Retrokits (www.retrokits.com)", + Website: "https://www.retrokits.com", + Email: "info@retrokits.com", + Indexed: true, + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.0.5": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.5", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + "1.0.6": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.6", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) + + t.Run("SearchBoardName", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "Yún", + }) + require.Nil(t, stat) + require.NotNil(t, res) + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "arduino:avr", + Maintainer: "Arduino", + Website: "https://www.arduino.cc/", + Email: "packages@arduino.cc", + Indexed: true, + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.8.3": { + Name: "Arduino AVR Boards", + Types: []string{"Arduino"}, + Installed: false, + Version: "1.8.3", + Boards: []*rpc.Board{ + {Name: "Arduino Yún"}, + {Name: "Arduino Uno"}, + {Name: "Arduino Uno WiFi"}, + {Name: "Arduino Diecimila"}, + {Name: "Arduino Nano"}, + {Name: "Arduino Mega"}, + {Name: "Arduino MegaADK"}, + {Name: "Arduino Leonardo"}, + {Name: "Arduino Leonardo Ethernet"}, + {Name: "Arduino Micro"}, + {Name: "Arduino Esplora"}, + {Name: "Arduino Mini"}, + {Name: "Arduino Ethernet"}, + {Name: "Arduino Fio"}, + {Name: "Arduino BT"}, + {Name: "Arduino LilyPadUSB"}, + {Name: "Arduino Lilypad"}, + {Name: "Arduino Pro"}, + {Name: "Arduino ATMegaNG"}, + {Name: "Arduino Robot Control"}, + {Name: "Arduino Robot Motor"}, + {Name: "Arduino Gemma"}, + {Name: "Adafruit Circuit Playground"}, + {Name: "Arduino Yún Mini"}, + {Name: "Arduino Industrial 101"}, + {Name: "Linino One"}, + }, + Help: &rpc.HelpResources{Online: "http://www.arduino.cc/en/Reference/HomePage"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) + + t.Run("SearchBoardName2", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "yun", + }) + require.Nil(t, stat) + require.NotNil(t, res) + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "arduino:avr", + Indexed: true, + Maintainer: "Arduino", + Website: "https://www.arduino.cc/", + Email: "packages@arduino.cc", + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.8.3": { + Name: "Arduino AVR Boards", + Types: []string{"Arduino"}, + Installed: false, + Version: "1.8.3", + Boards: []*rpc.Board{ + {Name: "Arduino Yún"}, + {Name: "Arduino Uno"}, + {Name: "Arduino Uno WiFi"}, + {Name: "Arduino Diecimila"}, + {Name: "Arduino Nano"}, + {Name: "Arduino Mega"}, + {Name: "Arduino MegaADK"}, + {Name: "Arduino Leonardo"}, + {Name: "Arduino Leonardo Ethernet"}, + {Name: "Arduino Micro"}, + {Name: "Arduino Esplora"}, + {Name: "Arduino Mini"}, + {Name: "Arduino Ethernet"}, + {Name: "Arduino Fio"}, + {Name: "Arduino BT"}, + {Name: "Arduino LilyPadUSB"}, + {Name: "Arduino Lilypad"}, + {Name: "Arduino Pro"}, + {Name: "Arduino ATMegaNG"}, + {Name: "Arduino Robot Control"}, + {Name: "Arduino Robot Motor"}, + {Name: "Arduino Gemma"}, + {Name: "Adafruit Circuit Playground"}, + {Name: "Arduino Yún Mini"}, + {Name: "Arduino Industrial 101"}, + {Name: "Linino One"}, + }, + Help: &rpc.HelpResources{Online: "http://www.arduino.cc/en/Reference/HomePage"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) +} + +func TestPlatformSearchSorting(t *testing.T) { + dataDir := paths.TempDir().Join("test", "data_dir") + downloadDir := paths.TempDir().Join("test", "staging") + t.Setenv("ARDUINO_DATA_DIR", dataDir.String()) + t.Setenv("ARDUINO_DOWNLOADS_DIR", downloadDir.String()) + dataDir.MkdirAll() + downloadDir.MkdirAll() + defer paths.TempDir().Join("test").RemoveAll() + err := paths.New("testdata", "platform", "package_index.json").CopyTo(dataDir.Join("package_index.json")) + require.Nil(t, err) + + ctx := context.Background() + srv := NewArduinoCoreServer() + + _, err = srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{SettingsFormat: "yaml"}) + require.NoError(t, err) + + createResp, err := srv.Create(ctx, &rpc.CreateRequest{}) + require.NoError(t, err) + inst := createResp.GetInstance() + require.NotNil(t, inst) + err = srv.Init(&rpc.InitRequest{Instance: inst}, InitStreamResponseToCallbackFunction(ctx, nil)) + require.NoError(t, err) + + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "", + }) + require.Nil(t, stat) + require.NotNil(t, res) + + require.Len(t, res.GetSearchOutput(), 3) + require.Equal(t, res.GetSearchOutput()[0].GetSortedReleases()[0].GetName(), "Arduino AVR Boards") + require.Equal(t, res.GetSearchOutput()[0].GetMetadata().GetDeprecated(), false) + require.Equal(t, res.GetSearchOutput()[1].GetSortedReleases()[0].GetName(), "RK002") + require.Equal(t, res.GetSearchOutput()[1].GetMetadata().GetDeprecated(), false) + require.Equal(t, res.GetSearchOutput()[2].GetLatestRelease().GetName(), "Platform") + require.Equal(t, res.GetSearchOutput()[2].GetMetadata().GetDeprecated(), true) +} diff --git a/commands/service_platform_uninstall.go b/commands/service_platform_uninstall.go new file mode 100644 index 00000000000..cf21d91a8ad --- /dev/null +++ b/commands/service_platform_uninstall.go @@ -0,0 +1,105 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// PlatformUninstallStreamResponseToCallbackFunction returns a gRPC stream to be used in PlatformUninstall that sends +// all responses to the callback function. +func PlatformUninstallStreamResponseToCallbackFunction(ctx context.Context, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_PlatformUninstallServer { + return streamResponseToCallback(ctx, func(r *rpc.PlatformUninstallResponse) error { + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// PlatformUninstall uninstalls a platform package +func (s *arduinoCoreServerImpl) PlatformUninstall(req *rpc.PlatformUninstallRequest, stream rpc.ArduinoCoreService_PlatformUninstallServer) error { + syncSend := NewSynchronizedSend(stream.Send) + ctx := stream.Context() + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.PlatformUninstallResponse{ + Message: &rpc.PlatformUninstallResponse_TaskProgress{ + TaskProgress: p, + }, + }) + } + if err := platformUninstall(ctx, req, taskCB); err != nil { + return err + } + if err := s.Init(&rpc.InitRequest{Instance: req.GetInstance()}, InitStreamResponseToCallbackFunction(ctx, nil)); err != nil { + return err + } + return syncSend.Send(&rpc.PlatformUninstallResponse{ + Message: &rpc.PlatformUninstallResponse_Result_{ + Result: &rpc.PlatformUninstallResponse_Result{}, + }, + }) +} + +// platformUninstall is the implementation of platform unistaller +func platformUninstall(_ context.Context, req *rpc.PlatformUninstallRequest, taskCB rpc.TaskProgressCB) error { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return &cmderrors.InvalidInstanceError{} + } + defer release() + + ref := &packagemanager.PlatformReference{ + Package: req.GetPlatformPackage(), + PlatformArchitecture: req.GetArchitecture(), + } + if ref.PlatformVersion == nil { + platform := pme.FindPlatform(ref) + if platform == nil { + return &cmderrors.PlatformNotFoundError{Platform: ref.String()} + } + platformRelease := pme.GetInstalledPlatformRelease(platform) + if platformRelease == nil { + return &cmderrors.PlatformNotFoundError{Platform: ref.String()} + } + ref.PlatformVersion = platformRelease.Version + } + + platform, tools, err := pme.FindPlatformReleaseDependencies(ref) + if err != nil { + return &cmderrors.NotFoundError{Message: i18n.Tr("Can't find dependencies for platform %s", ref), Cause: err} + } + + // TODO: pass context + if err := pme.UninstallPlatform(platform, taskCB, req.GetSkipPreUninstall()); err != nil { + return err + } + + for _, tool := range tools { + if !pme.IsToolRequired(tool) { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Uninstalling %s, tool is no more required", tool)}) + pme.UninstallTool(tool, taskCB, req.GetSkipPreUninstall()) + } + } + + return nil +} diff --git a/commands/service_platform_upgrade.go b/commands/service_platform_upgrade.go new file mode 100644 index 00000000000..94432e87c31 --- /dev/null +++ b/commands/service_platform_upgrade.go @@ -0,0 +1,108 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// PlatformUpgradeStreamResponseToCallbackFunction returns a gRPC stream to be used in PlatformUpgrade that sends +// all responses to the callback function. +func PlatformUpgradeStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) (rpc.ArduinoCoreService_PlatformUpgradeServer, func() *rpc.PlatformUpgradeResponse_Result) { + var resp *rpc.PlatformUpgradeResponse_Result + return streamResponseToCallback(ctx, func(r *rpc.PlatformUpgradeResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + if r.GetResult() != nil { + resp = r.GetResult() + } + return nil + }), func() *rpc.PlatformUpgradeResponse_Result { + return resp + } +} + +// PlatformUpgrade upgrades a platform package +func (s *arduinoCoreServerImpl) PlatformUpgrade(req *rpc.PlatformUpgradeRequest, stream rpc.ArduinoCoreService_PlatformUpgradeServer) error { + syncSend := NewSynchronizedSend(stream.Send) + ctx := stream.Context() + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.PlatformUpgradeResponse{ + Message: &rpc.PlatformUpgradeResponse_Progress{ + Progress: p, + }, + }) + } + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.PlatformUpgradeResponse{ + Message: &rpc.PlatformUpgradeResponse_TaskProgress{ + TaskProgress: p, + }, + }) + } + + upgrade := func() (*cores.PlatformRelease, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + defer release() + + // Extract all PlatformReference to platforms that have updates + ref := &packagemanager.PlatformReference{ + Package: req.GetPlatformPackage(), + PlatformArchitecture: req.GetArchitecture(), + } + platform, err := pme.DownloadAndInstallPlatformUpgrades(ctx, ref, downloadCB, taskCB, req.GetSkipPostInstall(), req.GetSkipPreUninstall()) + if err != nil { + return platform, err + } + + return platform, nil + } + + platformRelease, err := upgrade() + if platformRelease != nil { + syncSend.Send(&rpc.PlatformUpgradeResponse{ + Message: &rpc.PlatformUpgradeResponse_Result_{ + Result: &rpc.PlatformUpgradeResponse_Result{ + Platform: &rpc.Platform{ + Metadata: platformToRPCPlatformMetadata(platformRelease.Platform), + Release: platformReleaseToRPC(platformRelease), + }, + }, + }, + }) + } + if err != nil { + return err + } + + if err := s.Init(&rpc.InitRequest{Instance: req.GetInstance()}, InitStreamResponseToCallbackFunction(ctx, nil)); err != nil { + return err + } + + return nil +} diff --git a/commands/sketch/set_defaults.go b/commands/service_set_sketch_defaults.go similarity index 67% rename from commands/sketch/set_defaults.go rename to commands/service_set_sketch_defaults.go index 1a4ebc6b752..6b3ba044899 100644 --- a/commands/sketch/set_defaults.go +++ b/commands/service_set_sketch_defaults.go @@ -13,41 +13,48 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( "context" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/sketch" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" ) // SetSketchDefaults updates the sketch project file (sketch.yaml) with the given defaults // for the values `default_fqbn`, `default_port`, and `default_protocol`. -func SetSketchDefaults(ctx context.Context, req *rpc.SetSketchDefaultsRequest) (*rpc.SetSketchDefaultsResponse, error) { - sk, err := sketch.New(paths.New(req.SketchPath)) +func (s *arduinoCoreServerImpl) SetSketchDefaults(ctx context.Context, req *rpc.SetSketchDefaultsRequest) (*rpc.SetSketchDefaultsResponse, error) { + sk, err := sketch.New(paths.New(req.GetSketchPath())) if err != nil { - return nil, &arduino.CantOpenSketchError{Cause: err} + return nil, &cmderrors.CantOpenSketchError{Cause: err} } oldAddress, oldProtocol := sk.GetDefaultPortAddressAndProtocol() res := &rpc.SetSketchDefaultsResponse{ DefaultFqbn: sk.GetDefaultFQBN(), + DefaultProgrammer: sk.GetDefaultProgrammer(), DefaultPortAddress: oldAddress, DefaultPortProtocol: oldProtocol, } if fqbn := req.GetDefaultFqbn(); fqbn != "" { if err := sk.SetDefaultFQBN(fqbn); err != nil { - return nil, &arduino.CantUpdateSketchError{Cause: err} + return nil, &cmderrors.CantUpdateSketchError{Cause: err} } res.DefaultFqbn = fqbn } + if programmer := req.GetDefaultProgrammer(); programmer != "" { + if err := sk.SetDefaultProgrammer(programmer); err != nil { + return nil, &cmderrors.CantUpdateSketchError{Cause: err} + } + res.DefaultProgrammer = programmer + } if newAddress, newProtocol := req.GetDefaultPortAddress(), req.GetDefaultPortProtocol(); newAddress != "" { if err := sk.SetDefaultPort(newAddress, newProtocol); err != nil { - return nil, &arduino.CantUpdateSketchError{Cause: err} + return nil, &cmderrors.CantUpdateSketchError{Cause: err} } res.DefaultPortAddress = newAddress res.DefaultPortProtocol = newProtocol diff --git a/commands/service_settings.go b/commands/service_settings.go new file mode 100644 index 00000000000..d38f4a95cfd --- /dev/null +++ b/commands/service_settings.go @@ -0,0 +1,229 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "encoding/json" + "fmt" + "reflect" + + "github.com/arduino/arduino-cli/commands/cmderrors" + f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/cli/configuration" + "github.com/arduino/arduino-cli/internal/go-configmap" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "google.golang.org/protobuf/proto" + "gopkg.in/yaml.v3" +) + +// SettingsGetValue returns a settings value given its key. If the key is not present +// an error will be returned, so that we distinguish empty settings from missing +// ones. +func (s *arduinoCoreServerImpl) ConfigurationGet(ctx context.Context, req *rpc.ConfigurationGetRequest) (*rpc.ConfigurationGetResponse, error) { + conf := &rpc.Configuration{ + Directories: &rpc.Configuration_Directories{ + Builtin: &rpc.Configuration_Directories_Builtin{}, + Data: s.settings.DataDir().String(), + Downloads: s.settings.DownloadsDir().String(), + User: s.settings.UserDir().String(), + }, + Network: &rpc.Configuration_Network{}, + Sketch: &rpc.Configuration_Sketch{ + AlwaysExportBinaries: s.settings.SketchAlwaysExportBinaries(), + }, + BuildCache: &rpc.Configuration_BuildCache{ + CompilationsBeforePurge: uint64(s.settings.GetCompilationsBeforeBuildCachePurge()), + TtlSecs: uint64(s.settings.GetBuildCacheTTL().Seconds()), + }, + BoardManager: &rpc.Configuration_BoardManager{ + AdditionalUrls: s.settings.BoardManagerAdditionalUrls(), + }, + Daemon: &rpc.Configuration_Daemon{ + Port: s.settings.DaemonPort(), + }, + Output: &rpc.Configuration_Output{ + NoColor: s.settings.NoColor(), + }, + Logging: &rpc.Configuration_Logging{ + Level: s.settings.LoggingLevel(), + Format: s.settings.LoggingFormat(), + }, + Library: &rpc.Configuration_Library{ + EnableUnsafeInstall: s.settings.LibraryEnableUnsafeInstall(), + }, + Updater: &rpc.Configuration_Updater{ + EnableNotification: s.settings.UpdaterEnableNotification(), + }, + } + + if builtinLibs := s.settings.IDEBuiltinLibrariesDir(); builtinLibs != nil { + conf.Directories.Builtin.Libraries = proto.String(builtinLibs.String()) + } + + if ua := s.settings.ExtraUserAgent(); ua != "" { + conf.Network.ExtraUserAgent = &ua + } + if proxy, err := s.settings.NetworkProxy(); err == nil && proxy != nil { + conf.Network.Proxy = proto.String(proxy.String()) + } + + if logFile := s.settings.LoggingFile(); logFile != nil { + file := logFile.String() + conf.Logging.File = &file + } + + if locale := s.settings.Locale(); locale != "" { + conf.Locale = &locale + } + + return &rpc.ConfigurationGetResponse{Configuration: conf}, nil +} + +func (s *arduinoCoreServerImpl) SettingsSetValue(ctx context.Context, req *rpc.SettingsSetValueRequest) (*rpc.SettingsSetValueResponse, error) { + // Determine the existence and the kind of the value + key := req.GetKey() + + // Extract the value from the request + encodedValue := []byte(req.GetEncodedValue()) + if len(encodedValue) == 0 { + // If the value is empty, unset the key + s.settings.Delete(key) + return &rpc.SettingsSetValueResponse{}, nil + } + + var newValue any + switch req.GetValueFormat() { + case "", "json": + if err := json.Unmarshal(encodedValue, &newValue); err != nil { + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("invalid value: %v", err)} + } + case "yaml": + if err := yaml.Unmarshal(encodedValue, &newValue); err != nil { + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("invalid value: %v", err)} + } + case "cli": + err := s.settings.SetFromCLIArgs(key, req.GetEncodedValue()) + if err != nil { + return nil, err + } + return &rpc.SettingsSetValueResponse{}, nil + default: + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("unsupported value format: %s", req.ValueFormat)} + } + + // If the value is "null", unset the key + if reflect.TypeOf(newValue) == reflect.TypeOf(nil) { + s.settings.Delete(key) + return &rpc.SettingsSetValueResponse{}, nil + } + + // Set the value + if err := s.settings.Set(key, newValue); err != nil { + return nil, err + } + + return &rpc.SettingsSetValueResponse{}, nil +} + +func (s *arduinoCoreServerImpl) SettingsGetValue(ctx context.Context, req *rpc.SettingsGetValueRequest) (*rpc.SettingsGetValueResponse, error) { + key := req.GetKey() + value, ok := s.settings.GetOk(key) + if !ok { + value, ok = s.settings.Defaults.GetOk(key) + } + if !ok { + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("key %s not found", key)} + } + + switch req.GetValueFormat() { + case "", "json": + valueJson, err := json.Marshal(value) + if err != nil { + return nil, fmt.Errorf("error marshalling value: %v", err) + } + return &rpc.SettingsGetValueResponse{EncodedValue: string(valueJson)}, nil + case "yaml": + valueYaml, err := yaml.Marshal(value) + if err != nil { + return nil, fmt.Errorf("error marshalling value: %v", err) + } + return &rpc.SettingsGetValueResponse{EncodedValue: string(valueYaml)}, nil + default: + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("unsupported value format: %s", req.ValueFormat)} + } +} + +// ConfigurationSave encodes the current configuration in the specified format +func (s *arduinoCoreServerImpl) ConfigurationSave(ctx context.Context, req *rpc.ConfigurationSaveRequest) (*rpc.ConfigurationSaveResponse, error) { + switch req.GetSettingsFormat() { + case "yaml": + data, err := yaml.Marshal(s.settings) + if err != nil { + return nil, fmt.Errorf("error marshalling settings: %v", err) + } + return &rpc.ConfigurationSaveResponse{EncodedSettings: string(data)}, nil + case "json": + data, err := json.MarshalIndent(s.settings, "", " ") + if err != nil { + return nil, fmt.Errorf("error marshalling settings: %v", err) + } + return &rpc.ConfigurationSaveResponse{EncodedSettings: string(data)}, nil + default: + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("unsupported format: %s", req.GetSettingsFormat())} + } +} + +// SettingsReadFromFile read settings from a YAML file and replace the settings currently stored in memory. +func (s *arduinoCoreServerImpl) ConfigurationOpen(ctx context.Context, req *rpc.ConfigurationOpenRequest) (*rpc.ConfigurationOpenResponse, error) { + warnings := []string{} + + switch req.GetSettingsFormat() { + case "yaml": + err := yaml.Unmarshal([]byte(req.GetEncodedSettings()), s.settings) + if errs, ok := err.(*configmap.UnmarshalErrors); ok { + warnings = f.Map(errs.WrappedErrors(), (error).Error) + } else if err != nil { + return nil, fmt.Errorf("error unmarshalling settings: %v", err) + } + case "json": + err := json.Unmarshal([]byte(req.GetEncodedSettings()), s.settings) + if errs, ok := err.(*configmap.UnmarshalErrors); ok { + warnings = f.Map(errs.WrappedErrors(), (error).Error) + } else if err != nil { + return nil, fmt.Errorf("error unmarshalling settings: %v", err) + } + default: + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("unsupported format: %s", req.GetSettingsFormat())} + } + + configuration.InjectEnvVars(s.settings) + return &rpc.ConfigurationOpenResponse{Warnings: warnings}, nil +} + +// SettingsEnumerate returns the list of all the settings keys. +func (s *arduinoCoreServerImpl) SettingsEnumerate(ctx context.Context, req *rpc.SettingsEnumerateRequest) (*rpc.SettingsEnumerateResponse, error) { + var entries []*rpc.SettingsEnumerateResponse_Entry + for k, t := range s.settings.Defaults.Schema() { + entries = append(entries, &rpc.SettingsEnumerateResponse_Entry{ + Key: k, + Type: t.String(), + }) + } + return &rpc.SettingsEnumerateResponse{ + Entries: entries, + }, nil +} diff --git a/commands/service_settings_test.go b/commands/service_settings_test.go new file mode 100644 index 00000000000..1c77856a336 --- /dev/null +++ b/commands/service_settings_test.go @@ -0,0 +1,236 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "encoding/json" + "testing" + + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func loadConfig(t *testing.T, srv rpc.ArduinoCoreServiceServer, confPath *paths.Path) { + confPath.ToAbs() + conf, err := confPath.ReadFile() + require.NoError(t, err) + _, err = srv.ConfigurationOpen(context.Background(), &rpc.ConfigurationOpenRequest{ + EncodedSettings: string(conf), + SettingsFormat: "yaml", + }) + require.NoError(t, err) +} + +func TestGetAll(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + resp, err := srv.ConfigurationGet(context.Background(), &rpc.ConfigurationGetRequest{}) + require.Nil(t, err) + + defaultUserDir, err := srv.SettingsGetValue(context.Background(), &rpc.SettingsGetValueRequest{Key: "directories.user"}) + require.NoError(t, err) + + content, err := json.Marshal(resp.GetConfiguration()) + require.Nil(t, err) + require.JSONEq(t, `{ + "board_manager": { + "additional_urls": [ "http://foobar.com", "http://example.com" ] + }, + "build_cache": { + "compilations_before_purge": 10, + "ttl_secs": 2592000 + }, + "directories": { + "builtin": {}, + "data": "/home/massi/.arduino15", + "downloads": "/home/massi/.arduino15/staging", + "user": `+defaultUserDir.GetEncodedValue()+` + }, + "library": {}, + "locale": "en", + "logging": { + "format": "text", + "level": "info" + }, + "daemon":{ + "port":"50051" + }, + "network":{ + "proxy":"123" + }, + "output": {}, + "sketch": {}, + "updater": {} + }`, string(content)) +} + +func TestMerge(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + ctx := context.Background() + + get := func(key string) string { + resp, err := srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: key}) + if err != nil { + return "" + } + return resp.GetEncodedValue() + } + + // Verify defaults + require.Equal(t, `"50051"`, get("daemon.port")) + require.Equal(t, "", get("foo")) + require.Equal(t, "false", get("sketch.always_export_binaries")) + + bulkSettings := `{"foo": "bar", "daemon":{"port":"420"}, "sketch": {"always_export_binaries": "true"}}` + _, err := srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{EncodedSettings: bulkSettings, SettingsFormat: "json"}) + require.Error(t, err) + + bulkSettings = `{"daemon":{"port":"420"}, "sketch": {"always_export_binaries": "true"}}` + _, err = srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{EncodedSettings: bulkSettings, SettingsFormat: "json"}) + require.Error(t, err) + + bulkSettings = `{"daemon":{"port":"420"}, "sketch": {"always_export_binaries": true}}` + _, err = srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{EncodedSettings: bulkSettings, SettingsFormat: "json"}) + require.NoError(t, err) + + require.Equal(t, `"420"`, get("daemon.port")) + require.Equal(t, ``, get("foo")) + require.Equal(t, "true", get("sketch.always_export_binaries")) + + bulkSettings = `{"daemon": {}, "sketch": {"always_export_binaries": false}}` + _, err = srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{EncodedSettings: bulkSettings, SettingsFormat: "json"}) + require.NoError(t, err) + + require.Equal(t, `"50051"`, get("daemon.port")) + require.Equal(t, "", get("foo")) + require.Equal(t, "false", get("sketch.always_export_binaries")) + + _, err = srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{Key: "daemon.port", EncodedValue: ""}) + require.NoError(t, err) + + require.Equal(t, `"50051"`, get("daemon.port")) + // Verifies other values are not changed + require.Equal(t, "", get("foo")) + require.Equal(t, "false", get("sketch.always_export_binaries")) + +} + +func TestGetValue(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + key := &rpc.SettingsGetValueRequest{Key: "daemon"} + resp, err := srv.SettingsGetValue(context.Background(), key) + require.NoError(t, err) + require.Equal(t, `{"port":"50051"}`, resp.GetEncodedValue()) + + key = &rpc.SettingsGetValueRequest{Key: "daemon.port"} + resp, err = srv.SettingsGetValue(context.Background(), key) + require.NoError(t, err) + require.Equal(t, `"50051"`, resp.GetEncodedValue()) +} + +func TestGetOfSettedValue(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + // Verifies value is not set (try with a key without a default, like "directories.builtin.libraries") + ctx := context.Background() + res, err := srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: "directories.builtin.libraries"}) + require.Nil(t, res) + require.Error(t, err, "Error getting settings value") + + // Set value + _, err = srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{ + Key: "directories.builtin.libraries", + EncodedValue: `"bar"`}) + require.NoError(t, err) + + // Verifies value is correctly returned + res, err = srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: "directories.builtin.libraries"}) + require.NoError(t, err) + require.Equal(t, `"bar"`, res.GetEncodedValue()) +} + +func TestGetValueNotFound(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + key := &rpc.SettingsGetValueRequest{Key: "DOESNTEXIST"} + _, err := srv.SettingsGetValue(context.Background(), key) + require.Error(t, err) +} + +func TestWrite(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + // Writes some settings + val := &rpc.SettingsSetValueRequest{ + Key: "directories.builtin.libraries", + EncodedValue: `"bar"`, + } + _, err := srv.SettingsSetValue(context.Background(), val) + require.NoError(t, err) + + resp, err := srv.ConfigurationSave(context.Background(), &rpc.ConfigurationSaveRequest{ + SettingsFormat: "yaml", + }) + require.NoError(t, err) + + // Verify encoded content + require.YAMLEq(t, ` +board_manager: + additional_urls: + - http://foobar.com + - http://example.com + +daemon: + port: "50051" + +directories: + data: /home/massi/.arduino15 + downloads: /home/massi/.arduino15/staging + builtin: + libraries: bar + +logging: + file: "" + format: text + level: info + +network: + proxy: "123" +`, resp.GetEncodedSettings()) +} + +func TestDelete(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + _, err := srv.SettingsGetValue(context.Background(), &rpc.SettingsGetValueRequest{Key: "network"}) + require.NoError(t, err) + + _, err = srv.SettingsSetValue(context.Background(), &rpc.SettingsSetValueRequest{Key: "network", EncodedValue: ""}) + require.NoError(t, err) + + _, err = srv.SettingsGetValue(context.Background(), &rpc.SettingsGetValueRequest{Key: "network"}) + require.Error(t, err) +} diff --git a/commands/sketch/archive.go b/commands/service_sketch_archive.go similarity index 69% rename from commands/sketch/archive.go rename to commands/service_sketch_archive.go index 583ead6225a..c4cde916321 100644 --- a/commands/sketch/archive.go +++ b/commands/service_sketch_archive.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( "archive/zip" @@ -22,41 +22,39 @@ import ( "path/filepath" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" ) -var tr = i18n.Tr - // ArchiveSketch FIXMEDOC -func ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.ArchiveSketchResponse, error) { +func (s *arduinoCoreServerImpl) ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.ArchiveSketchResponse, error) { // sketchName is the name of the sketch without extension, for example "MySketch" var sketchName string - sketchPath := paths.New(req.SketchPath) + sketchPath := paths.New(req.GetSketchPath()) if sketchPath == nil { sketchPath = paths.New(".") } - s, err := sketch.New(sketchPath) + sk, err := sketch.New(sketchPath) if err != nil { - return nil, &arduino.CantOpenSketchError{Cause: err} + return nil, &cmderrors.CantOpenSketchError{Cause: err} } - sketchPath = s.FullPath - sketchName = s.Name + sketchPath = sk.FullPath + sketchName = sk.Name - archivePath := paths.New(req.ArchivePath) + archivePath := paths.New(req.GetArchivePath()) if archivePath == nil { archivePath = sketchPath.Parent() } archivePath, err = archivePath.Clean().Abs() if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error getting absolute path of sketch archive"), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error getting absolute path of sketch archive"), Cause: err} } // Makes archivePath point to a zip file @@ -66,21 +64,21 @@ func ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.Arc archivePath = paths.New(archivePath.String() + ".zip") } - if !req.Overwrite { + if !req.GetOverwrite() { if archivePath.Exist() { - return nil, &arduino.InvalidArgumentError{Message: tr("Archive already exists")} + return nil, &cmderrors.InvalidArgumentError{Message: i18n.Tr("Archive already exists")} } } filesToZip, err := sketchPath.ReadDirRecursive() if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error reading sketch files"), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error reading sketch files"), Cause: err} } filesToZip.FilterOutDirs() archive, err := archivePath.Create() if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error creating sketch archive"), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error creating sketch archive"), Cause: err} } defer archive.Close() @@ -89,10 +87,10 @@ func ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.Arc for _, f := range filesToZip { - if !req.IncludeBuildDir { + if !req.GetIncludeBuildDir() { filePath, err := sketchPath.Parent().RelTo(f) if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error calculating relative file path"), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error calculating relative file path"), Cause: err} } // Skips build folder @@ -104,7 +102,7 @@ func ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.Arc // We get the parent path since we want the archive to unpack as a folder. // If we don't do this the archive would contain all the sketch files as top level. if err := addFileToSketchArchive(zipWriter, f, sketchPath.Parent()); err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error adding file to sketch archive"), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error adding file to sketch archive"), Cause: err} } } diff --git a/commands/sketch/warn_deprecated.go b/commands/service_sketch_load.go similarity index 56% rename from commands/sketch/warn_deprecated.go rename to commands/service_sketch_load.go index a78f7156973..8360ce7adfd 100644 --- a/commands/sketch/warn_deprecated.go +++ b/commands/service_sketch_load.go @@ -13,24 +13,22 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( - "fmt" + "context" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" ) -// WarnDeprecatedFiles warns the user that a type of sketch files are deprecated -func WarnDeprecatedFiles(sketchPath *paths.Path) string { - // .pde files are still supported but deprecated, this warning urges the user to rename them - if files := sketch.CheckForPdeFiles(sketchPath); len(files) > 0 { - msg := tr("Sketches with .pde extension are deprecated, please rename the following files to .ino:") - for _, f := range files { - msg += fmt.Sprintf("\n - %s", f) - } - return msg +// LoadSketch collects and returns all information about a sketch +func (s *arduinoCoreServerImpl) LoadSketch(ctx context.Context, req *rpc.LoadSketchRequest) (*rpc.LoadSketchResponse, error) { + sk, err := sketch.New(paths.New(req.GetSketchPath())) + if err != nil { + return nil, &cmderrors.CantOpenSketchError{Cause: err} } - return "" + return &rpc.LoadSketchResponse{Sketch: sk.ToRpc()}, nil } diff --git a/commands/sketch/load_test.go b/commands/service_sketch_load_test.go similarity index 78% rename from commands/sketch/load_test.go rename to commands/service_sketch_load_test.go index bfae0e6a959..d7dfcdcf8fa 100644 --- a/commands/sketch/load_test.go +++ b/commands/service_sketch_load_test.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( "context" @@ -24,10 +24,11 @@ import ( ) func TestLoadSketchProfiles(t *testing.T) { - loadResp, err := LoadSketch(context.Background(), &commands.LoadSketchRequest{ + srv := NewArduinoCoreServer() + loadResp, err := srv.LoadSketch(context.Background(), &commands.LoadSketchRequest{ SketchPath: "./testdata/sketch_with_profile", }) require.NoError(t, err) - require.Len(t, loadResp.GetProfiles(), 2) - require.Equal(t, loadResp.GetDefaultProfile().GetName(), "nanorp") + require.Len(t, loadResp.GetSketch().GetProfiles(), 2) + require.Equal(t, loadResp.GetSketch().GetDefaultProfile().GetName(), "nanorp") } diff --git a/commands/sketch/new.go b/commands/service_sketch_new.go similarity index 60% rename from commands/sketch/new.go rename to commands/service_sketch_new.go index b4fe3ab0e82..ca3143e31b9 100644 --- a/commands/sketch/new.go +++ b/commands/service_sketch_new.go @@ -13,16 +13,16 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( "context" "errors" "regexp" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" ) @@ -43,31 +43,31 @@ var invalidNames = []string{"CON", "PRN", "AUX", "NUL", "COM0", "COM1", "COM2", "COM6", "COM7", "COM8", "COM9", "LPT0", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"} // NewSketch creates a new sketch via gRPC -func NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchResponse, error) { +func (s *arduinoCoreServerImpl) NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchResponse, error) { var sketchesDir string - if len(req.SketchDir) > 0 { - sketchesDir = req.SketchDir + if len(req.GetSketchDir()) > 0 { + sketchesDir = req.GetSketchDir() } else { - sketchesDir = configuration.Settings.GetString("directories.User") + sketchesDir = s.settings.GetString("directories.User") } - if err := validateSketchName(req.SketchName); err != nil { + if err := validateSketchName(req.GetSketchName()); err != nil { return nil, err } - sketchDirPath := paths.New(sketchesDir).Join(req.SketchName) + sketchDirPath := paths.New(sketchesDir).Join(req.GetSketchName()) if err := sketchDirPath.MkdirAll(); err != nil { - return nil, &arduino.CantCreateSketchError{Cause: err} + return nil, &cmderrors.CantCreateSketchError{Cause: err} } sketchName := sketchDirPath.Base() sketchMainFilePath := sketchDirPath.Join(sketchName + globals.MainFileValidExtension) - if !req.Overwrite { + if !req.GetOverwrite() { if sketchMainFilePath.Exist() { - return nil, &arduino.CantCreateSketchError{Cause: errors.New(tr(".ino file already exists"))} + return nil, &cmderrors.CantCreateSketchError{Cause: errors.New(i18n.Tr(".ino file already exists"))} } } if err := sketchMainFilePath.WriteFile(emptySketch); err != nil { - return nil, &arduino.CantCreateSketchError{Cause: err} + return nil, &cmderrors.CantCreateSketchError{Cause: err} } return &rpc.NewSketchResponse{MainFile: sketchMainFilePath.String()}, nil @@ -75,20 +75,20 @@ func NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchRe func validateSketchName(name string) error { if name == "" { - return &arduino.CantCreateSketchError{Cause: errors.New(tr("sketch name cannot be empty"))} + return &cmderrors.CantCreateSketchError{Cause: errors.New(i18n.Tr("sketch name cannot be empty"))} } if len(name) > sketchNameMaxLength { - return &arduino.CantCreateSketchError{Cause: errors.New(tr("sketch name too long (%[1]d characters). Maximum allowed length is %[2]d", + return &cmderrors.CantCreateSketchError{Cause: errors.New(i18n.Tr("sketch name too long (%[1]d characters). Maximum allowed length is %[2]d", len(name), sketchNameMaxLength))} } if !sketchNameValidationRegex.MatchString(name) { - return &arduino.CantCreateSketchError{Cause: errors.New(tr(`invalid sketch name "%[1]s": the first character must be alphanumeric or "_", the following ones can also contain "-" and ".". The last one cannot be ".".`, + return &cmderrors.CantCreateSketchError{Cause: errors.New(i18n.Tr(`invalid sketch name "%[1]s": the first character must be alphanumeric or "_", the following ones can also contain "-" and ".". The last one cannot be ".".`, name))} } for _, invalid := range invalidNames { if name == invalid { - return &arduino.CantCreateSketchError{Cause: errors.New(tr(`sketch name cannot be the reserved name "%[1]s"`, invalid))} + return &cmderrors.CantCreateSketchError{Cause: errors.New(i18n.Tr(`sketch name cannot be the reserved name "%[1]s"`, invalid))} } } return nil diff --git a/commands/sketch/new_test.go b/commands/service_sketch_new_test.go similarity index 82% rename from commands/sketch/new_test.go rename to commands/service_sketch_new_test.go index 00ae7856732..8dfb5a8168e 100644 --- a/commands/sketch/new_test.go +++ b/commands/service_sketch_new_test.go @@ -13,14 +13,14 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( "context" "fmt" "testing" - "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/stretchr/testify/require" ) @@ -34,8 +34,10 @@ func Test_SketchNameWrongPattern(t *testing.T) { "||||||||||||||", ",`hack[}attempt{];", } + + srv := NewArduinoCoreServer() for _, name := range invalidNames { - _, err := NewSketch(context.Background(), &commands.NewSketchRequest{ + _, err := srv.NewSketch(context.Background(), &rpc.NewSketchRequest{ SketchName: name, SketchDir: t.TempDir(), }) @@ -46,9 +48,9 @@ func Test_SketchNameWrongPattern(t *testing.T) { } func Test_SketchNameEmpty(t *testing.T) { - emptyName := "" - _, err := NewSketch(context.Background(), &commands.NewSketchRequest{ - SketchName: emptyName, + srv := NewArduinoCoreServer() + _, err := srv.NewSketch(context.Background(), &rpc.NewSketchRequest{ + SketchName: "", SketchDir: t.TempDir(), }) @@ -60,7 +62,8 @@ func Test_SketchNameTooLong(t *testing.T) { for i := range tooLongName { tooLongName[i] = 'a' } - _, err := NewSketch(context.Background(), &commands.NewSketchRequest{ + srv := NewArduinoCoreServer() + _, err := srv.NewSketch(context.Background(), &rpc.NewSketchRequest{ SketchName: string(tooLongName), SketchDir: t.TempDir(), }) @@ -83,8 +86,9 @@ func Test_SketchNameOk(t *testing.T) { "_hello_world", string(lengthLimitName), } + srv := NewArduinoCoreServer() for _, name := range validNames { - _, err := NewSketch(context.Background(), &commands.NewSketchRequest{ + _, err := srv.NewSketch(context.Background(), &rpc.NewSketchRequest{ SketchName: name, SketchDir: t.TempDir(), }) @@ -95,8 +99,9 @@ func Test_SketchNameOk(t *testing.T) { func Test_SketchNameReserved(t *testing.T) { invalidNames := []string{"CON", "PRN", "AUX", "NUL", "COM0", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT0", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"} + srv := NewArduinoCoreServer() for _, name := range invalidNames { - _, err := NewSketch(context.Background(), &commands.NewSketchRequest{ + _, err := srv.NewSketch(context.Background(), &rpc.NewSketchRequest{ SketchName: name, SketchDir: t.TempDir(), }) diff --git a/commands/daemon/stream.go b/commands/service_stream_utility.go similarity index 99% rename from commands/daemon/stream.go rename to commands/service_stream_utility.go index aa5e70fb770..4b285c443fc 100644 --- a/commands/daemon/stream.go +++ b/commands/service_stream_utility.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package daemon +package commands import ( "errors" diff --git a/commands/upload/upload.go b/commands/service_upload.go similarity index 75% rename from commands/upload/upload.go rename to commands/service_upload.go index 56815f983a6..330decc3c5e 100644 --- a/commands/upload/upload.go +++ b/commands/service_upload.go @@ -13,66 +13,62 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package upload +package commands import ( "context" + "errors" "fmt" "io" "path/filepath" "strings" "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/serialutils" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" + serialutils "github.com/arduino/go-serial-utils" + discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2" "github.com/sirupsen/logrus" ) -var tr = i18n.Tr - // SupportedUserFields returns a SupportedUserFieldsResponse containing all the UserFields supported // by the upload tools needed by the board using the protocol specified in SupportedUserFieldsRequest. -func SupportedUserFields(ctx context.Context, req *rpc.SupportedUserFieldsRequest) (*rpc.SupportedUserFieldsResponse, error) { - if req.Protocol == "" { - return nil, &arduino.MissingPortProtocolError{} +func (s *arduinoCoreServerImpl) SupportedUserFields(ctx context.Context, req *rpc.SupportedUserFieldsRequest) (*rpc.SupportedUserFieldsResponse, error) { + if req.GetProtocol() == "" { + return nil, &cmderrors.MissingPortProtocolError{} } - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - defer release() - - if pme == nil { - return nil, &arduino.InvalidInstanceError{} + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } + defer release() fqbn, err := cores.ParseFQBN(req.GetFqbn()) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } _, platformRelease, _, boardProperties, _, err := pme.ResolveFQBN(fqbn) if platformRelease == nil { - return nil, &arduino.PlatformNotFoundError{ + return nil, &cmderrors.PlatformNotFoundError{ Platform: fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch), Cause: err, } } else if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} + return nil, &cmderrors.UnknownFQBNError{Cause: err} } - toolID, err := getToolID(boardProperties, "upload", req.Protocol) + toolID, err := getToolID(boardProperties, "upload", req.GetProtocol()) if err != nil { return nil, err } @@ -98,7 +94,7 @@ func getToolID(props *properties.Map, action, protocol string) (string, error) { return t, nil } - return "", &arduino.MissingPlatformPropertyError{Property: toolProperty} + return "", &cmderrors.MissingPlatformPropertyError{Property: toolProperty} } // getUserFields return all user fields supported by the tools specified. @@ -125,8 +121,33 @@ func getUserFields(toolID string, platformRelease *cores.PlatformRelease) []*rpc return userFields } -// Upload FIXMEDOC -func Upload(ctx context.Context, req *rpc.UploadRequest, outStream io.Writer, errStream io.Writer) (*rpc.UploadResult, error) { +// UploadToServerStreams return a server stream that forwards the output and error streams to the provided writers. +// It also returns a function that can be used to retrieve the result of the upload. +func UploadToServerStreams(ctx context.Context, outStream io.Writer, errStream io.Writer) (rpc.ArduinoCoreService_UploadServer, func() *rpc.UploadResult) { + var result *rpc.UploadResult + stream := streamResponseToCallback(ctx, func(resp *rpc.UploadResponse) error { + if errData := resp.GetErrStream(); len(errData) > 0 { + _, err := errStream.Write(errData) + return err + } + if outData := resp.GetOutStream(); len(outData) > 0 { + _, err := outStream.Write(outData) + return err + } + if res := resp.GetResult(); res != nil { + result = res + } + return nil + }) + return stream, func() *rpc.UploadResult { + return result + } +} + +// Upload performs the upload of a sketch to a board. +func (s *arduinoCoreServerImpl) Upload(req *rpc.UploadRequest, stream rpc.ArduinoCoreService_UploadServer) error { + syncSend := NewSynchronizedSend(stream.Send) + logrus.Tracef("Upload %s on %s started", req.GetSketchPath(), req.GetFqbn()) // TODO: make a generic function to extract sketch from request @@ -134,12 +155,12 @@ func Upload(ctx context.Context, req *rpc.UploadRequest, outStream io.Writer, er sketchPath := paths.New(req.GetSketchPath()) sk, err := sketch.New(sketchPath) if err != nil && req.GetImportDir() == "" && req.GetImportFile() == "" { - return nil, &arduino.CantOpenSketchError{Cause: err} + return &cmderrors.CantOpenSketchError{Cause: err} } - pme, pmeRelease := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} + pme, pmeRelease, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err } defer pmeRelease() @@ -148,14 +169,35 @@ func Upload(ctx context.Context, req *rpc.UploadRequest, outStream io.Writer, er fqbn = pme.GetProfile().FQBN } + programmer := req.GetProgrammer() + if programmer == "" && pme.GetProfile() != nil { + programmer = pme.GetProfile().Programmer + } + if programmer == "" && sk != nil { + programmer = sk.GetDefaultProgrammer() + } + + outStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.UploadResponse{ + Message: &rpc.UploadResponse_OutStream{OutStream: data}, + }) + }) + defer outStream.Close() + errStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.UploadResponse{ + Message: &rpc.UploadResponse_ErrStream{ErrStream: data}, + }) + }) + defer errStream.Close() updatedPort, err := runProgramAction( + stream.Context(), pme, sk, req.GetImportFile(), req.GetImportDir(), fqbn, req.GetPort(), - req.GetProgrammer(), + programmer, req.GetVerbose(), req.GetVerify(), false, // burnBootloader @@ -165,22 +207,45 @@ func Upload(ctx context.Context, req *rpc.UploadRequest, outStream io.Writer, er req.GetUserFields(), ) if err != nil { - return nil, err + return err } - - return &rpc.UploadResult{ - UpdatedUploadPort: updatedPort, - }, nil + return syncSend.Send(&rpc.UploadResponse{ + Message: &rpc.UploadResponse_Result{ + Result: &rpc.UploadResult{ + UpdatedUploadPort: updatedPort, + }, + }, + }) } -// UsingProgrammer FIXMEDOC -func UsingProgrammer(ctx context.Context, req *rpc.UploadUsingProgrammerRequest, outStream io.Writer, errStream io.Writer) error { +// UploadUsingProgrammer FIXMEDOC +func (s *arduinoCoreServerImpl) UploadUsingProgrammer(req *rpc.UploadUsingProgrammerRequest, stream rpc.ArduinoCoreService_UploadUsingProgrammerServer) error { + syncSend := NewSynchronizedSend(stream.Send) + streamAdapter := streamResponseToCallback(stream.Context(), func(resp *rpc.UploadResponse) error { + if errData := resp.GetErrStream(); len(errData) > 0 { + syncSend.Send(&rpc.UploadUsingProgrammerResponse{ + Message: &rpc.UploadUsingProgrammerResponse_ErrStream{ + ErrStream: errData, + }, + }) + } + if outData := resp.GetOutStream(); len(outData) > 0 { + syncSend.Send(&rpc.UploadUsingProgrammerResponse{ + Message: &rpc.UploadUsingProgrammerResponse_OutStream{ + OutStream: outData, + }, + }) + } + // resp.GetResult() is ignored + return nil + }) + logrus.Tracef("Upload using programmer %s on %s started", req.GetSketchPath(), req.GetFqbn()) if req.GetProgrammer() == "" { - return &arduino.MissingProgrammerError{} + return &cmderrors.MissingProgrammerError{} } - _, err := Upload(ctx, &rpc.UploadRequest{ + return s.Upload(&rpc.UploadRequest{ Instance: req.GetInstance(), SketchPath: req.GetSketchPath(), ImportFile: req.GetImportFile(), @@ -191,11 +256,10 @@ func UsingProgrammer(ctx context.Context, req *rpc.UploadUsingProgrammerRequest, Verbose: req.GetVerbose(), Verify: req.GetVerify(), UserFields: req.GetUserFields(), - }, outStream, errStream) - return err + }, streamAdapter) } -func runProgramAction(pme *packagemanager.Explorer, +func runProgramAction(ctx context.Context, pme *packagemanager.Explorer, sk *sketch.Sketch, importFile, importDir, fqbnIn string, userPort *rpc.Port, programmerID string, @@ -203,7 +267,7 @@ func runProgramAction(pme *packagemanager.Explorer, outStream, errStream io.Writer, dryRun bool, userFields map[string]string, ) (*rpc.Port, error) { - port := discovery.PortFromRPCPort(userPort) + port := rpc.DiscoveryPortFromRPCPort(userPort) if port == nil || (port.Address == "" && port.Protocol == "") { // For no-port uploads use "default" protocol port = &discovery.Port{Protocol: "default"} @@ -211,24 +275,24 @@ func runProgramAction(pme *packagemanager.Explorer, logrus.WithField("port", port).Tracef("Upload port") if burnBootloader && programmerID == "" { - return nil, &arduino.MissingProgrammerError{} + return nil, &cmderrors.MissingProgrammerError{} } fqbn, err := cores.ParseFQBN(fqbnIn) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } logrus.WithField("fqbn", fqbn).Tracef("Detected FQBN") // Find target board and board properties _, boardPlatform, board, boardProperties, buildPlatform, err := pme.ResolveFQBN(fqbn) if boardPlatform == nil { - return nil, &arduino.PlatformNotFoundError{ + return nil, &cmderrors.PlatformNotFoundError{ Platform: fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch), Cause: err, } } else if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} + return nil, &cmderrors.UnknownFQBNError{Cause: err} } logrus. WithField("boardPlatform", boardPlatform). @@ -245,7 +309,7 @@ func runProgramAction(pme *packagemanager.Explorer, programmer = buildPlatform.Programmers[programmerID] } if programmer == nil { - return nil, &arduino.ProgrammerNotFoundError{Programmer: programmerID} + return nil, &cmderrors.ProgrammerNotFoundError{Programmer: programmerID} } } @@ -281,7 +345,7 @@ func runProgramAction(pme *packagemanager.Explorer, Trace("Upload tool") if split := strings.Split(uploadToolID, ":"); len(split) > 2 { - return nil, &arduino.InvalidPlatformPropertyError{ + return nil, &cmderrors.InvalidPlatformPropertyError{ Property: fmt.Sprintf("%s.tool.%s", action, port.Protocol), // TODO: Can be done better, maybe inline getToolID(...) Value: uploadToolID} } else if len(split) == 2 { @@ -290,12 +354,12 @@ func runProgramAction(pme *packagemanager.Explorer, PlatformArchitecture: boardPlatform.Platform.Architecture, }) if p == nil { - return nil, &arduino.PlatformNotFoundError{Platform: split[0] + ":" + boardPlatform.Platform.Architecture} + return nil, &cmderrors.PlatformNotFoundError{Platform: split[0] + ":" + boardPlatform.Platform.Architecture} } uploadToolID = split[1] uploadToolPlatform = pme.GetInstalledPlatformRelease(p) if uploadToolPlatform == nil { - return nil, &arduino.PlatformNotFoundError{Platform: split[0] + ":" + boardPlatform.Platform.Architecture} + return nil, &cmderrors.PlatformNotFoundError{Platform: split[0] + ":" + boardPlatform.Platform.Architecture} } } @@ -322,7 +386,7 @@ func runProgramAction(pme *packagemanager.Explorer, } if !uploadProperties.ContainsKey("upload.protocol") && programmer == nil { - return nil, &arduino.ProgrammerRequiredForUploadError{} + return nil, &cmderrors.ProgrammerRequiredForUploadError{} } // Set properties for verbose upload @@ -368,22 +432,22 @@ func runProgramAction(pme *packagemanager.Explorer, } if !burnBootloader { - importPath, sketchName, err := determineBuildPathAndSketchName(importFile, importDir, sk, fqbn) + importPath, sketchName, err := determineBuildPathAndSketchName(importFile, importDir, sk) if err != nil { - return nil, &arduino.NotFoundError{Message: tr("Error finding build artifacts"), Cause: err} + return nil, &cmderrors.NotFoundError{Message: i18n.Tr("Error finding build artifacts"), Cause: err} } if !importPath.Exist() { - return nil, &arduino.NotFoundError{Message: tr("Compiled sketch not found in %s", importPath)} + return nil, &cmderrors.NotFoundError{Message: i18n.Tr("Compiled sketch not found in %s", importPath)} } if !importPath.IsDir() { - return nil, &arduino.NotFoundError{Message: tr("Expected compiled sketch in directory %s, but is a file instead", importPath)} + return nil, &cmderrors.NotFoundError{Message: i18n.Tr("Expected compiled sketch in directory %s, but is a file instead", importPath)} } uploadProperties.SetPath("build.path", importPath) uploadProperties.Set("build.project_name", sketchName) } // This context is kept alive for the entire duration of the upload - uploadCtx, uploadCompleted := context.WithCancel(context.Background()) + uploadCtx, uploadCompleted := context.WithCancel(ctx) defer uploadCompleted() // Start the upload port change detector. @@ -429,20 +493,20 @@ func runProgramAction(pme *packagemanager.Explorer, // if touch is requested but port is not specified, print a warning if touch && portToTouch == "" { - outStream.Write([]byte(fmt.Sprintln(tr("Skipping 1200-bps touch reset: no serial port selected!")))) + outStream.Write([]byte(fmt.Sprintln(i18n.Tr("Skipping 1200-bps touch reset: no serial port selected!")))) } cb := &serialutils.ResetProgressCallbacks{ TouchingPort: func(portAddress string) { logrus.WithField("phase", "board reset").Infof("Performing 1200-bps touch reset on serial port %s", portAddress) if verbose { - outStream.Write([]byte(fmt.Sprintln(tr("Performing 1200-bps touch reset on serial port %s", portAddress)))) + outStream.Write([]byte(fmt.Sprintln(i18n.Tr("Performing 1200-bps touch reset on serial port %s", portAddress)))) } }, WaitingForNewSerial: func() { logrus.WithField("phase", "board reset").Info("Waiting for upload port...") if verbose { - outStream.Write([]byte(fmt.Sprintln(tr("Waiting for upload port...")))) + outStream.Write([]byte(fmt.Sprintln(i18n.Tr("Waiting for upload port...")))) } }, BootloaderPortFound: func(portAddress string) { @@ -453,9 +517,9 @@ func runProgramAction(pme *packagemanager.Explorer, } if verbose { if portAddress != "" { - outStream.Write([]byte(fmt.Sprintln(tr("Upload port found on %s", portAddress)))) + outStream.Write([]byte(fmt.Sprintln(i18n.Tr("Upload port found on %s", portAddress)))) } else { - outStream.Write([]byte(fmt.Sprintln(tr("No upload port found, using %s as fallback", actualPort.Address)))) + outStream.Write([]byte(fmt.Sprintln(i18n.Tr("No upload port found, using %s as fallback", actualPort.Address)))) } } }, @@ -464,8 +528,8 @@ func runProgramAction(pme *packagemanager.Explorer, }, } - if newPortAddress, err := serialutils.Reset(portToTouch, wait, cb, dryRun); err != nil { - errStream.Write([]byte(fmt.Sprintln(tr("Cannot perform port reset: %s", err)))) + if newPortAddress, err := serialutils.Reset(portToTouch, wait, dryRun, nil, cb); err != nil { + errStream.Write([]byte(fmt.Sprintln(i18n.Tr("Cannot perform port reset: %s", err)))) } else { if newPortAddress != "" { actualPort.Address = newPortAddress @@ -499,18 +563,18 @@ func runProgramAction(pme *packagemanager.Explorer, toolEnv := pme.GetEnvVarsForSpawnedProcess() if burnBootloader { if err := runTool("erase.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { - return nil, &arduino.FailedUploadError{Message: tr("Failed chip erase"), Cause: err} + return nil, &cmderrors.FailedUploadError{Message: i18n.Tr("Failed chip erase"), Cause: err} } if err := runTool("bootloader.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { - return nil, &arduino.FailedUploadError{Message: tr("Failed to burn bootloader"), Cause: err} + return nil, &cmderrors.FailedUploadError{Message: i18n.Tr("Failed to burn bootloader"), Cause: err} } } else if programmer != nil { if err := runTool("program.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { - return nil, &arduino.FailedUploadError{Message: tr("Failed programming"), Cause: err} + return nil, &cmderrors.FailedUploadError{Message: i18n.Tr("Failed programming"), Cause: err} } } else { if err := runTool("upload.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { - return nil, &arduino.FailedUploadError{Message: tr("Failed uploading"), Cause: err} + return nil, &cmderrors.FailedUploadError{Message: i18n.Tr("Failed uploading"), Cause: err} } } @@ -522,7 +586,7 @@ func runProgramAction(pme *packagemanager.Explorer, // If the algorithms can not detect the new port, fallback to the user-provided port. return userPort, nil } - return updatedPort.ToRPC(), nil + return rpc.DiscoveryPortToRPC(updatedPort), nil } func detectUploadPort( @@ -630,18 +694,18 @@ func detectUploadPort( func runTool(recipeID string, props *properties.Map, outStream, errStream io.Writer, verbose bool, dryRun bool, toolEnv []string) error { recipe, ok := props.GetOk(recipeID) if !ok { - return fmt.Errorf(tr("recipe not found '%s'"), recipeID) + return errors.New(i18n.Tr("recipe not found '%s'", recipeID)) } if strings.TrimSpace(recipe) == "" { return nil // Nothing to run } if props.IsPropertyMissingInExpandPropsInString("serial.port", recipe) || props.IsPropertyMissingInExpandPropsInString("serial.port.file", recipe) { - return fmt.Errorf(tr("no upload port provided")) + return errors.New(i18n.Tr("no upload port provided")) } cmdLine := props.ExpandPropsInString(recipe) cmdArgs, err := properties.SplitQuotedString(cmdLine, `"'`, false) if err != nil { - return fmt.Errorf(tr("invalid recipe '%[1]s': %[2]s"), recipe, err) + return errors.New(i18n.Tr("invalid recipe '%[1]s': %[2]s", recipe, err)) } // Run Tool @@ -652,26 +716,26 @@ func runTool(recipeID string, props *properties.Map, outStream, errStream io.Wri if dryRun { return nil } - cmd, err := executils.NewProcess(toolEnv, cmdArgs...) + cmd, err := paths.NewProcess(toolEnv, cmdArgs...) if err != nil { - return fmt.Errorf(tr("cannot execute upload tool: %s"), err) + return errors.New(i18n.Tr("cannot execute upload tool: %s", err)) } cmd.RedirectStdoutTo(outStream) cmd.RedirectStderrTo(errStream) if err := cmd.Start(); err != nil { - return fmt.Errorf(tr("cannot execute upload tool: %s"), err) + return errors.New(i18n.Tr("cannot execute upload tool: %s", err)) } if err := cmd.Wait(); err != nil { - return fmt.Errorf(tr("uploading error: %s"), err) + return errors.New(i18n.Tr("uploading error: %s", err)) } return nil } -func determineBuildPathAndSketchName(importFile, importDir string, sk *sketch.Sketch, fqbn *cores.FQBN) (*paths.Path, string, error) { +func determineBuildPathAndSketchName(importFile, importDir string, sk *sketch.Sketch) (*paths.Path, string, error) { // In general, compiling a sketch will produce a set of files that are // named as the sketch but have different extensions, for example Sketch.ino // may produce: Sketch.ino.bin; Sketch.ino.hex; Sketch.ino.zip; etc... @@ -687,7 +751,7 @@ func determineBuildPathAndSketchName(importFile, importDir string, sk *sketch.Sk // Case 1: importFile flag has been specified if importFile != "" { if importDir != "" { - return nil, "", fmt.Errorf(tr("%s and %s cannot be used together", "importFile", "importDir")) + return nil, "", errors.New(i18n.Tr("%s and %s cannot be used together", "importFile", "importDir")) } // We have a path like "path/to/my/build/SketchName.ino.bin". We are going to @@ -697,7 +761,7 @@ func determineBuildPathAndSketchName(importFile, importDir string, sk *sketch.Sk importFilePath := paths.New(importFile) if !importFilePath.Exist() { - return nil, "", fmt.Errorf(tr("binary file not found in %s"), importFilePath) + return nil, "", errors.New(i18n.Tr("binary file not found in %s", importFilePath)) } return importFilePath.Parent(), strings.TrimSuffix(importFilePath.Base(), importFilePath.Ext()), nil } @@ -712,14 +776,14 @@ func determineBuildPathAndSketchName(importFile, importDir string, sk *sketch.Sk buildPath := paths.New(importDir) sketchName, err := detectSketchNameFromBuildPath(buildPath) if err != nil { - return nil, "", errors.Errorf(tr("autodetect build artifact: %s"), err) + return nil, "", fmt.Errorf("%s: %w", i18n.Tr("looking for build artifacts"), err) } return buildPath, sketchName, nil } // Case 3: nothing given... if sk == nil { - return nil, "", fmt.Errorf(tr("no sketch or build directory/file specified")) + return nil, "", errors.New(i18n.Tr("no sketch or build directory/file specified")) } // Case 4: only sketch specified. In this case we use the generated build path @@ -764,12 +828,12 @@ func detectSketchNameFromBuildPath(buildPath *paths.Path) (string, error) { } if candidateName != name { - return "", errors.Errorf(tr("multiple build artifacts found: '%[1]s' and '%[2]s'"), candidateFile, file) + return "", errors.New(i18n.Tr("multiple build artifacts found: '%[1]s' and '%[2]s'", candidateFile, file)) } } if candidateName == "" { - return "", errors.New(tr("could not find a valid build artifact")) + return "", errors.New(i18n.Tr("could not find a valid build artifact")) } return candidateName, nil } diff --git a/commands/service_upload_burnbootloader.go b/commands/service_upload_burnbootloader.go new file mode 100644 index 00000000000..448618b164c --- /dev/null +++ b/commands/service_upload_burnbootloader.go @@ -0,0 +1,95 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "io" + + "github.com/arduino/arduino-cli/commands/internal/instances" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" +) + +// BurnBootloaderToServerStreams return a server stream that forwards the output and error streams to the provided io.Writers +func BurnBootloaderToServerStreams(ctx context.Context, outStrem, errStream io.Writer) rpc.ArduinoCoreService_BurnBootloaderServer { + stream := streamResponseToCallback(ctx, func(resp *rpc.BurnBootloaderResponse) error { + if outData := resp.GetOutStream(); len(outData) > 0 { + _, err := outStrem.Write(outData) + return err + } + if errData := resp.GetErrStream(); len(errData) > 0 { + _, err := errStream.Write(errData) + return err + } + return nil + }) + return stream +} + +// BurnBootloader performs the burn bootloader action +func (s *arduinoCoreServerImpl) BurnBootloader(req *rpc.BurnBootloaderRequest, stream rpc.ArduinoCoreService_BurnBootloaderServer) error { + syncSend := NewSynchronizedSend(stream.Send) + outStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.BurnBootloaderResponse{ + Message: &rpc.BurnBootloaderResponse_OutStream{ + OutStream: data, + }, + }) + }) + defer outStream.Close() + errStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.BurnBootloaderResponse{ + Message: &rpc.BurnBootloaderResponse_ErrStream{ + ErrStream: data, + }, + }) + }) + defer errStream.Close() + + logrus. + WithField("fqbn", req.GetFqbn()). + WithField("port", req.GetPort()). + WithField("programmer", req.GetProgrammer()). + Trace("BurnBootloader started", req.GetFqbn()) + + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + defer release() + + if _, err := runProgramAction( + stream.Context(), + pme, + nil, // sketch + "", // importFile + "", // importDir + req.GetFqbn(), + req.GetPort(), + req.GetProgrammer(), + req.GetVerbose(), + req.GetVerify(), + true, // burnBootloader + outStream, + errStream, + req.GetDryRun(), + map[string]string{}, // User fields + ); err != nil { + return err + } + return syncSend.Send(&rpc.BurnBootloaderResponse{}) +} diff --git a/commands/upload/programmers_list.go b/commands/service_upload_list_programmers.go similarity index 75% rename from commands/upload/programmers_list.go rename to commands/service_upload_list_programmers.go index b7290e68f5f..f05142cf147 100644 --- a/commands/upload/programmers_list.go +++ b/commands/service_upload_list_programmers.go @@ -13,38 +13,38 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package upload +package commands import ( "context" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) // ListProgrammersAvailableForUpload FIXMEDOC -func ListProgrammersAvailableForUpload(ctx context.Context, req *rpc.ListProgrammersAvailableForUploadRequest) (*rpc.ListProgrammersAvailableForUploadResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) ListProgrammersAvailableForUpload(ctx context.Context, req *rpc.ListProgrammersAvailableForUploadRequest) (*rpc.ListProgrammersAvailableForUploadResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() fqbnIn := req.GetFqbn() if fqbnIn == "" { - return nil, &arduino.MissingFQBNError{} + return nil, &cmderrors.MissingFQBNError{} } fqbn, err := cores.ParseFQBN(fqbnIn) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } // Find target platforms _, platform, _, _, refPlatform, err := pme.ResolveFQBN(fqbn) if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} + return nil, &cmderrors.UnknownFQBNError{Cause: err} } result := []*rpc.Programmer{} diff --git a/commands/upload/upload_test.go b/commands/service_upload_test.go similarity index 76% rename from commands/upload/upload_test.go rename to commands/service_upload_test.go index e1f87cd9832..d350b5a6470 100644 --- a/commands/upload/upload_test.go +++ b/commands/service_upload_test.go @@ -13,42 +13,44 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package upload +package commands import ( "bytes" + "context" "fmt" "strings" "testing" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/sketch" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" + "go.bug.st/downloader/v2" ) func TestDetectSketchNameFromBuildPath(t *testing.T) { - sk1, err1 := detectSketchNameFromBuildPath(paths.New("testdata/build_path_1")) + sk1, err1 := detectSketchNameFromBuildPath(paths.New("testdata/upload/build_path_1")) require.NoError(t, err1) require.Equal(t, "sketch.ino", sk1) - sk2, err2 := detectSketchNameFromBuildPath(paths.New("testdata/build_path_2")) + sk2, err2 := detectSketchNameFromBuildPath(paths.New("testdata/upload/build_path_2")) require.NoError(t, err2) require.Equal(t, "Blink.ino", sk2) - sk3, err3 := detectSketchNameFromBuildPath(paths.New("testdata/build_path_3")) + sk3, err3 := detectSketchNameFromBuildPath(paths.New("testdata/upload/build_path_3")) require.Error(t, err3) require.Equal(t, "", sk3) - sk4, err4 := detectSketchNameFromBuildPath(paths.New("testdata/build_path_4")) + sk4, err4 := detectSketchNameFromBuildPath(paths.New("testdata/upload/build_path_4")) require.Error(t, err4) require.Equal(t, "", sk4) - sk5, err5 := detectSketchNameFromBuildPath(paths.New("testdata/build_path_invalid")) + sk5, err5 := detectSketchNameFromBuildPath(paths.New("testdata/upload/build_path_invalid")) require.Error(t, err5) require.Equal(t, "", sk5) } @@ -63,7 +65,7 @@ func TestDetermineBuildPathAndSketchName(t *testing.T) { resSketchName string } - blonk, err := sketch.New(paths.New("testdata/Blonk")) + blonk, err := sketch.New(paths.New("testdata/upload/Blonk")) require.NoError(t, err) fqbn, err := cores.ParseFQBN("arduino:samd:mkr1000") @@ -73,43 +75,43 @@ func TestDetermineBuildPathAndSketchName(t *testing.T) { // 00: error: no data passed in {"", "", nil, nil, "", ""}, // 01: use importFile to detect build.path and project_name - {"testdata/build_path_2/Blink.ino.hex", "", nil, nil, "testdata/build_path_2", "Blink.ino"}, + {"testdata/upload/build_path_2/Blink.ino.hex", "", nil, nil, "testdata/upload/build_path_2", "Blink.ino"}, // 02: use importPath as build.path and project_name - {"", "testdata/build_path_2", nil, nil, "testdata/build_path_2", "Blink.ino"}, + {"", "testdata/upload/build_path_2", nil, nil, "testdata/upload/build_path_2", "Blink.ino"}, // 03: error: used both importPath and importFile - {"testdata/build_path_2/Blink.ino.hex", "testdata/build_path_2", nil, nil, "", ""}, + {"testdata/upload/build_path_2/Blink.ino.hex", "testdata/upload/build_path_2", nil, nil, "", ""}, // 04: only sketch without FQBN {"", "", blonk, nil, blonk.DefaultBuildPath().String(), "Blonk.ino"}, // 05: use importFile to detect build.path and project_name, sketch is ignored. - {"testdata/build_path_2/Blink.ino.hex", "", blonk, nil, "testdata/build_path_2", "Blink.ino"}, + {"testdata/upload/build_path_2/Blink.ino.hex", "", blonk, nil, "testdata/upload/build_path_2", "Blink.ino"}, // 06: use importPath as build.path and Blink as project name, ignore the sketch Blonk - {"", "testdata/build_path_2", blonk, nil, "testdata/build_path_2", "Blink.ino"}, + {"", "testdata/upload/build_path_2", blonk, nil, "testdata/upload/build_path_2", "Blink.ino"}, // 07: error: used both importPath and importFile - {"testdata/build_path_2/Blink.ino.hex", "testdata/build_path_2", blonk, nil, "", ""}, + {"testdata/upload/build_path_2/Blink.ino.hex", "testdata/upload/build_path_2", blonk, nil, "", ""}, // 08: error: no data passed in {"", "", nil, fqbn, "", ""}, // 09: use importFile to detect build.path and project_name, fqbn ignored - {"testdata/build_path_2/Blink.ino.hex", "", nil, fqbn, "testdata/build_path_2", "Blink.ino"}, + {"testdata/upload/build_path_2/Blink.ino.hex", "", nil, fqbn, "testdata/upload/build_path_2", "Blink.ino"}, // 10: use importPath as build.path and project_name, fqbn ignored - {"", "testdata/build_path_2", nil, fqbn, "testdata/build_path_2", "Blink.ino"}, + {"", "testdata/upload/build_path_2", nil, fqbn, "testdata/upload/build_path_2", "Blink.ino"}, // 11: error: used both importPath and importFile - {"testdata/build_path_2/Blink.ino.hex", "testdata/build_path_2", nil, fqbn, "", ""}, + {"testdata/upload/build_path_2/Blink.ino.hex", "testdata/upload/build_path_2", nil, fqbn, "", ""}, // 12: use sketch to determine project name and sketch+fqbn to determine build path {"", "", blonk, fqbn, blonk.DefaultBuildPath().String(), "Blonk.ino"}, // 13: use importFile to detect build.path and project_name, sketch+fqbn is ignored. - {"testdata/build_path_2/Blink.ino.hex", "", blonk, fqbn, "testdata/build_path_2", "Blink.ino"}, + {"testdata/upload/build_path_2/Blink.ino.hex", "", blonk, fqbn, "testdata/upload/build_path_2", "Blink.ino"}, // 14: use importPath as build.path and Blink as project name, ignore the sketch Blonk, ignore fqbn - {"", "testdata/build_path_2", blonk, fqbn, "testdata/build_path_2", "Blink.ino"}, + {"", "testdata/upload/build_path_2", blonk, fqbn, "testdata/upload/build_path_2", "Blink.ino"}, // 15: error: used both importPath and importFile - {"testdata/build_path_2/Blink.ino.hex", "testdata/build_path_2", blonk, fqbn, "", ""}, + {"testdata/upload/build_path_2/Blink.ino.hex", "testdata/upload/build_path_2", blonk, fqbn, "", ""}, // 16: importPath containing multiple firmwares, but one has the same name as the containing folder - {"", "testdata/firmware", nil, fqbn, "testdata/firmware", "firmware.ino"}, + {"", "testdata/upload/firmware", nil, fqbn, "testdata/upload/firmware", "firmware.ino"}, // 17: importFile among multiple firmwares - {"testdata/firmware/another_firmware.ino.bin", "", nil, fqbn, "testdata/firmware", "another_firmware.ino"}, + {"testdata/upload/firmware/another_firmware.ino.bin", "", nil, fqbn, "testdata/upload/firmware", "another_firmware.ino"}, } for i, test := range tests { t.Run(fmt.Sprintf("SubTest%02d", i), func(t *testing.T) { - buildPath, sketchName, err := determineBuildPathAndSketchName(test.importFile, test.importDir, test.sketch, test.fqbn) + buildPath, sketchName, err := determineBuildPathAndSketchName(test.importFile, test.importDir, test.sketch) if test.resBuildPath == "" { require.Error(t, err) require.Nil(t, buildPath) @@ -127,10 +129,10 @@ func TestDetermineBuildPathAndSketchName(t *testing.T) { } func TestUploadPropertiesComposition(t *testing.T) { - pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "test") - errs := pmb.LoadHardwareFromDirectory(paths.New("testdata", "hardware")) + pmb := packagemanager.NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) + errs := pmb.LoadHardwareFromDirectory(paths.New("testdata", "upload", "hardware")) require.Len(t, errs, 0) - buildPath1 := paths.New("testdata", "build_path_1") + buildPath1 := paths.New("testdata", "upload", "build_path_1") logrus.SetLevel(logrus.TraceLevel) type test struct { importDir *paths.Path @@ -149,32 +151,32 @@ func TestUploadPropertiesComposition(t *testing.T) { tests := []test{ // 0: classic upload, requires port - {buildPath1, "alice:avr:board1", "port", "serial", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol port -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board1", "port", "serial", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol port -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, {buildPath1, "alice:avr:board1", "", "", "", false, "FAIL", ""}, // 2: classic upload, no port - {buildPath1, "alice:avr:board2", "port", "serial", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, - {buildPath1, "alice:avr:board2", "", "", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board2", "port", "serial", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board2", "", "", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, // 4: upload with programmer, requires port - {buildPath1, "alice:avr:board1", "port", "serial", "progr1", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ progprotocol port -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board1", "port", "serial", "progr1", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ progprotocol port -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, {buildPath1, "alice:avr:board1", "", "", "progr1", false, "FAIL", ""}, // 6: upload with programmer, no port - {buildPath1, "alice:avr:board1", "port", "serial", "progr2", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog2protocol -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, - {buildPath1, "alice:avr:board1", "", "", "progr2", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog2protocol -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board1", "port", "serial", "progr2", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog2protocol -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board1", "", "", "progr2", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog2protocol -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, // 8: upload with programmer, require port through extra params - {buildPath1, "alice:avr:board1", "port", "serial", "progr3", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog3protocol port -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board1", "port", "serial", "progr3", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog3protocol port -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, {buildPath1, "alice:avr:board1", "", "", "progr3", false, "FAIL", ""}, // 10: burn bootloader, require port {buildPath1, "alice:avr:board1", "port", "serial", "", true, "FAIL", ""}, // requires programmer {buildPath1, "alice:avr:board1", "port", "serial", "progr1", true, "ERASE conf-board1 conf-general conf-erase $$VERBOSE-VERIFY$$ genprog1protocol port -bspeed\n", - "BURN conf-board1 conf-general conf-bootloader $$VERBOSE-VERIFY$$ genprog1protocol port -bspeed -F0xFF " + cwd + "/testdata/hardware/alice/avr/bootloaders/niceboot/niceboot.hex\n"}, + "BURN conf-board1 conf-general conf-bootloader $$VERBOSE-VERIFY$$ genprog1protocol port -bspeed -F0xFF " + cwd + "/testdata/upload/hardware/alice/avr/bootloaders/niceboot/niceboot.hex\n"}, // 12: burn bootloader, preferences override from programmers.txt {buildPath1, "alice:avr:board1", "port", "serial", "progr4", true, "ERASE conf-board1 conf-two-general conf-two-erase $$VERBOSE-VERIFY$$ prog4protocol-bootloader port -bspeed\n", - "BURN conf-board1 conf-two-general conf-two-bootloader $$VERBOSE-VERIFY$$ prog4protocol-bootloader port -bspeed -F0xFF " + cwd + "/testdata/hardware/alice/avr/bootloaders/niceboot/niceboot.hex\n"}, + "BURN conf-board1 conf-two-general conf-two-bootloader $$VERBOSE-VERIFY$$ prog4protocol-bootloader port -bspeed -F0xFF " + cwd + "/testdata/upload/hardware/alice/avr/bootloaders/niceboot/niceboot.hex\n"}, } pm := pmb.Build() @@ -185,6 +187,7 @@ func TestUploadPropertiesComposition(t *testing.T) { outStream := &bytes.Buffer{} errStream := &bytes.Buffer{} _, err := runProgramAction( + context.Background(), pme, nil, // sketch "", // importFile @@ -288,14 +291,14 @@ tools.arduino_ota.upload.field.password.secret=true`)) userFields := getUserFields("avrdude", platformRelease) require.Len(t, userFields, 2) - require.Equal(t, userFields[0].ToolId, "avrdude") - require.Equal(t, userFields[0].Name, "username") - require.Equal(t, userFields[0].Label, "Username") - require.False(t, userFields[0].Secret) - require.Equal(t, userFields[1].ToolId, "avrdude") - require.Equal(t, userFields[1].Name, "password") - require.Equal(t, userFields[1].Label, "Password") - require.True(t, userFields[1].Secret) + require.Equal(t, userFields[0].GetToolId(), "avrdude") + require.Equal(t, userFields[0].GetName(), "username") + require.Equal(t, userFields[0].GetLabel(), "Username") + require.False(t, userFields[0].GetSecret()) + require.Equal(t, userFields[1].GetToolId(), "avrdude") + require.Equal(t, userFields[1].GetName(), "password") + require.Equal(t, userFields[1].GetLabel(), "Password") + require.True(t, userFields[1].GetSecret()) props, err = properties.LoadFromBytes([]byte(` tools.arduino_ota.upload.field.password=Password @@ -310,10 +313,10 @@ tools.arduino_ota.upload.field.some_field=This is a really long label that ideal platformRelease.Properties = props userFields = getUserFields("arduino_ota", platformRelease) require.Len(t, userFields, 1) - require.Equal(t, userFields[0].ToolId, "arduino_ota") - require.Equal(t, userFields[0].Name, "some_field") - require.Equal(t, userFields[0].Label, "This is a really long label that ideally must nev…") - require.False(t, userFields[0].Secret) + require.Equal(t, userFields[0].GetToolId(), "arduino_ota") + require.Equal(t, userFields[0].GetName(), "some_field") + require.Equal(t, userFields[0].GetLabel(), "This is a really long label that ideally must nev…") + require.False(t, userFields[0].GetSecret()) } func TestOverrideProtocolProperties(t *testing.T) { diff --git a/commands/sketch/load.go b/commands/sketch/load.go deleted file mode 100644 index ee6eb649ca5..00000000000 --- a/commands/sketch/load.go +++ /dev/null @@ -1,79 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package sketch - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/sketch" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - paths "github.com/arduino/go-paths-helper" -) - -// LoadSketch collects and returns all files composing a sketch -func LoadSketch(ctx context.Context, req *rpc.LoadSketchRequest) (*rpc.LoadSketchResponse, error) { - // TODO: This should be a ToRpc function for the Sketch struct - sk, err := sketch.New(paths.New(req.SketchPath)) - if err != nil { - return nil, &arduino.CantOpenSketchError{Cause: err} - } - - otherSketchFiles := make([]string, sk.OtherSketchFiles.Len()) - for i, file := range sk.OtherSketchFiles { - otherSketchFiles[i] = file.String() - } - - additionalFiles := make([]string, sk.AdditionalFiles.Len()) - for i, file := range sk.AdditionalFiles { - additionalFiles[i] = file.String() - } - - rootFolderFiles := make([]string, sk.RootFolderFiles.Len()) - for i, file := range sk.RootFolderFiles { - rootFolderFiles[i] = file.String() - } - - defaultPort, defaultProtocol := sk.GetDefaultPortAddressAndProtocol() - - profiles := make([](*rpc.SketchProfile), len(sk.Project.Profiles)) - for i, profile := range sk.Project.Profiles { - profiles[i] = &rpc.SketchProfile{ - Name: profile.Name, - Fqbn: profile.FQBN, - } - } - - defaultProfileResp := &rpc.SketchProfile{} - defaultProfile := sk.GetProfile(sk.Project.DefaultProfile) - if defaultProfile != nil { - defaultProfileResp.Name = defaultProfile.Name - defaultProfileResp.Fqbn = defaultProfile.FQBN - } - - return &rpc.LoadSketchResponse{ - MainFile: sk.MainFile.String(), - LocationPath: sk.FullPath.String(), - OtherSketchFiles: otherSketchFiles, - AdditionalFiles: additionalFiles, - RootFolderFiles: rootFolderFiles, - DefaultFqbn: sk.GetDefaultFQBN(), - DefaultPort: defaultPort, - DefaultProtocol: defaultProtocol, - Profiles: profiles, - DefaultProfile: defaultProfileResp, - }, nil -} diff --git a/commands/daemon/term_example/main.go b/commands/term_example/main.go similarity index 86% rename from commands/daemon/term_example/main.go rename to commands/term_example/main.go index 16aa36f3d53..f5f96623617 100644 --- a/commands/daemon/term_example/main.go +++ b/commands/term_example/main.go @@ -31,7 +31,7 @@ import ( // This program exercise CLI monitor functionality. func main() { - conn, err := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()) + conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatal("error connecting to arduino-cli rpc server, you can start it by running `arduino-cli daemon`") } @@ -44,7 +44,7 @@ func main() { if err != nil { log.Fatal("Create:", err) } - instance := resp.Instance + instance := resp.GetInstance() respStream, err := cli.Init(context.Background(), &commands.InitRequest{Instance: instance}) if err != nil { @@ -70,8 +70,8 @@ func main() { if len(ports) == 0 { log.Fatal("No port to connect!") } - port := ports[0].Port - fmt.Println("Detected port:", port.Label, port.ProtocolLabel) + port := ports[0].GetPort() + fmt.Println("Detected port:", port.GetLabel(), port.GetProtocolLabel()) connectToPort(cli, instance, port) time.Sleep(5 * time.Second) @@ -89,8 +89,10 @@ func connectToPort(cli commands.ArduinoCoreServiceClient, instance *commands.Ins log.Fatal("Error opening Monitor:", err) } if err := monitorClient.Send(&commands.MonitorRequest{ - Instance: instance, - Port: port, + Message: &commands.MonitorRequest_OpenRequest{OpenRequest: &commands.MonitorPortOpenRequest{ + Instance: instance, + Port: port, + }}, }); err != nil { log.Fatal("Error sending Monitor config:", err) } @@ -106,9 +108,9 @@ func connectToPort(cli commands.ArduinoCoreServiceClient, instance *commands.Ins } }() - hello := &commands.MonitorRequest{ + hello := &commands.MonitorRequest{Message: &commands.MonitorRequest_TxData{ TxData: []byte("HELLO!"), - } + }} fmt.Println("Send:", hello) if err := monitorClient.Send(hello); err != nil { log.Fatal("Monitor send HELLO:", err) diff --git a/commands/daemon/testdata/arduino-cli.yml b/commands/testdata/arduino-cli.yml similarity index 100% rename from commands/daemon/testdata/arduino-cli.yml rename to commands/testdata/arduino-cli.yml diff --git a/commands/debug/testdata/custom_hardware/arduino-test/samd/boards.txt b/commands/testdata/debug/custom_hardware/arduino-test/samd/boards.txt similarity index 100% rename from commands/debug/testdata/custom_hardware/arduino-test/samd/boards.txt rename to commands/testdata/debug/custom_hardware/arduino-test/samd/boards.txt diff --git a/commands/debug/testdata/custom_hardware/arduino-test/samd/platform.txt b/commands/testdata/debug/custom_hardware/arduino-test/samd/platform.txt similarity index 100% rename from commands/debug/testdata/custom_hardware/arduino-test/samd/platform.txt rename to commands/testdata/debug/custom_hardware/arduino-test/samd/platform.txt diff --git a/commands/testdata/debug/custom_hardware/arduino-test/samd/programmers.txt b/commands/testdata/debug/custom_hardware/arduino-test/samd/programmers.txt new file mode 100644 index 00000000000..332ca0d5c51 --- /dev/null +++ b/commands/testdata/debug/custom_hardware/arduino-test/samd/programmers.txt @@ -0,0 +1 @@ +edbg.name=edbg diff --git a/commands/debug/testdata/data_dir/packages/arduino-test/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-gdb b/commands/testdata/debug/data_dir/packages/arduino-test/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-gdb similarity index 100% rename from commands/debug/testdata/data_dir/packages/arduino-test/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-gdb rename to commands/testdata/debug/data_dir/packages/arduino-test/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-gdb diff --git a/commands/debug/testdata/data_dir/packages/arduino-test/tools/openocd/0.10.0-arduino7/bin/openocd b/commands/testdata/debug/data_dir/packages/arduino-test/tools/openocd/0.10.0-arduino7/bin/openocd similarity index 100% rename from commands/debug/testdata/data_dir/packages/arduino-test/tools/openocd/0.10.0-arduino7/bin/openocd rename to commands/testdata/debug/data_dir/packages/arduino-test/tools/openocd/0.10.0-arduino7/bin/openocd diff --git a/commands/debug/testdata/hello/build/arduino-test.samd.arduino_zero_edbg/hello.ino.bin b/commands/testdata/debug/hello/build/arduino-test.samd.arduino_zero_edbg/hello.ino.bin similarity index 100% rename from commands/debug/testdata/hello/build/arduino-test.samd.arduino_zero_edbg/hello.ino.bin rename to commands/testdata/debug/hello/build/arduino-test.samd.arduino_zero_edbg/hello.ino.bin diff --git a/commands/debug/testdata/hello/build/arduino-test.samd.mkr1000/hello.ino.bin b/commands/testdata/debug/hello/build/arduino-test.samd.mkr1000/hello.ino.bin similarity index 100% rename from commands/debug/testdata/hello/build/arduino-test.samd.mkr1000/hello.ino.bin rename to commands/testdata/debug/hello/build/arduino-test.samd.mkr1000/hello.ino.bin diff --git a/commands/debug/testdata/hello/hello.ino b/commands/testdata/debug/hello/hello.ino similarity index 100% rename from commands/debug/testdata/hello/hello.ino rename to commands/testdata/debug/hello/hello.ino diff --git a/commands/lib/testdata/full/library_index.json b/commands/testdata/libraries/full/library_index.json similarity index 100% rename from commands/lib/testdata/full/library_index.json rename to commands/testdata/libraries/full/library_index.json diff --git a/commands/testdata/libraries/qualified_search/library_index.json b/commands/testdata/libraries/qualified_search/library_index.json new file mode 100644 index 00000000000..23dfb04bae9 --- /dev/null +++ b/commands/testdata/libraries/qualified_search/library_index.json @@ -0,0 +1,136 @@ +{ + "libraries": [ + { + "name": "Array", + "version": "1.2.1", + "author": "Peter Polidoro \u003cpeterpolidoro@gmail.com\u003e", + "maintainer": "Peter Polidoro \u003cpeterpolidoro@gmail.com\u003e", + "sentence": "An array container similar to the C++ std::array", + "paragraph": "Like this project? Please star it on GitHub!", + "website": "https://github.com/janelia-arduino/Array.git", + "category": "Data Storage", + "architectures": ["*"], + "types": ["Contributed"], + "repository": "https://github.com/janelia-arduino/Array.git", + "url": "https://downloads.arduino.cc/libraries/github.com/janelia-arduino/Array-1.2.1.zip", + "archiveFileName": "Array-1.2.1.zip", + "size": 7859, + "checksum": "SHA-256:dc69e0b4d1390c08253120a80e6e07e5cc6185ec24cbe3cb96dec2d8173e6495" + }, + { + "name": "esp8266-framework", + "version": "1.1.5", + "author": "Suraj I.", + "maintainer": "Suraj I. \u003csurajinamdar151@gmail.com\u003e", + "sentence": "esp8266 framework stack for easy configurable applications", + "paragraph": "esp8266 framework includes all services like gpio, wifi, http, mqtt, ntp, ota, napt, espnow, mesh, server etc. which are ready to use in all applications", + "website": "https://github.com/Suraj151/esp8266-framework", + "category": "Communication", + "architectures": ["esp8266"], + "types": ["Contributed"], + "repository": "https://github.com/Suraj151/esp8266-framework.git", + "url": "https://downloads.arduino.cc/libraries/github.com/Suraj151/esp8266_framework-1.1.5.zip", + "archiveFileName": "esp8266_framework-1.1.5.zip", + "size": 1918535, + "checksum": "SHA-256:81731d4ccc80846c317a2d4e2086d32caa695ed97d3e4765a59c5651b4be30b5" + }, + { + "name": "Painless Mesh", + "version": "1.5.0", + "author": "Coopdis,Scotty Franzyshen,Edwin van Leeuwen,Germán Martín,Maximilian Schwarz,Doanh Doanh", + "maintainer": "Edwin van Leeuwen", + "sentence": "A painless way to setup a mesh with ESP8266 and ESP32 devices", + "paragraph": "A painless way to setup a mesh with ESP8266 and ESP32 devices", + "website": "https://gitlab.com/painlessMesh/painlessMesh", + "category": "Communication", + "architectures": ["esp8266", "esp32"], + "types": ["Contributed"], + "repository": "https://gitlab.com/painlessMesh/painlessMesh.git", + "providesIncludes": ["painlessMesh.h"], + "dependencies": [ + { + "name": "ArduinoJson" + }, + { + "name": "TaskScheduler" + } + ], + "url": "https://downloads.arduino.cc/libraries/gitlab.com/painlessMesh/Painless_Mesh-1.5.0.zip", + "archiveFileName": "Painless_Mesh-1.5.0.zip", + "size": 293531, + "checksum": "SHA-256:9d965064fc704e8ba19c0452cc50e619145f7869b9b135dbf7e521f6ec0a4b33" + }, + { + "name": "Pushdata_ESP8266_SSL", + "version": "0.0.6", + "author": "Ragnar Lonn", + "maintainer": "Ragnar Lonn \u003chello@pushdata.io\u003e", + "license": "MIT", + "sentence": "Free, ultra-simple time series data storage for your IoT sensors", + "paragraph": "Pushdata.io client library that makes it very simple to store your time series data online", + "website": "https://pushdata.io", + "category": "Communication", + "architectures": ["*"], + "types": ["Contributed"], + "repository": "https://github.com/pushdata-io/Arduino_ESP8266_SSL.git", + "providesIncludes": ["Pushdata_ESP8266_SSL.h"], + "url": "https://downloads.arduino.cc/libraries/github.com/pushdata-io/Pushdata_ESP8266_SSL-0.0.6.zip", + "archiveFileName": "Pushdata_ESP8266_SSL-0.0.6.zip", + "size": 12160, + "checksum": "SHA-256:5d592eb7900782f681b86f5fd77c5d9f25c78555e3b5f0880c52197031206df0" + }, + { + "name": "RF24Mesh", + "version": "1.0.0", + "author": "TMRh20", + "maintainer": "TMRh20", + "sentence": "A library for NRF24L01(+) devices mesh.", + "paragraph": "Provides a simple and seamless 'mesh' layer for sensor networks, allowing automatic and dynamic configuration that can be customized to suit many scenarios. It is currently designed to interface directly with with the RF24Network Development library, an OSI Network Layer using nRF24L01(+) radios driven by the newly optimized RF24 library fork.", + "website": "http://tmrh20.github.io/RF24Mesh/", + "category": "Communication", + "architectures": ["avr"], + "types": ["Contributed"], + "repository": "https://github.com/TMRh20/RF24Mesh.git", + "url": "https://downloads.arduino.cc/libraries/github.com/TMRh20/RF24Mesh-1.0.0.zip", + "archiveFileName": "RF24Mesh-1.0.0.zip", + "size": 31419, + "checksum": "SHA-256:1b122a6412bc06a33a7fbcef34e2210d0990c25839fd7bc547604103f28194b5" + }, + { + "name": "RTCtime", + "version": "1.0.5", + "author": "smz \u003ctinker@smz.it\u003e", + "maintainer": "smz (https://github.com/smz)", + "sentence": "A \"Standard C Runtime\" compatible library for interfacing the DS1307 and DS3231 Real Time Clock modules.", + "paragraph": "This library is for getting/setting time from hardware RTC modules. It uses an API compatible with the AVR implementation of the Standard C runtime time library as available in the Arduino IDE since version 1.6.10 (AVR C Runtime Library 2.0.0)", + "website": "https://github.com/smz/Arduino-RTCtime", + "category": "Timing", + "architectures": ["*"], + "types": ["Contributed"], + "repository": "https://github.com/smz/Arduino-RTCtime.git", + "url": "https://downloads.arduino.cc/libraries/github.com/smz/RTCtime-1.0.5.zip", + "archiveFileName": "RTCtime-1.0.5.zip", + "size": 18870, + "checksum": "SHA-256:89493bb6d1f834426e82330fdf55a249ff43eb61707831d75deed8644a7ebce8" + }, + { + "name": "DLLN3X ZigBee Mesh Module Library", + "version": "1.0.1", + "author": "Duke Liu \u003cmentalflow@ourdocs.cn\u003e", + "maintainer": "Duke Liu \u003cmentalflow@ourdocs.cn\u003e", + "license": "MIT", + "sentence": "This library allows you to use DLLN3X ZigBee mesh module very easily.", + "paragraph": "This library currently allows basic send and receive operations using the DLLN3X module, with more features to come.", + "website": "https://github.com/mentalfl0w/DLLN3X_zigbee_mesh_module_library", + "category": "Communication", + "architectures": ["*"], + "types": ["Contributed"], + "repository": "https://github.com/mentalfl0w/DLLN3X_zigbee_mesh_module_library.git", + "providesIncludes": ["DLLN3X.h"], + "url": "https://downloads.arduino.cc/libraries/github.com/mentalfl0w/DLLN3X_ZigBee_Mesh_Module_Library-1.0.1.zip", + "archiveFileName": "DLLN3X_ZigBee_Mesh_Module_Library-1.0.1.zip", + "size": 6122, + "checksum": "SHA-256:a28833bbd575ef8deab744a1f0e1175dad9e5329bf5c620fc2fe53e1de1d32ba" + } + ] +} diff --git a/commands/lib/testdata/test1/library_index.json b/commands/testdata/libraries/test1/library_index.json similarity index 100% rename from commands/lib/testdata/test1/library_index.json rename to commands/testdata/libraries/test1/library_index.json diff --git a/commands/core/testdata/package_index.json b/commands/testdata/platform/package_index.json similarity index 100% rename from commands/core/testdata/package_index.json rename to commands/testdata/platform/package_index.json diff --git a/commands/sketch/testdata/sketch_with_profile/sketch.yml b/commands/testdata/sketch_with_profile/sketch.yml similarity index 100% rename from commands/sketch/testdata/sketch_with_profile/sketch.yml rename to commands/testdata/sketch_with_profile/sketch.yml diff --git a/commands/sketch/testdata/sketch_with_profile/sketch_with_profile.ino b/commands/testdata/sketch_with_profile/sketch_with_profile.ino similarity index 100% rename from commands/sketch/testdata/sketch_with_profile/sketch_with_profile.ino rename to commands/testdata/sketch_with_profile/sketch_with_profile.ino diff --git a/commands/upload/testdata/Blonk/Blonk.ino b/commands/testdata/upload/Blonk/Blonk.ino similarity index 100% rename from commands/upload/testdata/Blonk/Blonk.ino rename to commands/testdata/upload/Blonk/Blonk.ino diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.bin b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.bin similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.bin rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.bin diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.elf b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.elf similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.elf rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.elf diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.hex b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.hex similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.hex rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.hex diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.map b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.map similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.map rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.map diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.bin b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.bin similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.bin rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.bin diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.hex b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.hex similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.hex rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.hex diff --git a/commands/upload/testdata/build_path_1/sketch.ino.bin b/commands/testdata/upload/build_path_1/sketch.ino.bin similarity index 100% rename from commands/upload/testdata/build_path_1/sketch.ino.bin rename to commands/testdata/upload/build_path_1/sketch.ino.bin diff --git a/commands/upload/testdata/build_path_2/Blink.ino.bin b/commands/testdata/upload/build_path_2/Blink.ino.bin similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.bin rename to commands/testdata/upload/build_path_2/Blink.ino.bin diff --git a/commands/upload/testdata/build_path_2/Blink.ino.elf b/commands/testdata/upload/build_path_2/Blink.ino.elf similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.elf rename to commands/testdata/upload/build_path_2/Blink.ino.elf diff --git a/commands/upload/testdata/build_path_2/Blink.ino.hex b/commands/testdata/upload/build_path_2/Blink.ino.hex similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.hex rename to commands/testdata/upload/build_path_2/Blink.ino.hex diff --git a/commands/upload/testdata/build_path_2/Blink.ino.map b/commands/testdata/upload/build_path_2/Blink.ino.map similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.map rename to commands/testdata/upload/build_path_2/Blink.ino.map diff --git a/commands/upload/testdata/build_path_2/Blink.ino.with_bootloader.bin b/commands/testdata/upload/build_path_2/Blink.ino.with_bootloader.bin similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.with_bootloader.bin rename to commands/testdata/upload/build_path_2/Blink.ino.with_bootloader.bin diff --git a/commands/upload/testdata/build_path_2/Blink.ino.with_bootloader.hex b/commands/testdata/upload/build_path_2/Blink.ino.with_bootloader.hex similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.with_bootloader.hex rename to commands/testdata/upload/build_path_2/Blink.ino.with_bootloader.hex diff --git a/commands/upload/testdata/build_path_3/AnotherSketch.ino.bin b/commands/testdata/upload/build_path_3/AnotherSketch.ino.bin similarity index 100% rename from commands/upload/testdata/build_path_3/AnotherSketch.ino.bin rename to commands/testdata/upload/build_path_3/AnotherSketch.ino.bin diff --git a/commands/upload/testdata/build_path_3/Blink.ino.bin b/commands/testdata/upload/build_path_3/Blink.ino.bin similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.bin rename to commands/testdata/upload/build_path_3/Blink.ino.bin diff --git a/commands/upload/testdata/build_path_3/Blink.ino.elf b/commands/testdata/upload/build_path_3/Blink.ino.elf similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.elf rename to commands/testdata/upload/build_path_3/Blink.ino.elf diff --git a/commands/upload/testdata/build_path_3/Blink.ino.hex b/commands/testdata/upload/build_path_3/Blink.ino.hex similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.hex rename to commands/testdata/upload/build_path_3/Blink.ino.hex diff --git a/commands/upload/testdata/build_path_3/Blink.ino.map b/commands/testdata/upload/build_path_3/Blink.ino.map similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.map rename to commands/testdata/upload/build_path_3/Blink.ino.map diff --git a/commands/upload/testdata/build_path_3/Blink.ino.with_bootloader.bin b/commands/testdata/upload/build_path_3/Blink.ino.with_bootloader.bin similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.with_bootloader.bin rename to commands/testdata/upload/build_path_3/Blink.ino.with_bootloader.bin diff --git a/commands/upload/testdata/build_path_3/Blink.ino.with_bootloader.hex b/commands/testdata/upload/build_path_3/Blink.ino.with_bootloader.hex similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.with_bootloader.hex rename to commands/testdata/upload/build_path_3/Blink.ino.with_bootloader.hex diff --git a/commands/upload/testdata/build_path_4/some_other_files.txt b/commands/testdata/upload/build_path_4/some_other_files.txt similarity index 100% rename from commands/upload/testdata/build_path_4/some_other_files.txt rename to commands/testdata/upload/build_path_4/some_other_files.txt diff --git a/commands/upload/testdata/firmware/another_firmware.ino.bin b/commands/testdata/upload/firmware/another_firmware.ino.bin similarity index 100% rename from commands/upload/testdata/firmware/another_firmware.ino.bin rename to commands/testdata/upload/firmware/another_firmware.ino.bin diff --git a/commands/upload/testdata/firmware/firmware.ino.bin b/commands/testdata/upload/firmware/firmware.ino.bin similarity index 100% rename from commands/upload/testdata/firmware/firmware.ino.bin rename to commands/testdata/upload/firmware/firmware.ino.bin diff --git a/commands/upload/testdata/hardware/alice/avr/boards.txt b/commands/testdata/upload/hardware/alice/avr/boards.txt similarity index 100% rename from commands/upload/testdata/hardware/alice/avr/boards.txt rename to commands/testdata/upload/hardware/alice/avr/boards.txt diff --git a/commands/upload/testdata/hardware/alice/avr/platform.txt b/commands/testdata/upload/hardware/alice/avr/platform.txt similarity index 100% rename from commands/upload/testdata/hardware/alice/avr/platform.txt rename to commands/testdata/upload/hardware/alice/avr/platform.txt diff --git a/commands/upload/testdata/hardware/alice/avr/programmers.txt b/commands/testdata/upload/hardware/alice/avr/programmers.txt similarity index 100% rename from commands/upload/testdata/hardware/alice/avr/programmers.txt rename to commands/testdata/upload/hardware/alice/avr/programmers.txt diff --git a/commands/upload/burnbootloader.go b/commands/upload/burnbootloader.go deleted file mode 100644 index ad98c84d7af..00000000000 --- a/commands/upload/burnbootloader.go +++ /dev/null @@ -1,62 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package upload - -import ( - "context" - "io" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/sirupsen/logrus" -) - -// BurnBootloader FIXMEDOC -func BurnBootloader(ctx context.Context, req *rpc.BurnBootloaderRequest, outStream io.Writer, errStream io.Writer) (*rpc.BurnBootloaderResponse, error) { - logrus. - WithField("fqbn", req.GetFqbn()). - WithField("port", req.GetPort()). - WithField("programmer", req.GetProgrammer()). - Trace("BurnBootloader started", req.GetFqbn()) - - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - - _, err := runProgramAction( - pme, - nil, // sketch - "", // importFile - "", // importDir - req.GetFqbn(), - req.GetPort(), - req.GetProgrammer(), - req.GetVerbose(), - req.GetVerify(), - true, // burnBootloader - outStream, - errStream, - req.GetDryRun(), - map[string]string{}, // User fields - ) - if err != nil { - return nil, err - } - return &rpc.BurnBootloaderResponse{}, nil -} diff --git a/commands/core.go b/commands/utility_core.go similarity index 56% rename from commands/core.go rename to commands/utility_core.go index f75fbce04f4..32f32709d46 100644 --- a/commands/core.go +++ b/commands/utility_core.go @@ -16,14 +16,27 @@ package commands import ( - "github.com/arduino/arduino-cli/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) -// PlatformReleaseToRPC converts our internal structure to the RPC structure. +// platformToRPCPlatformMetadata converts our internal structure to the RPC structure. +func platformToRPCPlatformMetadata(platform *cores.Platform) *rpc.PlatformMetadata { + return &rpc.PlatformMetadata{ + Id: platform.String(), + Maintainer: platform.Package.Maintainer, + Website: platform.Package.WebsiteURL, + Email: platform.Package.Email, + ManuallyInstalled: platform.ManuallyInstalled, + Deprecated: platform.Deprecated, + Indexed: platform.Indexed, + } +} + +// platformReleaseToRPC converts our internal structure to the RPC structure. // Note: this function does not touch the "Installed" field of rpc.Platform as it's not always clear that the // platformRelease we're currently converting is actually installed. -func PlatformReleaseToRPC(platformRelease *cores.PlatformRelease) *rpc.Platform { +func platformReleaseToRPC(platformRelease *cores.PlatformRelease) *rpc.PlatformRelease { // If the boards are not installed yet, the `platformRelease.Boards` will be a zero length slice. // In such case, we have to use the `platformRelease.BoardsManifest` instead. // So that we can retrieve the name of the boards at least. @@ -50,21 +63,17 @@ func PlatformReleaseToRPC(platformRelease *cores.PlatformRelease) *rpc.Platform } } - result := &rpc.Platform{ - Id: platformRelease.Platform.String(), - Name: platformRelease.Platform.Name, - Maintainer: platformRelease.Platform.Package.Maintainer, - Website: platformRelease.Platform.Package.WebsiteURL, - Email: platformRelease.Platform.Package.Email, - Help: &rpc.HelpResources{Online: platformRelease.Platform.Package.Help.Online}, - Boards: boards, - Latest: platformRelease.Version.String(), - ManuallyInstalled: platformRelease.Platform.ManuallyInstalled, - Deprecated: platformRelease.Platform.Deprecated, - Type: []string{platformRelease.Platform.Category}, - Indexed: platformRelease.Platform.Indexed, - MissingMetadata: !platformRelease.HasMetadata(), + // This field make sense only if the platformRelease is installed otherwise is an "undefined behaviour" + missingMetadata := platformRelease.IsInstalled() && !platformRelease.HasMetadata() + return &rpc.PlatformRelease{ + Name: platformRelease.Name, + Help: &rpc.HelpResources{Online: platformRelease.Platform.Package.Help.Online}, + Boards: boards, + Version: platformRelease.Version.String(), + Installed: platformRelease.IsInstalled(), + MissingMetadata: missingMetadata, + Types: []string{platformRelease.Category}, + Deprecated: platformRelease.Deprecated, + Compatible: platformRelease.IsCompatible(), } - - return result } diff --git a/commands/utility_grpc_streaming.go b/commands/utility_grpc_streaming.go new file mode 100644 index 00000000000..927e5e40f2d --- /dev/null +++ b/commands/utility_grpc_streaming.go @@ -0,0 +1,120 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "errors" + "sync" + + "google.golang.org/grpc/metadata" +) + +type streamingResponseProxyToChan[T any] struct { + ctx context.Context + respChan chan<- *T + respLock sync.Mutex +} + +func streamResponseToChan[T any](ctx context.Context) (*streamingResponseProxyToChan[T], <-chan *T) { + respChan := make(chan *T, 1) + w := &streamingResponseProxyToChan[T]{ + ctx: ctx, + respChan: respChan, + } + go func() { + <-ctx.Done() + w.respLock.Lock() + close(w.respChan) + w.respChan = nil + w.respLock.Unlock() + }() + return w, respChan +} + +func (w *streamingResponseProxyToChan[T]) Send(resp *T) error { + w.respLock.Lock() + if w.respChan != nil { + w.respChan <- resp + } + w.respLock.Unlock() + return nil +} + +func (w *streamingResponseProxyToChan[T]) Context() context.Context { + return w.ctx +} + +func (w *streamingResponseProxyToChan[T]) RecvMsg(m any) error { + return errors.New("RecvMsg not implemented") +} + +func (w *streamingResponseProxyToChan[T]) SendHeader(metadata.MD) error { + return errors.New("SendHeader not implemented") +} + +func (w *streamingResponseProxyToChan[T]) SendMsg(m any) error { + return errors.New("SendMsg not implemented") +} + +func (w *streamingResponseProxyToChan[T]) SetHeader(metadata.MD) error { + return errors.New("SetHeader not implemented") +} + +func (w *streamingResponseProxyToChan[T]) SetTrailer(tr metadata.MD) { +} + +// streamingResponseProxyToCallback is a streaming response proxy that +// forwards the responses to a callback function +type streamingResponseProxyToCallback[T any] struct { + ctx context.Context + cb func(*T) error +} + +// creates a streaming response proxy that forwards the responses to a callback function +func streamResponseToCallback[T any](ctx context.Context, cb func(*T) error) *streamingResponseProxyToCallback[T] { + if cb == nil { + cb = func(*T) error { return nil } + } + return &streamingResponseProxyToCallback[T]{ctx: ctx, cb: cb} +} + +func (w *streamingResponseProxyToCallback[T]) Send(resp *T) error { + return w.cb(resp) +} + +func (w *streamingResponseProxyToCallback[T]) Context() context.Context { + return w.ctx +} + +func (w *streamingResponseProxyToCallback[T]) RecvMsg(m any) error { + return errors.New("RecvMsg not implemented") +} + +func (w *streamingResponseProxyToCallback[T]) SendHeader(metadata.MD) error { + return errors.New("SendHeader not implemented") +} + +func (w *streamingResponseProxyToCallback[T]) SendMsg(m any) error { + return errors.New("SendMsg not implemented") +} + +func (w *streamingResponseProxyToCallback[T]) SetHeader(metadata.MD) error { + return errors.New("SetHeader not implemented") +} + +func (w *streamingResponseProxyToCallback[T]) SetTrailer(tr metadata.MD) { +} diff --git a/commands/utility_libraries_index_search_matcher.go b/commands/utility_libraries_index_search_matcher.go new file mode 100644 index 00000000000..f8ed7205c9d --- /dev/null +++ b/commands/utility_libraries_index_search_matcher.go @@ -0,0 +1,135 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "strings" + + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/utils" +) + +// matcherTokensFromQueryString parses the query string into tokens of interest +// for the qualifier-value pattern matching. +func matcherTokensFromQueryString(query string) []string { + escaped := false + quoted := false + tokens := []string{} + sb := &strings.Builder{} + + for _, r := range query { + // Short circuit the loop on backslash so that all other paths can clear + // the escaped flag. + if !escaped && r == '\\' { + escaped = true + continue + } + + if r == '"' { + if !escaped { + quoted = !quoted + } else { + sb.WriteRune(r) + } + } else if !quoted && r == ' ' { + tokens = append(tokens, strings.ToLower(sb.String())) + sb.Reset() + } else { + sb.WriteRune(r) + } + escaped = false + } + if sb.Len() > 0 { + tokens = append(tokens, strings.ToLower(sb.String())) + } + + return tokens +} + +// defaulLibraryMatchExtractor returns a string describing the library that +// is used for the simple search. +func defaultLibraryMatchExtractor(lib *librariesindex.Library) string { + res := lib.Name + " " + + lib.Latest.Paragraph + " " + + lib.Latest.Sentence + " " + + lib.Latest.Author + " " + for _, include := range lib.Latest.ProvidesIncludes { + res += include + " " + } + return res +} + +var qualifiers map[string]func(lib *librariesindex.Library) string = map[string]func(lib *librariesindex.Library) string{ + "name": func(lib *librariesindex.Library) string { return lib.Name }, + "architectures": func(lib *librariesindex.Library) string { return strings.Join(lib.Latest.Architectures, " ") }, + "author": func(lib *librariesindex.Library) string { return lib.Latest.Author }, + "category": func(lib *librariesindex.Library) string { return lib.Latest.Category }, + "dependencies": func(lib *librariesindex.Library) string { + names := make([]string, len(lib.Latest.Dependencies)) + for i, dep := range lib.Latest.Dependencies { + names[i] = dep.GetName() + } + return strings.Join(names, " ") + }, + "license": func(lib *librariesindex.Library) string { return lib.Latest.License }, + "maintainer": func(lib *librariesindex.Library) string { return lib.Latest.Maintainer }, + "paragraph": func(lib *librariesindex.Library) string { return lib.Latest.Paragraph }, + "provides": func(lib *librariesindex.Library) string { return strings.Join(lib.Latest.ProvidesIncludes, " ") }, + "sentence": func(lib *librariesindex.Library) string { return lib.Latest.Sentence }, + "types": func(lib *librariesindex.Library) string { return strings.Join(lib.Latest.Types, " ") }, + "version": func(lib *librariesindex.Library) string { return lib.Latest.Version.String() }, + "website": func(lib *librariesindex.Library) string { return lib.Latest.Website }, +} + +// MatcherFromQueryString returns a closure that takes a library as a +// parameter and returns true if the library matches the query. +func MatcherFromQueryString(query string) func(*librariesindex.Library) bool { + // A qv-query is one using [:=] syntax. + qvQuery := strings.Contains(query, ":") || strings.Contains(query, "=") + + if !qvQuery { + queryTerms := utils.SearchTermsFromQueryString(query) + return func(lib *librariesindex.Library) bool { + return utils.Match(defaultLibraryMatchExtractor(lib), queryTerms) + } + } + + queryTerms := matcherTokensFromQueryString(query) + + return func(lib *librariesindex.Library) bool { + matched := true + for _, term := range queryTerms { + if sepIdx := strings.IndexAny(term, ":="); sepIdx != -1 { + qualifier, separator, target := term[:sepIdx], term[sepIdx], term[sepIdx+1:] + if extractor, ok := qualifiers[qualifier]; ok { + switch separator { + case ':': + matched = (matched && utils.Match(extractor(lib), []string{target})) + continue + case '=': + matched = (matched && strings.ToLower(extractor(lib)) == target) + continue + } + } + } + // We perform the usual match in the following cases: + // 1. Unknown qualifier names revert to basic search terms. + // 2. Terms that do not use qv-syntax. + matched = (matched && utils.Match(defaultLibraryMatchExtractor(lib), []string{term})) + } + return matched + } +} diff --git a/commands/version.go b/commands/utility_version.go similarity index 64% rename from commands/version.go rename to commands/utility_version.go index fe9d36ca727..a7232d6fdc4 100644 --- a/commands/version.go +++ b/commands/utility_version.go @@ -16,19 +16,20 @@ package commands import ( + "github.com/arduino/arduino-cli/commands/cmderrors" semver "go.bug.st/relaxed-semver" ) -// Versioned is an object that provides a GetVersion() method -type Versioned interface { - GetVersion() string -} - -// ParseVersion returns the version parsed from an interface that provides -// the GetVersion() method (interface Versioned) -func ParseVersion(req Versioned) (*semver.Version, error) { - if req.GetVersion() != "" { - return semver.Parse(req.GetVersion()) +// parseVersion returns the parsed version or nil if the version is +// the empty string. An error is returned if the version is not valid +// semver. +func parseVersion(version string) (*semver.Version, error) { + if version == "" { + return nil, nil + } + res, err := semver.Parse(version) + if err != nil { + return nil, &cmderrors.InvalidVersionError{Cause: err} } - return nil, nil + return res, nil } diff --git a/configuration/configuration.go b/configuration/configuration.go deleted file mode 100644 index 22a7d9049bc..00000000000 --- a/configuration/configuration.go +++ /dev/null @@ -1,148 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package configuration - -import ( - "os" - "path/filepath" - "runtime" - "strings" - - "github.com/arduino/arduino-cli/i18n" - "github.com/arduino/arduino-cli/internal/cli/feedback" - paths "github.com/arduino/go-paths-helper" - "github.com/arduino/go-win32-utils" - "github.com/spf13/cobra" - "github.com/spf13/viper" -) - -// Settings is a global instance of viper holding configurations for the CLI and the gRPC consumers -var Settings *viper.Viper - -var tr = i18n.Tr - -// Init initialize defaults and read the configuration file. -// Please note the logging system hasn't been configured yet, -// so logging shouldn't be used here. -func Init(configFile string) *viper.Viper { - // Create a new viper instance with default values for all the settings - settings := viper.New() - SetDefaults(settings) - - // Set config name and config path - if configFilePath := paths.New(configFile); configFilePath != nil { - settings.SetConfigName(strings.TrimSuffix(configFilePath.Base(), configFilePath.Ext())) - settings.AddConfigPath(configFilePath.Parent().String()) - } else { - configDir := settings.GetString("directories.Data") - // Get default data path if none was provided - if configDir == "" { - configDir = getDefaultArduinoDataDir() - } - - settings.SetConfigName("arduino-cli") - settings.AddConfigPath(configDir) - } - - // Attempt to read config file - if err := settings.ReadInConfig(); err != nil { - // ConfigFileNotFoundError is acceptable, anything else - // should be reported to the user - if _, ok := err.(viper.ConfigFileNotFoundError); !ok { - feedback.Warning(tr("Error reading config file: %v", err)) - } - } - - return settings -} - -// BindFlags creates all the flags binding between the cobra Command and the instance of viper -func BindFlags(cmd *cobra.Command, settings *viper.Viper) { - settings.BindPFlag("logging.level", cmd.Flag("log-level")) - settings.BindPFlag("logging.file", cmd.Flag("log-file")) - settings.BindPFlag("logging.format", cmd.Flag("log-format")) - settings.BindPFlag("board_manager.additional_urls", cmd.Flag("additional-urls")) - settings.BindPFlag("output.no_color", cmd.Flag("no-color")) -} - -// getDefaultArduinoDataDir returns the full path to the default arduino folder -func getDefaultArduinoDataDir() string { - userHomeDir, err := os.UserHomeDir() - if err != nil { - feedback.Warning(tr("Unable to get user home dir: %v", err)) - return "." - } - - switch runtime.GOOS { - case "linux": - return filepath.Join(userHomeDir, ".arduino15") - case "darwin": - return filepath.Join(userHomeDir, "Library", "Arduino15") - case "windows": - localAppDataPath, err := win32.GetLocalAppDataFolder() - if err != nil { - feedback.Warning(tr("Unable to get Local App Data Folder: %v", err)) - return "." - } - return filepath.Join(localAppDataPath, "Arduino15") - default: - return "." - } -} - -// getDefaultUserDir returns the full path to the default user folder -func getDefaultUserDir() string { - userHomeDir, err := os.UserHomeDir() - if err != nil { - feedback.Warning(tr("Unable to get user home dir: %v", err)) - return "." - } - - switch runtime.GOOS { - case "linux": - return filepath.Join(userHomeDir, "Arduino") - case "darwin": - return filepath.Join(userHomeDir, "Documents", "Arduino") - case "windows": - documentsPath, err := win32.GetDocumentsFolder() - if err != nil { - feedback.Warning(tr("Unable to get Documents Folder: %v", err)) - return "." - } - return filepath.Join(documentsPath, "Arduino") - default: - return "." - } -} - -// GetDefaultBuiltinLibrariesDir returns the full path to the default builtin libraries dir -func GetDefaultBuiltinLibrariesDir() string { - return filepath.Join(getDefaultArduinoDataDir(), "libraries") -} - -// FindConfigFileInArgs returns the config file path using the -// argument '--config-file' (if specified) or looking in the current working dir -func FindConfigFileInArgs(args []string) string { - // Look for '--config-file' argument - for i, arg := range args { - if arg == "--config-file" { - if len(args) > i+1 { - return args[i+1] - } - } - } - return "" -} diff --git a/configuration/configuration_test.go b/configuration/configuration_test.go deleted file mode 100644 index ce879e0c8d3..00000000000 --- a/configuration/configuration_test.go +++ /dev/null @@ -1,74 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package configuration - -import ( - "fmt" - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/require" -) - -func tmpDirOrDie() string { - dir, err := os.MkdirTemp(os.TempDir(), "cli_test") - if err != nil { - panic(fmt.Sprintf("error creating tmp dir: %v", err)) - } - // Symlinks are evaluated becase the temp folder on Mac OS is inside /var, it's not writable - // and is a symlink to /private/var, we want the full path so we do this - dir, err = filepath.EvalSymlinks(dir) - if err != nil { - panic(fmt.Sprintf("error evaluating tmp dir symlink: %v", err)) - } - return dir -} - -func TestInit(t *testing.T) { - tmp := tmpDirOrDie() - defer os.RemoveAll(tmp) - settings := Init(filepath.Join(tmp, "arduino-cli.yaml")) - require.NotNil(t, settings) - - require.Equal(t, "info", settings.GetString("logging.level")) - require.Equal(t, "text", settings.GetString("logging.format")) - - require.Empty(t, settings.GetStringSlice("board_manager.additional_urls")) - - require.NotEmpty(t, settings.GetString("directories.Data")) - require.NotEmpty(t, settings.GetString("directories.Downloads")) - require.NotEmpty(t, settings.GetString("directories.User")) - - require.Equal(t, "50051", settings.GetString("daemon.port")) - - require.Equal(t, true, settings.GetBool("metrics.enabled")) - require.Equal(t, ":9090", settings.GetString("metrics.addr")) -} - -func TestFindConfigFile(t *testing.T) { - configFile := FindConfigFileInArgs([]string{"--config-file"}) - require.Equal(t, "", configFile) - - configFile = FindConfigFileInArgs([]string{"--config-file", "some/path/to/config"}) - require.Equal(t, "some/path/to/config", configFile) - - configFile = FindConfigFileInArgs([]string{"--config-file", "some/path/to/config/arduino-cli.yaml"}) - require.Equal(t, "some/path/to/config/arduino-cli.yaml", configFile) - - configFile = FindConfigFileInArgs([]string{}) - require.Equal(t, "", configFile) -} diff --git a/configuration/defaults.go b/configuration/defaults.go deleted file mode 100644 index be1a0088a62..00000000000 --- a/configuration/defaults.go +++ /dev/null @@ -1,72 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package configuration - -import ( - "path/filepath" - "strings" - "time" - - "github.com/spf13/viper" -) - -// SetDefaults sets the default values for certain keys -func SetDefaults(settings *viper.Viper) { - // logging - settings.SetDefault("logging.level", "info") - settings.SetDefault("logging.format", "text") - - // Libraries - settings.SetDefault("library.enable_unsafe_install", false) - - // Boards Manager - settings.SetDefault("board_manager.additional_urls", []string{}) - - // arduino directories - settings.SetDefault("directories.Data", getDefaultArduinoDataDir()) - settings.SetDefault("directories.Downloads", filepath.Join(getDefaultArduinoDataDir(), "staging")) - settings.SetDefault("directories.User", getDefaultUserDir()) - - // Sketch compilation - settings.SetDefault("sketch.always_export_binaries", false) - settings.SetDefault("build_cache.ttl", time.Hour*24*30) - settings.SetDefault("build_cache.compilations_before_purge", 10) - - // daemon settings - settings.SetDefault("daemon.port", "50051") - - // metrics settings - settings.SetDefault("metrics.enabled", true) - settings.SetDefault("metrics.addr", ":9090") - - // output settings - settings.SetDefault("output.no_color", false) - - // updater settings - settings.SetDefault("updater.enable_notification", true) - - // Bind env vars - settings.SetEnvPrefix("ARDUINO") - settings.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) - settings.AutomaticEnv() - - // Bind env aliases to keep backward compatibility - settings.BindEnv("library.enable_unsafe_install", "ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL") - settings.BindEnv("directories.User", "ARDUINO_SKETCHBOOK_DIR") - settings.BindEnv("directories.Downloads", "ARDUINO_DOWNLOADS_DIR") - settings.BindEnv("directories.Data", "ARDUINO_DATA_DIR") - settings.BindEnv("sketch.always_export_binaries", "ARDUINO_SKETCH_ALWAYS_EXPORT_BINARIES") -} diff --git a/configuration/network.go b/configuration/network.go deleted file mode 100644 index 793c67de155..00000000000 --- a/configuration/network.go +++ /dev/null @@ -1,67 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package configuration - -import ( - "fmt" - "net/url" - "os" - "runtime" - - "github.com/arduino/arduino-cli/version" - "github.com/spf13/viper" -) - -// UserAgent returns the user agent (mainly used by HTTP clients) -func UserAgent(settings *viper.Viper) string { - subComponent := "" - if settings != nil { - subComponent = settings.GetString("network.user_agent_ext") - } - if subComponent != "" { - subComponent = " " + subComponent - } - - extendedUA := os.Getenv("ARDUINO_CLI_USER_AGENT_EXTENSION") - if extendedUA != "" { - extendedUA = " " + extendedUA - } - - return fmt.Sprintf("%s/%s%s (%s; %s; %s) Commit:%s%s", - version.VersionInfo.Application, - version.VersionInfo.VersionString, - subComponent, - runtime.GOARCH, runtime.GOOS, runtime.Version(), - version.VersionInfo.Commit, - extendedUA) -} - -// NetworkProxy returns the proxy configuration (mainly used by HTTP clients) -func NetworkProxy(settings *viper.Viper) (*url.URL, error) { - if settings == nil || !settings.IsSet("network.proxy") { - return nil, nil - } - if proxyConfig := settings.GetString("network.proxy"); proxyConfig == "" { - // empty configuration - // this workaround must be here until viper can UnSet properties: - // https://github.com/spf13/viper/pull/519 - return nil, nil - } else if proxy, err := url.Parse(proxyConfig); err != nil { - return nil, fmt.Errorf(tr("Invalid network.proxy '%[1]s': %[2]s"), proxyConfig, err) - } else { - return proxy, nil - } -} diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index d21314c52c5..c00d06ac565 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -8,9 +8,9 @@ There are several ways you can get involved: | ------------------------------------------------- | ------------------------------------------------------- | | - Support request
- Question
- Discussion | Post on the [Arduino Forum][forum] | | - Bug report
- Feature request | Issue report (read the [issue guidelines][issues]) | -| Beta testing | Try out the [nightly build][nightly] | +| Testing | Try out the [nightly build][nightly] | | - Bug fix
- Enhancement | Pull Request (read the [pull request guidelines][prs]) | -| Translations for Arduino CLI | [transifex][translate] | +| Translations for Arduino CLI | Use the [transifex][translate] platform | | Monetary | - [Donate][donate]
- [Buy official products][store] | ## Issue Reports @@ -80,9 +80,9 @@ If you want to run integration tests you will also need: If you're working on the gRPC interface you will also have to: - download and install the [protoc][6] compiler (use the version required to match the generated code, please note that - the latest releases does not follow semantic versioning anymore so, for example, the version 4.24.3 must be searched - as 24.3 dropping the major number) -- install `protoc-gen-go` using: `go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.31.0` (use the version + the latest releases does not follow semantic versioning anymore so, for example, the version 5.26.1 must be searched + as 26.1 dropping the major number) +- install `protoc-gen-go` using: `go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.34.1` (use the version required to match the generated code) - install `protoc-gen-go-grpc` using: `go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0` (use the version required to match the generated code) @@ -327,8 +327,8 @@ changes in the generated code. ### Additional settings If you need to push a commit that's only shipping documentation changes or example files, thus a complete no-op for the -test suite, please start the commit message with the string **[skip ci]** to skip the build and give that slot to -someone else who does need it. +test suite, please start the commit message with the string **[skip ci]** to skip the build and give that slot to someone +else who does need it. If your PR doesn't need to be included in the changelog, please start the commit message and PR title with the string **[skip changelog]** diff --git a/docs/FAQ.md b/docs/FAQ.md index a58c40098d5..f52e8d2b9d4 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -9,7 +9,12 @@ When you run [`arduino-cli board list`][arduino cli board list], your board does ## What's the FQBN string? -For a deeper understanding of how FQBN works, you should understand the [Arduino platform specification][0]. +FQBN stands for Fully Qualified Board Name. It has the following format: +`VENDOR:ARCHITECTURE:BOARD_ID[:MENU_ID=OPTION_ID[,MENU2_ID=OPTION_ID ...]]`, with each `MENU_ID=OPTION_ID` being an +optional key-value pair configuration. Each field accepts letters (`A-Z` or `a-z`), numbers (`0-9`), underscores (`_`), +dashes(`-`) and dots(`.`). The special character `=` is accepted in the configuration value. The `VENDOR` and +`ARCHITECTURE` parts can be empty. For a deeper understanding of how FQBN works, you should understand the [Arduino +platform specification][0]. ## How to set multiple board options? @@ -36,6 +41,18 @@ when using a serial port, the monitor baud rate can be set to 4800 with the foll `$ arduino-cli monitor -p --config baudrate=4800` +## "Permission denied" error in sketch upload + +This problem might happen on some Linux systems, and can be solved by setting up serial port permissions. First, search +for the port your board is connected to, with the command: + +`$ arduino-cli board list` + +Then add your user to the group with the following command, replacing `` with your username and `` with +your group name. Logging out and in again is necessary for the changes to take effect. + +`$ sudo usermod -a -G ` + ## Additional assistance If your question wasn't answered, feel free to ask on [Arduino CLI's forum board][1]. diff --git a/docs/UPGRADING.md b/docs/UPGRADING.md index 537373e6d45..8d57833900c 100644 --- a/docs/UPGRADING.md +++ b/docs/UPGRADING.md @@ -2,7 +2,873 @@ Here you can find a list of migration guides to handle breaking changes between releases of the CLI. -## v0.35.0 +## 1.0.0 + +### `compile --build-cache-path` slightly changed directory format + +Now compiled cores are cached under the `cores` subdir of the path specified in `--build-cache-path`, previously it was +saved under the `core` subdir. The new behaviour is coherent with the default cache directory `/tmp/arduino/cores/...` +when the cache directory is not set by the user. + +### Configuration file now supports only YAML format. + +The Arduino CLI configuration file now supports only the YAML format. + +### gRPC Setting API important changes + +The Settings API has been heavily refactored. Here a quick recap of the new methods: + +- `SettingsGetValue` returns the value of a setting given the key. The returned value is a string encoded in JSON, or + YAML + + ```proto + message SettingsGetValueRequest { + // The key to get + string key = 1; + // The format of the encoded_value (default is + // "json", allowed values are "json" and "yaml) + string value_format = 2; + } + + message SettingsGetValueResponse { + // The value of the key (encoded) + string encoded_value = 1; + } + ``` + +- `SettingsSetValue` change the value of a setting. The value may be specified in JSON, YAML, or as a command-line + argument. If `encoded_value` is an empty string the setting is deleted. + + ```proto + message SettingsSetValueRequest { + // The key to change + string key = 1; + // The new value (encoded), no objects, + // only scalar, or array of scalars are + // allowed. + string encoded_value = 2; + // The format of the encoded_value (default is + // "json", allowed values are "json", "yaml", + // and "cli") + string value_format = 3; + } + ``` + +- `SettingsEnumerate` returns all the available keys and their type (`string`, `int`, `[]string`...) +- `ConfigurationOpen` replaces the current configuration with the one passed as argument. Differently from + `SettingsSetValue`, this call replaces the whole configuration. +- `ConfigurationSave` outputs the current configuration in the specified format. The configuration is not saved in a + file, this call returns just the content, it's a duty of the caller to store the content in a file. +- `ConfigurationGet` return the current configuration in a structured gRPC message `Configuration`. + +The previous gRPC Setting rpc call may be replaced as follows: + +- The old `SettingsMerge` rpc call can now be done trough `SettingsSetValue`. +- The old `SettingsDelete` rpc call can now be done trough `SettingsSetValue` passing the `key` to delete with an empty + `value`. +- The old `SettingsGetAll` rpc call has been replaced by `ConfigurationGet` that returns a structured message + `Configuration` with all the settings populated. +- The old `SettingsWrite` rpc call has been removed. It is partially replaced by `ConfigurationSave` but the actual file + save must be performed by the caller. + +### golang: importing `arduino-cli` as a library now requires the creation of a gRPC service. + +Previously the methods implementing the Arduino business logic were available in the global namespace +`github.com/arduino/arduino-cli/commands/*` and could be called directly. + +The above is no more true. All the global `commands.*` functions have been converted to methods of the +`arduinoCoreServerImpl` struct that implements the gRPC `ArduinoCoreServer` interface. The configuration is now part of +the server internal state. Developers may create a "daemon-less" server by calling the `commands.NewArduinoCoreServer()` +function and can use the returned object to call all the needed gRPC functions. + +The methods of the `ArduinoCoreServer` are generated through the gRPC protobuf definitions, some of those methods are +gRPC "streaming" methods and requires a streaming object to be passed as argument, we provided helper methods to create +these objects. + +For example if previously we could call `commands.Init` like this: + +```go +// old Init signature +func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) error { ... } + +// ... + +// Initialize instance +if err := commands.Init(&rpc.InitRequest{Instance: req.GetInstance()}, respCB); err != nil { + return err +} +``` + +now the `responseCallback` must be wrapped into an `rpc.ArduinoCoreService_InitServer`, and we provided a method exactly +for that: + +```go +// new Init method +func (s *arduinoCoreServerImpl) Init(req *rpc.InitRequest, stream rpc.ArduinoCoreService_InitServer) error { ... } + +/// ... + +// Initialize instance +initStream := InitStreamResponseToCallbackFunction(ctx, respCB) +if err := srv.Init(&rpc.InitRequest{Instance: req.GetInstance()}, initStream); err != nil { + return err +} +``` + +Each gRPC method has an helper method to obtain the corresponding `ArduinoCoreService_*Server` parameter. Here a simple, +but complete, example: + +```go +package main + +import ( + "context" + "fmt" + "io" + "log" + + "github.com/arduino/arduino-cli/commands" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" +) + +func main() { + // Create a new ArduinoCoreServer + srv := commands.NewArduinoCoreServer() + + // Disable logging + logrus.SetOutput(io.Discard) + + // Create a new instance in the server + ctx := context.Background() + resp, err := srv.Create(ctx, &rpc.CreateRequest{}) + if err != nil { + log.Fatal("Error creating instance:", err) + } + instance := resp.GetInstance() + + // Defer the destruction of the instance + defer func() { + if _, err := srv.Destroy(ctx, &rpc.DestroyRequest{Instance: instance}); err != nil { + log.Fatal("Error destroying instance:", err) + } + fmt.Println("Instance successfully destroyed") + }() + + // Initialize the instance + initStream := commands.InitStreamResponseToCallbackFunction(ctx, func(r *rpc.InitResponse) error { + fmt.Println("INIT> ", r) + return nil + }) + if err := srv.Init(&rpc.InitRequest{Instance: instance}, initStream); err != nil { + log.Fatal("Error during initialization:", err) + } + + // Search for platforms and output the result + searchResp, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{Instance: instance}) + if err != nil { + log.Fatal("Error searching for platforms:", err) + } + for _, platformSummary := range searchResp.GetSearchOutput() { + installed := platformSummary.GetInstalledRelease() + meta := platformSummary.GetMetadata() + fmt.Printf("%30s %8s %s\n", meta.GetId(), installed.GetVersion(), installed.GetName()) + } +} +``` + +### YAML output format is no more supported + +The `yaml` option of the `--format` flag is no more supported. Use `--format json` if machine parsable output is needed. + +### gRPC: The `type` field has been renamed to `types` in the `cc.arduino.cli.commands.v1.PlatformRelease` message. + +Rebuilding the gRPC bindings from the proto files requires to rename all access to `type` field as `types`. + +By the way, the wire protocol is not affected by this change, existing clients should work fine without modification. + +### The `type` field has been renamed to `types` in the JSON output including a platform release. + +Since the `type` field may contain multiple values has been renamed to `types` to better express this aspect. + +Previously: + +``` +$ arduino-cli core list --json | jq '.platforms[4].releases."1.8.13"' +{ + "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards", + "version": "1.8.13", + "type": [ + "Arduino" + ], + ... +``` + +Now: + +``` +$ arduino-cli core list --json | jq '.platforms[4].releases."1.8.13"' +{ + "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards", + "version": "1.8.13", + "types": [ + "Arduino" + ], + ... +``` + +### The gRPC `cc.arduino.cli.commands.v1.CompileRequest.export_binaries` changed type. + +Previously the field `export_binaries` was a `google.protobuf.BoolValue`. We used this type because it expresses this +field's optional nature (that is, it could be `true`, `false`, and `null` if not set). + +Now the field is an `optional bool`, since the latest protobuf protocol changes now allows optional fields. + +### Some gRPC responses messages now uses the `oneof` clause. + +The following responses message: + +- `cc.arduino.cli.commands.v1.PlatformInstallResponse` +- `cc.arduino.cli.commands.v1.PlatformDownloadResponse` +- `cc.arduino.cli.commands.v1.PlatformUninstallResponse` +- `cc.arduino.cli.commands.v1.PlatformUpgradeResponse` +- `cc.arduino.cli.commands.v1.DebugResponse` +- `cc.arduino.cli.commands.v1.LibraryDownloadResponse` +- `cc.arduino.cli.commands.v1.LibraryInstallResponse` +- `cc.arduino.cli.commands.v1.LibraryUpgradeResponse` +- `cc.arduino.cli.commands.v1.LibraryUninstallResponse` +- `cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse` +- `cc.arduino.cli.commands.v1.ZipLibraryInstallResponse` +- `cc.arduino.cli.commands.v1.GitLibraryInstallResponse` +- `cc.arduino.cli.commands.v1.MonitorResponse` + +now use the `oneof` clause to make the stream nature of the message more explicit. Just to give an example, the +`PlatformInstallResponse` message has been changed from: + +```proto +message PlatformInstallResponse { + // Progress of the downloads of the platform and tool files. + DownloadProgress progress = 1; + // Description of the current stage of the installation. + TaskProgress task_progress = 2; +} +``` + +to: + +```proto +message PlatformInstallResponse { + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the downloads of the platform and tool files. + DownloadProgress progress = 1; + // Description of the current stage of the installation. + TaskProgress task_progress = 2; + // The installation result. + Result result = 3; + } +} +``` + +The other messages have been changed in a similar way. + +### The gRPC `cc.arduino.cli.commands.v1.UpdateIndexResponse` and `UpdateLibrariesIndexResponse` have changed. + +The responses coming from the update index commands: + +```proto +message UpdateIndexResponse { + // Progress of the package index download. + DownloadProgress download_progress = 1; +} + +message UpdateLibrariesIndexResponse { + // Progress of the libraries index download. + DownloadProgress download_progress = 1; +} +``` + +are now more explicit and contains details about the result of the operation: + +```proto +message UpdateIndexResponse { + message Result { + // The result of the packages index update. + repeated IndexUpdateReport updated_indexes = 1; + } + oneof message { + // Progress of the package index download. + DownloadProgress download_progress = 1; + // The result of the index update. + Result result = 2; + } +} + +message UpdateLibrariesIndexResponse { + message Result { + // The result of the libraries index update. + IndexUpdateReport libraries_index = 1; + } + oneof message { + // Progress of the libraries index download. + DownloadProgress download_progress = 1; + // The result of the index update. + Result result = 2; + } +} +``` + +The `IndexUpdateReport` message contains details for each index update operation performed: + +```proto +message IndexUpdateReport { + enum Status { + // The status of the index update is unspecified. + STATUS_UNSPECIFIED = 0; + // The index has been successfully updated. + STATUS_UPDATED = 1; + // The index was already up to date. + STATUS_ALREADY_UP_TO_DATE = 2; + // The index update failed. + STATUS_FAILED = 3; + // The index update was skipped. + STATUS_SKIPPED = 4; + } + + // The URL of the index that was updated. + string index_url = 1; + // The result of the index update. + Status status = 2; +} +``` + +### The gRPC `cc.arduino.cli.commands.v1.Profile` message has been removed in favor of `SketchProfile` + +The message `Profile` has been replaced with `SketchProfile` in the `InitResponse.profile` field: + +```proto +message InitResponse { + oneof message { + Progress init_progress = 1; + google.rpc.Status error = 2; + // Selected profile information + SketchProfile profile = 3; + } +} +``` + +### The gRPC `cc.arduino.cli.commands.v1.LoadSketchResponse` message has been changed. + +Previously the `LoadSketchResponse` containted all the information about the sketch: + +```proto +message LoadSketchResponse { + string main_file = 1; + string location_path = 2; + repeated string other_sketch_files = 3; + repeated string additional_files = 4; + repeated string root_folder_files = 5; + string default_fqbn = 6; + string default_port = 7; + string default_protocol = 8; + repeated SketchProfile profiles = 9; + SketchProfile default_profile = 10; +} +``` + +Now all the metadata have been moved into a specific `Sketch` message: + +```proto +message LoadSketchResponse { + Sketch sketch = 1; +} + +message Sketch { + string main_file = 1; + string location_path = 2; + repeated string other_sketch_files = 3; + repeated string additional_files = 4; + repeated string root_folder_files = 5; + string default_fqbn = 6; + string default_port = 7; + string default_protocol = 8; + repeated SketchProfile profiles = 9; + SketchProfile default_profile = 10; +} +``` + +### Drop support for `builtin.tools` + +We're dropping the `builtin.tools` support. It was the equivalent of Arduino IDE 1.x bundled tools directory. + +### The gRPC `cc.arduino.cli.commands.v1.MonitorRequest` message has been changed. + +Previously the `MonitorRequest` was a single message used to open the monitor, to stream data, and to change the port +configuration: + +```proto +message MonitorRequest { + // Arduino Core Service instance from the `Init` response. + Instance instance = 1; + // Port to open, must be filled only on the first request + Port port = 2; + // The board FQBN we are trying to connect to. This is optional, and it's + // needed to disambiguate if more than one platform provides the pluggable + // monitor for a given port protocol. + string fqbn = 3; + // Data to send to the port + bytes tx_data = 4; + // Port configuration, optional, contains settings of the port to be applied + MonitorPortConfiguration port_configuration = 5; +} +``` + +Now the meaning of the fields has been clarified with the `oneof` clause, making it more explicit: + +```proto +message MonitorRequest { + oneof message { + // Open request, it must be the first incoming message + MonitorPortOpenRequest open_request = 1; + // Data to send to the port + bytes tx_data = 2; + // Port configuration, contains settings of the port to be changed + MonitorPortConfiguration updated_configuration = 3; + // Close message, set to true to gracefully close a port (this ensure + // that the gRPC streaming call is closed by the daemon AFTER the port + // has been successfully closed) + bool close = 4; + } +} + +message MonitorPortOpenRequest { + // Arduino Core Service instance from the `Init` response. + Instance instance = 1; + // Port to open, must be filled only on the first request + Port port = 2; + // The board FQBN we are trying to connect to. This is optional, and it's + // needed to disambiguate if more than one platform provides the pluggable + // monitor for a given port protocol. + string fqbn = 3; + // Port configuration, optional, contains settings of the port to be applied + MonitorPortConfiguration port_configuration = 4; +} +``` + +Now the message field `MonitorPortOpenRequest.open_request` must be sent in the first message after opening the +streaming gRPC call. + +The identification number of the fields has been changed, this change is not binary compatible with old clients. + +### Some golang modules from `github.com/arduino/arduino-cli/*` have been made private. + +The following golang modules are no longer available as public API: + +- `github.com/arduino/arduino-cli/arduino` +- `github.com/arduino/arduino-cli/buildcache` +- `github.com/arduino/arduino-cli/client_example` +- `github.com/arduino/arduino-cli/configuration` +- `github.com/arduino/arduino-cli/docsgen` +- `github.com/arduino/arduino-cli/executils` +- `github.com/arduino/arduino-cli/i18n` +- `github.com/arduino/arduino-cli/table` + +Most of the `executils` library has been integrated inside the `go-paths` library `github.com/arduino/go-paths-helper`. +The other packages are not intended for usage outside the Arduino CLI, we will keep them internal to allow future +breaking changes as needed. + +### CLI changed JSON output for some `lib`, `core`, `config`, `board`, and `sketch` commands. + +- `arduino-cli lib list --format json` results are now wrapped under `installed_libraries` key + + ``` + { "installed_libraries": [ {...}, {...} ] } + ``` + +- `arduino-cli lib examples --format json` results are now wrapped under `examples` key + + ``` + { "examples": [ {...}, {...} ] } + ``` + +- `arduino-cli core search --format json` and `arduino-cli core list --format json` results are now wrapped under + `platforms` key + + ``` + { "platforms": [ {...}, {...} ] } + ``` + +- `arduino-cli config init --format json` now correctly returns a json object containg the config path + + ``` + { "config_path": "/home/user/.arduino15/arduino-cli.yaml" } + ``` + +- `arduino-cli config dump --format json` results are now wrapped under `config` key + + ``` + { "config": { ... } } + ``` + +- `arduino-cli board search --format json` results are now wrapped under `boards` key + + ``` + { "boards": [ {...}, {...} ] } + ``` + +- `arduino-cli board list --format json` results are now wrapped under `detected_ports` key + + ``` + { "detected_ports": [ {...}, {...} ] } + ``` + +- `arduino-cli sketch new` now correctly returns a json object containing the sketch path + + ``` + { "sketch_path": "/tmp/my_sketch" } + ``` + +### The gRPC response `cc.arduino.cli.commands.v1.CompileResponse` has been changed. + +The `CompilerResponse` message has been refactored to made explicit which fields are intended for streaming the build +process and which fields are part of the build result. + +The old `CompilerResposne`: + +```protoc +message CompileResponse { + // The output of the compilation process (stream) + bytes out_stream = 1; + // The error output of the compilation process (stream) + bytes err_stream = 2; + // The compiler build path + string build_path = 3; + // The libraries used in the build + repeated Library used_libraries = 4; + // The size of the executable split by sections + repeated ExecutableSectionSize executable_sections_size = 5; + // The platform where the board is defined + InstalledPlatformReference board_platform = 6; + // The platform used for the build (if referenced from the board platform) + InstalledPlatformReference build_platform = 7; + // Completions reports of the compilation process (stream) + TaskProgress progress = 8; + // Build properties used for compiling + repeated string build_properties = 9; + // Compiler errors and warnings + repeated CompileDiagnostic diagnostics = 10; +} +``` + +has been split into a `CompilerResponse` and a `BuilderResult`: + +```protoc +message CompileResponse { + oneof message { + // The output of the compilation process (stream) + bytes out_stream = 1; + // The error output of the compilation process (stream) + bytes err_stream = 2; + // Completions reports of the compilation process (stream) + TaskProgress progress = 3; + // The compilation result + BuilderResult result = 4; + } +} + +message BuilderResult { + // The compiler build path + string build_path = 1; + // The libraries used in the build + repeated Library used_libraries = 2; + // The size of the executable split by sections + repeated ExecutableSectionSize executable_sections_size = 3; + // The platform where the board is defined + InstalledPlatformReference board_platform = 4; + // The platform used for the build (if referenced from the board platform) + InstalledPlatformReference build_platform = 5; + // Build properties used for compiling + repeated string build_properties = 7; + // Compiler errors and warnings + repeated CompileDiagnostic diagnostics = 8; +} +``` + +with a clear distinction on which fields are streamed. + +### The gRPC response `cc.arduino.cli.commands.v1.UploadUsingProgrammerResponse` and `cc.arduino.cli.commands.v1.BurnBootloaderResponse` has been changed. + +The old messages: + +```protoc +message UploadUsingProgrammerResponse { + // The output of the upload process. + bytes out_stream = 1; + // The error output of the upload process. + bytes err_stream = 2; +} + +message BurnBootloaderResponse { + // The output of the burn bootloader process. + bytes out_stream = 1; + // The error output of the burn bootloader process. + bytes err_stream = 2; +} +``` + +now have the `oneof` clause that makes explicit the streaming nature of the response: + +```protoc +message UploadUsingProgrammerResponse { + oneof message { + // The output of the upload process. + bytes out_stream = 1; + // The error output of the upload process. + bytes err_stream = 2; + } +} + +message BurnBootloaderResponse { + oneof message { + // The output of the burn bootloader process. + bytes out_stream = 1; + // The error output of the burn bootloader process. + bytes err_stream = 2; + } +} +``` + +### The gRPC `cc.arduino.cli.commands.v1.PlatformRelease` has been changed. + +We've added a new field called `compatible`. This field indicates if the current platform release is installable or not. +It may happen that a platform doesn't have a dependency available for an OS/ARCH, in such cases, if we try to install +the platform it will fail. The new field can be used to know upfront if a specific release is installable. + +### The gRPC `cc.arduino.cli.commands.v1.PlatformSummary` has been changed. + +We've modified the behavior of `latest_version`. Now this field indicates the latest version that can be installed in +the current OS/ARCH. + +### `core list` now returns only the latest version that can be installed. + +Previously, we showed the latest version without checking if all the dependencies were available in the current OS/ARCH. +Now, the latest version will always point to an installable one even if a newer incompatible one is present. + +### `core search` now returns the latest installable version of a core. + +We now show in the `version` column the latest installable version. If none are available then we show a `n/a` label. +The corresponding command with `--format json` now returns the same output of +`arduino-cli core search --all --format json`. + +### `core upgrade` and `core install` will install the latest compatible version. + +Previously, we'd have tried the installation/upgrade of a core even if all the required tools weren't available in the +current OS/ARCH. Now we check this upfront, and allowing the installation of incompatible versions only if a user +explicitly provides it like: `core install arduino:renesas_uno@1.0.2` + +### gRPC service `cc.arduino.cli.settings.v1` has been removed, and all RPC calls have been migrated to `cc.arduino.cli.commands.v1` + +The service `cc.arduino.cli.settings.v1` no longer exists and all existing RPC calls have been moved to the +`cc.arduino.cli.commands.v1` service adding a `Settings` prefix to the names of all messages. The existing RPC calls: + +- `rpc GetAll(GetAllRequest) returns (GetAllResponse)` +- `rpc Merge(MergeRequest) returns (MergeResponse)` +- `rpc GetValue(GetValueRequest) returns (GetValueResponse)` +- `rpc SetValue(SetValueRequest) returns (SetValueResponse)` +- `rpc Write(WriteRequest) returns (WriteResponse)` +- `rpc Delete(DeleteRequest) returns (DeleteResponse)` + +are now renamed to: + +- `rpc SettingsGetAll(SettingsGetAllRequest) returns (SettingsGetAllResponse)` +- `rpc SettingsMerge(SettingsMergeRequest) returns (SettingsMergeResponse)` +- `rpc SettingsGetValue(SettingsGetValueRequest) returns (SettingsGetValueResponse)` +- `rpc SettingsSetValue(SettingsSetValueRequest) returns (SettingsSetValueResponse)` +- `rpc SettingsWrite(SettingsWriteRequest) returns (SettingsWriteResponse)` +- `rpc SettingsDelete(SettingsDeleteRequest) returns (SettingsDeleteResponse)` + +### gRPC `cc.arduino.cli.commands.v1.LibrarySearchRequest` message has been changed. + +The `query` field has been removed, use `search_args` instead. + +### CLI `core list` and `core search` changed JSON output. + +Below is an example of the response containing an object with all possible keys set. + +```json +[ + { + "id": "arduino:avr", + "maintainer": "Arduino", + "website": "http://www.arduino.cc/", + "email": "packages@arduino.cc", + "indexed": true, + "manually_installed": true, + "deprecated": true, + "releases": { + "1.6.2": { + "name": "Arduino AVR Boards", + "version": "1.6.2", + "type": [ + "Arduino" + ], + "installed": true, + "boards": [ + { + "name": "Arduino Robot Motor" + } + ], + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "missing_metadata": true, + "deprecated": true + }, + "1.8.3": { ... } + }, + "installed_version": "1.6.2", + "latest_version": "1.8.3" + } +] +``` + +### gRPC `cc.arduino.cli.commands.v1.PlatformSearchResponse` message has been changed. + +The old behavior was a bit misleading to the client because, to list all the available versions for each platform, we +used to use the `latest` as it was describing the current platform version. We introduced a new message: +`PlatformSummary`, with the intent to make the response more straightforward and less error-prone. + +```protobuf +message PlatformSearchResponse { + // Results of the search. + repeated PlatformSummary search_output = 1; +} + +// PlatformSummary is a structure containing all the information about +// a platform and all its available releases. +message PlatformSummary { + // Generic information about a platform + PlatformMetadata metadata = 1; + // Maps version to the corresponding PlatformRelease + map releases = 2; + // The installed version of the platform, or empty string if none installed + string installed_version = 3; + // The latest available version of the platform, or empty if none available + string latest_version = 4; +} +``` + +The new response contains an array of `PlatformSummary`. `PlatformSummary` contains all the information about a platform +and all its available releases. Releases contain all the PlatformReleases of a specific platform, and the key is the +semver string of a specific version. We've added the `installed_version` and `latest_version` to make more convenient +the access of such values in the map. A few notes about the behavior of the `releases` map: + +- It can be empty if no releases are found +- It can contain a single-release +- It can contain multiple releases +- If in the request we provide the `manually_installed=true`, the key of such release is an empty string. + +### Removed gRPC API: `cc.arduino.cli.commands.v1.PlatformList`, `PlatformListRequest`, and `PlatformListResponse`. + +The following gRPC API have been removed: + +- `cc.arduino.cli.commands.v1.PlatformList`: you can use the already available gRPC method `PlatformSearch` to perform + the same task. Setting the `all_versions=true` and `manually_installed=true` in the `PlatformSearchRequest` returns + all the data needed to produce the same result of the old api. +- `cc.arduino.cli.commands.v1.PlatformListRequest`. +- `cc.arduino.cli.commands.v1.PlatformListResponse`. + +### gRPC `cc.arduino.cli.commands.v1.Platform` message has been changed. + +The old `Platform` and other information such as name, website, and email... contained details about the currently +installed version and the latest available. We noticed an ambiguous use of the `latest` field, especially when such a +message came in the `PlatformSearchResponse` response. In that use case, the latest field contained the specific version +of a particular platform: this is a hack because the value doesn't always reflect the meaning of that property. Another +inconsistent case occurs when a platform maintainer changes the name of a particular release. We always pick the value +from the latest release, but this might not be what we want to do all the time. We concluded that the design of that +message isn't something to be considered future-proof proof, so we decided to modify it as follows: + +```protobuf +// Platform is a structure containing all the information about a single +// platform release. +message Platform { + // Generic information about a platform + PlatformMetadata metadata = 1; + // Information about a specific release of a platform + PlatformRelease release = 2; +} + +// PlatformMetadata contains generic information about a platform (not +// correlated to a specific release). +message PlatformMetadata { + // Platform ID (e.g., `arduino:avr`). + string id = 1; + // Maintainer of the platform's package. + string maintainer = 2; + // A URL provided by the author of the platform's package, intended to point + // to their website. + string website = 3; + // Email of the maintainer of the platform's package. + string email = 4; + // If true this Platform has been installed manually in the user' sketchbook + // hardware folder + bool manually_installed = 5; + // True if the latest release of this Platform has been deprecated + bool deprecated = 6; + // If true the platform is indexed + bool indexed = 7; +} + +// PlatformRelease contains information about a specific release of a platform. +message PlatformRelease { + // Name used to identify the platform to humans (e.g., "Arduino AVR Boards"). + string name = 1; + // Version of the platform release + string version = 5; + // Type of the platform. + repeated string type = 6; + // True if the platform is installed + bool installed = 7; + // List of boards provided by the platform. If the platform is installed, + // this is the boards listed in the platform's boards.txt. If the platform is + // not installed, this is an arbitrary list of board names provided by the + // platform author for display and may not match boards.txt. + repeated Board boards = 8; + // A URL provided by the author of the platform's package, intended to point + // to their online help service. + HelpResources help = 9; + // This field is true if the platform is missing installation metadata (this + // happens if the platform has been installed with the legacy Arduino IDE + // <=1.8.x). If the platform miss metadata and it's not indexed through a + // package index, it may fail to work correctly in some circumstances, and it + // may need to be reinstalled. This should be evaluated only when the + // PlatformRelease is `Installed` otherwise is an undefined behaviour. + bool missing_metadata = 10; + // True this release is deprecated + bool deprecated = 11; +} +``` + +To address all the inconsistencies/inaccuracies we introduced two messages: + +- `PlatformMetadata` contains generic information about a platform (not correlated to a specific release). +- `PlatformRelease` contains information about a specific release of a platform. + +### `debugging_supported` field has been removed from gRPC `cc.arduino.cli.commands.v1.BoardDetails` and `board details` command in CLI + +The `debugging_supported` field has been removed, since the possibility to debug is determined by: + +- the board selected +- the board option selected +- the programmer selected + +the `board details` command has no sufficient information to determine it. If you need to determine if a specific +selection of board + option + programmer supports debugging, use the gRPC call +`cc.arduino.cli.commands.v1.GetDebugConfig`: if the call is successful, it means that the debugging is supported. + +## 0.35.0 ### CLI `debug --info` changed JSON output. @@ -13,7 +879,7 @@ The string field `server_configuration.script` is now an array and has been rena "executable": "/tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/Blink.ino.elf", "toolchain": "gcc", "toolchain_path": "/home/user/.arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4/bin/", - "toolchain_prefix": "arm-none-eabi-", + "toolchain_prefix": "arm-none-eabi", "server": "openocd", "server_path": "/home/user/.arduino15/packages/arduino/tools/openocd/0.10.0-arduino7/bin/openocd", "server_configuration": { @@ -1091,7 +1957,7 @@ https://arduino.github.io/arduino-cli/dev/rpc/commands/#monitorresponse https://arduino.github.io/arduino-cli/dev/rpc/commands/#enumeratemonitorportsettingsrequest https://arduino.github.io/arduino-cli/dev/rpc/commands/#enumeratemonitorportsettingsresponse -https://github.com/arduino/arduino-cli/blob/master/commands/daemon/term_example/main.go +https://github.com/arduino/arduino-cli/blob/752709af9bf1bf8f6c1e6f689b1e8b86cc4e884e/commands/daemon/term_example/main.go ## 0.23.0 @@ -2245,13 +3111,15 @@ Now: debug.executable={build.path}/{build.project_name}.elf debug.toolchain=gcc debug.toolchain.path={runtime.tools.arm-none-eabi-gcc-7-2017q4.path}/bin/ -debug.toolchain.prefix=arm-none-eabi- +debug.toolchain.prefix=arm-none-eabi debug.server=openocd debug.server.openocd.path={runtime.tools.openocd-0.10.0-arduino7.path}/bin/ debug.server.openocd.scripts_dir={runtime.tools.openocd-0.10.0-arduino7.path}/share/openocd/scripts/ debug.server.openocd.script={runtime.platform.path}/variants/{build.variant}/{build.openocdscript} ``` +The `debug.executable` key must be present and non-empty for debugging to be supported. + The `debug.server.XXXX` subkeys are optional and also "free text", this means that the configuration may be extended as needed by the specific server. For now only `openocd` is supported. Anyway, if this change works, any other kind of server may be fairly easily added. diff --git a/docs/configuration.md b/docs/configuration.md index 334dac750a4..ecbc25d65a5 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -12,8 +12,6 @@ - `builtin.libraries` - the libraries in this directory will be available to all platforms without the need for the user to install them, but with the lowest priority over other installed libraries with the same name, it's the equivalent of the Arduino IDE's bundled libraries directory. - - `builtin.tools` - it's a list of directories of tools that will be available to all platforms without the need for - the user to install them, it's the equivalent of the Arduino IDE 1.x bundled tools directory. - `library` - configuration options relating to Arduino libraries. - `enable_unsafe_install` - set to `true` to enable the use of the `--git-url` and `--zip-file` flags with [`arduino-cli lib install`][arduino cli lib install]. These are considered "unsafe" installation methods because @@ -37,11 +35,15 @@ - `updater` - configuration options related to Arduino CLI updates - `enable_notification` - set to `false` to disable notifications of new Arduino CLI releases, defaults to `true` - `build_cache` configuration options related to the compilation cache + - `path` - the path to the build cache, default is `$TMP/arduino`. + - `extra_paths` - a list of paths to look for precompiled artifacts if not found on `build_cache.path` setting. - `compilations_before_purge` - interval, in number of compilations, at which the cache is purged, defaults to `10`. When `0` the cache is never purged. - `ttl` - cache expiration time of build folders. If the cache is hit by a compilation the corresponding build files lifetime is renewed. The value format must be a valid input for [time.ParseDuration()](https://pkg.go.dev/time#ParseDuration), defaults to `720h` (30 days). +- `network` - configuration options related to the network connection. + - `proxy` - URL of the proxy server. ## Configuration methods @@ -97,8 +99,7 @@ $ export ARDUINO_BOARD_MANAGER_ADDITIONAL_URLS="https://downloads.arduino.cc/pac ### Configuration file -[`arduino-cli config init`][arduino-cli config init] creates or updates a configuration file with the current -configuration settings. +[`arduino-cli config init`][arduino-cli config init] creates a new empty configuration file. This allows saving the options set by command line flags or environment variables. For example: @@ -106,28 +107,14 @@ This allows saving the options set by command line flags or environment variable arduino-cli config init --additional-urls https://downloads.arduino.cc/packages/package_staging_index.json ``` -#### File name - -The configuration file must be named `arduino-cli`, with the appropriate file extension for the file's format. - -#### Supported formats - -`arduino-cli config init` creates a YAML file, however a variety of common formats are supported: - -- [JSON] -- [TOML] -- [YAML] -- [Java properties file] -- [HCL] -- envfile -- [INI] - #### Locations -Configuration files in the following locations are recognized by Arduino CLI: +The default configuration file is named `arduino-cli.yaml`. The configuration file is searched in the following +locations, in order of priority: 1. Location specified by the [`--config-file`][arduino cli command reference] command line flag -1. Arduino CLI data directory (as configured by `directories.data`) +1. Location specified by the `ARDUINO_CONFIG_FILE` environment variable +1. Location specified by the `ARDUINO_DIRECTORIES_DATA` environment variable If multiple configuration files are present, the one highest on the above list is used. Configuration files are not combined. diff --git a/docs/getting-started.md b/docs/getting-started.md index 19628282f91..f0e1f97b4bc 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,5 +1,4 @@ -Despite the lack of feature parity at the moment, Arduino CLI provides many of the features you can find in the Arduino -IDE. Let's see some examples. +Arduino CLI provides all the features you can find in the Arduino IDE. Let's see some examples. ## Before you start @@ -8,34 +7,35 @@ IDE. Let's see some examples. ```console $ arduino-cli help core -Arduino Core operations. +Arduino core operations. Usage: - arduino-cli core [command] + arduino-cli core [command] Examples: - ./arduino-cli core update-index + arduino-cli core update-index Available Commands: - download Downloads one or more cores and corresponding tool dependencies. - install Installs one or more cores and corresponding tool dependencies. - list Shows the list of installed platforms. - search Search for a core in Boards Manager. - uninstall Uninstalls one or more cores and corresponding tool dependencies if no more used. - update-index Updates the index of cores. - upgrade Upgrades one or all installed platforms to the latest version. + download Downloads one or more cores and corresponding tool dependencies. + install Installs one or more cores and corresponding tool dependencies. + list Shows the list of installed platforms. + search Search for a core in Boards Manager. + uninstall Uninstalls one or more cores and corresponding tool dependencies if no longer used. + update-index Updates the index of cores. + upgrade Upgrades one or all installed platforms to the latest version. Flags: - -h, --help help for core + -h, --help help for core Global Flags: - --additional-urls strings Additional URLs for Boards Manager. - --config-file string The custom config file (if not specified the default will be used). - --format string The output format, can be [text|json]. (default "text") - --log-file string Path to the file where logs will be written. - --log-format string The output format for the logs, can be [text|json]. - --log-level string Messages with this level and above will be logged. - -v, --verbose Print the logs on the standard output. + --additional-urls strings Comma-separated list of additional URLs for the Boards Manager. + --config-file string The custom config file (if not specified the default will be used). + --json Print the output in JSON format. + --log Print the logs on the standard output. + --log-file string Path to the file where logs will be written. + --log-format string The output format for the logs, can be: text, json + --log-level string Messages with this level and above will be logged. Valid levels are: trace, debug, info, warn, error, fatal, panic + --no-color Disable colored output. Use "arduino-cli core [command] --help" for more information about a command. ``` @@ -349,6 +349,6 @@ metrics: ``` [configuration documentation]: configuration.md -[client_example]: https://github.com/arduino/arduino-cli/blob/master/client_example +[client_example]: https://github.com/arduino/arduino-cli/blob/master/rpc/internal/client_example [grpc reference]: rpc/commands.md [prometheus]: https://prometheus.io/ diff --git a/docs/img/CLI_Go_library_interface_screenshot.png b/docs/img/CLI_Go_library_interface_screenshot.png deleted file mode 100644 index 6fc6787a888..00000000000 Binary files a/docs/img/CLI_Go_library_interface_screenshot.png and /dev/null differ diff --git a/docs/img/CLI_JSON_output_screenshot.png b/docs/img/CLI_JSON_output_screenshot.png deleted file mode 100644 index b1e3952b78b..00000000000 Binary files a/docs/img/CLI_JSON_output_screenshot.png and /dev/null differ diff --git a/docs/img/CLI_configuration_methods_screenshot.png b/docs/img/CLI_configuration_methods_screenshot.png deleted file mode 100644 index 6836d27aecc..00000000000 Binary files a/docs/img/CLI_configuration_methods_screenshot.png and /dev/null differ diff --git a/docs/img/CLI_gRPC_interface_screenshot.png b/docs/img/CLI_gRPC_interface_screenshot.png deleted file mode 100644 index 91250f0c13f..00000000000 Binary files a/docs/img/CLI_gRPC_interface_screenshot.png and /dev/null differ diff --git a/docs/index.md b/docs/index.md index 1e85317f7a6..b02aa1a4b4c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,7 +17,13 @@ Follow the [Getting started guide] to see how to use the most common CLI command The [client_example] folder contains a sample program that shows how to use the gRPC interface of the CLI. Available services and messages are detailed in the [gRPC reference] pages. +## Versioning and backward compatibility policy + +This software is currently under active development: anything can change at any time, API and UI must be considered +unstable until we release version 1.0.0. For more information see our [versioning and backward compatibility] policy. + [installation]: installation.md [getting started guide]: getting-started.md -[client_example]: https://github.com/arduino/arduino-cli/blob/master/client_example +[client_example]: https://github.com/arduino/arduino-cli/blob/master/rpc/internal/client_example [grpc reference]: rpc/commands.md +[versioning and backward compatibility]: versioning.md diff --git a/docs/installation.md b/docs/installation.md index b5499ee6ce9..06cc18a9102 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -79,10 +79,6 @@ in your [`PATH`](https://en.wikipedia.org/wiki/PATH%5F%28variable%29) or add the [macos64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_macOS_64bit.tar.gz [macosarm64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_macOS_ARM64.tar.gz -> **Deprecation notice**: links in the form -> `http://downloads.arduino.cc/arduino-cli/arduino-cli-latest-.tar.bz2` won’t be further updated. That URL -> will provide the version `0.3.7-alpha.preview`, regardless of further releases. - ### Previous versions These are available from the "Assets" sections on the [releases page](https://github.com/arduino/arduino-cli/releases). diff --git a/docs/integration-options.md b/docs/integration-options.md index 90b9b849159..01f32893759 100644 --- a/docs/integration-options.md +++ b/docs/integration-options.md @@ -4,8 +4,8 @@ The Arduino CLI is an open source Command Line Application written in [Golang] t compile, verify and upload sketches to Arduino boards and that’s capable of managing all the software and tools needed in the process. But don’t get fooled by its name: Arduino CLI can do much more than the average console application, as shown by [Arduino IDE 2.x][arduino ide 2.x] and [Arduino Cloud], which rely on it for similar purposes but each one in a -completely different way from the other. In this article we introduce the three pillars of the Arduino CLI, explaining -how we designed the software so that it can be effectively leveraged under different scenarios. +completely different way from the other. In this article we introduce the three pillars of the Arduino CLI, explaining how +we designed the software so that it can be effectively leveraged under different scenarios. ## The first pillar: command line interface @@ -14,9 +14,51 @@ how we designed the software so that it can be effectively leveraged under diffe As you might expect, the first way to use the Arduino CLI is from a terminal and by a human, and user experience plays a key role here. The UX is under a continuous improvement process as we want the tool to be powerful without being too complicated. We heavily rely on sub-commands to provide a rich set of different operations logically grouped together, -so that users can easily explore the interface while getting very specific contextual help. +so that users can easily explore the interface while getting very specific contextual help (even in Chinese!). -![contextual help screenshot][] +``` +$ LANG=zh arduino-cli +Arduino 命令行界面 (arduino-cli) + +用法: + arduino-cli [command] + +示例: + arduino-cli <命令> [参数...] + +可用命令: + board Arduino 开发板命令 + burn-bootloader 上传引导加载程序。 + cache Arduino 缓存命令。 + compile 编译 Arduino 项目 + completion 已生成脚本 + config Arduino 配置命令。 + core Arduino 内核操作。 + daemon 在端口上作为守护进程运行:50051 + debug 调试 Arduino 项目 + help Help about any command + lib Arduino 关于库的命令。 + monitor 开启开发板的通信端口。 + outdated 列出可以升级的内核和库 + sketch Arduino CLI 项目命令 + update 更新内核和库的索引 + upgrade 升级已安装的内核和库。 + upload 上传 Arduino 项目。 + version 显示 Arduino CLI 的版本号。 + +参数: + --additional-urls strings 以逗号分隔的开发板管理器附加地址列表。 + --config-file string 自定义配置文件(如果未指定,将使用默认值)。 + --format string 日志的输出格​​式,可以是:text, json, jsonmini, yaml (default "text") + -h, --help help for arduino-cli + --log 在标准输出上打印日志。 + --log-file string 写入日志的文件的路径。 + --log-format string 日志的输出格​​式,可以是:text, json + --log-level string 记录此级别及以上的消息。有效级别为 trace, debug, info, warn, error, fatal, panic + --no-color Disable colored output. + +使用 "arduino-cli [command] --help" 获取有关命令的更多信息。 +``` ### Console applications for robots @@ -26,34 +68,130 @@ system. There are some niceties to observe when you write software that’s supp one in particular is the ability to run without a configuration file. This is possible because every configuration option you find in the arduino-cli.yaml configuration file can be provided either through a command line flag or by setting an environment variable. To give an example, the following commands are all equivalent and will fetch the -package index used to work with unstable experimental versions of Arduino's cores: +external package index for ESP32 platforms: + +``` +$ cat ~/.arduino15/arduino-cli.yaml +board_manager: + additional_urls: + - https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json + +$ arduino-cli core update-index +Downloading index: package_index.tar.bz2 downloaded +Downloading index: package_esp32_index.json downloaded +``` -![configuration methods screenshot][] +or: + +``` +$ export ARDUINO_BOARD_MANAGER_ADDITIONAL_URLS="https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json" +$ arduino-cli core update-index +Downloading index: package_index.tar.bz2 downloaded +Downloading index: package_esp32_index.json downloaded +``` + +or: + +``` +$ arduino-cli core update-index --additional-urls="https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json" +Downloading index: package_index.tar.bz2 downloaded +Downloading index: package_esp32_index.json downloaded +``` See the [configuration documentation] for details about Arduino CLI's configuration system. Consistent with the previous paragraph, when it comes to providing output the Arduino CLI aims to be user friendly but also slightly verbose, something that doesn’t play well with robots. This is why we added an option to provide output -that’s easy to parse. For example, the following figure shows what getting the software version in [JSON] format looks -like. +that’s easy to parse. For example, the following figure shows what getting the result in [JSON] format and filtering +using the `jq` tools may look like: -![JSON output screenshot][] +``` +$ arduino-cli lib search FlashStorage --format json | jq .libraries[0].latest +{ + "author": "Various", + "version": "1.0.0", + "maintainer": "Arduino ", + "sentence": "The FlashStorage library aims to provide a convenient way to store and retrieve user's data using the non-volatile flash memory of microcontrollers.", + "paragraph": "Useful if the EEPROM is not available or too small. Currently, ATSAMD21 and ATSAMD51 cpu are supported (and consequently every board based on this cpu like the Arduino Zero or Aduino MKR1000).", + "website": "https://github.com/cmaglie/FlashStorage", + "category": "Data Storage", + "architectures": [ + "samd" + ], + "types": [ + "Contributed" + ], + "resources": { + "url": "https://downloads.arduino.cc/libraries/github.com/cmaglie/FlashStorage-1.0.0.zip", + "archive_filename": "FlashStorage-1.0.0.zip", + "checksum": "SHA-256:2f5a349e1c5dc4ec7f7e22268c0f998af3f471b98ed873abd6e671ac67940e39", + "size": 12265, + "cache_path": "libraries" + } +} +``` Even if not related to software design, one last feature that’s worth mentioning is the availability of a one-line -[installation script] that can be used to make the latest version of the Arduino CLI available on most systems with an -HTTP client like curl or wget and a shell like bash. +[installation script] that can be used to make the latest version of the Arduino CLI available on most systems with an HTTP +client like curl or wget and a shell like bash. For more information on Arduino CLI's command line interface, see the [command reference]. ## The second pillar: gRPC interface [gRPC] is a high performance [RPC] framework that can efficiently connect client and server applications. The Arduino -CLI can act as a gRPC server (we call it [daemon mode]), exposing a set of procedures that implement the very same set -of features of the command line interface and waiting for clients to connect and use them. To give an idea, the -following is some [Golang] code capable of retrieving the version number of a remote running Arduino CLI server -instance: +CLI can act as a gRPC server (we call it [daemon mode]), exposing a set of procedures that implement the very same set of +features of the command line interface and waiting for clients to connect and use them. To give an idea, the following is +some [Golang] code capable of retrieving the version number of a remote running Arduino CLI server instance: + +```go +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package main + +import ( + "context" + "log" + "time" -![gRPC interface screenshot][] + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +func main() { + // Establish a connection with the gRPC server + conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + log.Println(err) + log.Fatal("error connecting to arduino-cli rpc server, you can start it by running `arduino-cli daemon`") + } + defer conn.Close() + + // Create an instance of the gRPC clients. + cli := rpc.NewArduinoCoreServiceClient(conn) + + // Now we can call various methods of the API... + versionResp, err := cli.Version(context.Background(), &rpc.VersionRequest{}) + if err != nil { + log.Fatalf("Error getting version: %s", err) + } + log.Printf("arduino-cli version: %v", versionResp.GetVersion()) +} +``` gRPC is language agnostic: even if the example is written in Golang, the programming language used for the client can be Python, JavaScript or any of the many [supported ones][grpc supported languages], leading to a variety of possible @@ -68,13 +206,86 @@ For more information on Arduino CLI's gRPC interface, see the [gRPC interface re Arduino CLI is written in [Golang] and the code is organized in a way that makes it easy to use it as a library by including the modules you need in another Golang application at compile time. Both the first and second pillars rely on -a common Golang API, a set of functions that abstract all the functionalities offered by the Arduino CLI, so that when -we provide a fix or a new feature, they are automatically available to both the command line and gRPC interfaces. The -source modules implementing this API can be imported in other Golang programs to embed a full-fledged Arduino CLI. For -example, this is how some backend services powering [Arduino Cloud] can compile sketches and manage libraries. Just to -give you a taste of what it means to embed the Arduino CLI, here is how to search for a core using the API: +a common Golang API, based on the gRPC protobuf definitions: a set of functions that abstract all the functionalities +offered by the Arduino CLI, so that when we provide a fix or a new feature, they are automatically available to both the +command line and gRPC interfaces. The source modules implementing this API are implemented through the `commands` +package, and it can be imported in other Golang programs to embed a full-fledged Arduino CLI. For example, this is how +some backend services powering [Arduino Cloud] can compile sketches and manage libraries. Just to give you a taste of what +it means to embed the Arduino CLI, here is how to search for a core using the API: + +```go +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package main + +import ( + "context" + "fmt" + "io" + "log" + + "github.com/arduino/arduino-cli/commands" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" +) + +func main() { + // Create a new ArduinoCoreServer + srv := commands.NewArduinoCoreServer() + + // Disable logging + logrus.SetOutput(io.Discard) + + // Create a new instance in the server + ctx := context.Background() + resp, err := srv.Create(ctx, &rpc.CreateRequest{}) + if err != nil { + log.Fatal("Error creating instance:", err) + } + instance := resp.GetInstance() + + // Defer the destruction of the instance + defer func() { + if _, err := srv.Destroy(ctx, &rpc.DestroyRequest{Instance: instance}); err != nil { + log.Fatal("Error destroying instance:", err) + } + fmt.Println("Instance successfully destroyed") + }() + + // Initialize the instance + initStream := commands.InitStreamResponseToCallbackFunction(ctx, func(r *rpc.InitResponse) error { + fmt.Println("INIT> ", r) + return nil + }) + if err := srv.Init(&rpc.InitRequest{Instance: instance}, initStream); err != nil { + log.Fatal("Error during initialization:", err) + } -![Go library interface screenshot][] + // Search for platforms and output the result + searchResp, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{Instance: instance}) + if err != nil { + log.Fatal("Error searching for platforms:", err) + } + for _, platformSummary := range searchResp.GetSearchOutput() { + installed := platformSummary.GetInstalledRelease() + meta := platformSummary.GetMetadata() + fmt.Printf("%30s %8s %s\n", meta.GetId(), installed.GetVersion(), installed.GetName()) + } +} +``` Embedding the Arduino CLI is limited to Golang applications and requires a deep knowledge of its internals. For the average use case, the gRPC interface might be a better alternative. Nevertheless, this remains a valid option that we @@ -85,7 +296,8 @@ use and provide support for. You can start playing with the Arduino CLI right away. The code is open source and [the repo][arduino cli repository] contains [example code showing how to implement a gRPC client][grpc client example]. If you’re curious about how we designed the low level API, have a look at the [commands package] and don’t hesitate to leave feedback on the [issue -tracker] if you’ve got a use case that doesn’t fit one of the three pillars. +tracker] +if you’ve got a use case that doesn’t fit one of the three pillars. [golang]: https://go.dev/ [arduino ide 2.x]: https://github.com/arduino/arduino-ide @@ -102,11 +314,7 @@ tracker] if you’ve got a use case that doesn’t fit one of the three pillars. [grpc interface reference]: rpc/commands.md [grpc supported languages]: https://grpc.io/docs/languages/ [arduino cli repository]: https://github.com/arduino/arduino-cli -[grpc client example]: https://github.com/arduino/arduino-cli/blob/master/client_example +[grpc client example]: https://github.com/arduino/arduino-cli/blob/master/rpc/internal/client_example [commands package]: https://github.com/arduino/arduino-cli/tree/master/commands [issue tracker]: https://github.com/arduino/arduino-cli/issues [contextual help screenshot]: img/CLI_contextual_help_screenshot.png -[configuration methods screenshot]: img/CLI_configuration_methods_screenshot.png -[json output screenshot]: img/CLI_JSON_output_screenshot.png -[grpc interface screenshot]: img/CLI_gRPC_interface_screenshot.png -[go library interface screenshot]: img/CLI_Go_library_interface_screenshot.png diff --git a/docs/platform-specification.md b/docs/platform-specification.md index c34047bf8d9..fce10932c4a 100644 --- a/docs/platform-specification.md +++ b/docs/platform-specification.md @@ -728,6 +728,24 @@ the [board and core platform](#platform-terminology) of the currently selected b platforms may now need to define copies of the programmers that were previously assumed to be provided by another platform. +### Set a default programmer for a board (since Arduino CLI >=0.35.0, Arduino IDE >=2.3.0) + +A default programmer for each board may be specified through the `programmer.default` directive in the board definition: + +``` +BOARD_ID.programmer.default=PROGRAMMER_ID +``` + +The default programmer will be selected automatically if the user do not specifiy or select another programmer. This may +be useful for boards with an on-board programmer/debugger. + +For example if we want to set Atmel ICE as the default programmer for the Arduino UNO we would add the following line to +the `boards.txt` file: + +``` +uno.programmer.default=atmel-ice +``` + ## Tools The Arduino development software uses external command line tools to upload the compiled sketch to the board or to burn @@ -1351,12 +1369,15 @@ to provide some debug configuration directives. All the debug directives are grouped under the `debug.*` directives. Here is the complete list of the supported directives: +- `debug.executable`: is the absolute path to the compiled binary of the sketch - `debug.toolchain`: is a unique identifier of the required toolchain, currently we support `gcc` (and compatible) only - `debug.toolchain.path`: is the absolute path to the toolchain directory - `debug.toolchain.prefix`: is the prefix of the toolchain (for example `arm-none-eabi-`) - `debug.server`: is a unique identifier of the required debug server, currently we support only `openocd` - `debug.svd_file`: is the absolute path to the SVD descriptor. +If the `debug.executable` property is not present or is empty debugging will not be allowed. + OpenOCD server specific configurations: - `debug.server.openocd.path`: is the absolute path to the OpenOCD directory @@ -1403,6 +1424,105 @@ will result in the following JSON to be merged in the Arduino IDE generated `lau } ``` +All the values are converted by default to a string in the resulting JSON. If another type is needed the value can be +prefixed with the tags `[boolean]`, `[number]`, `[string]` or `[object]` to force a specific type in the JSON. Moreover +the hierarchy of the properties may be used to build JSON objects. For example: + +``` +debug.cortex-debug.custom.aBoolean=[boolean]true +debug.cortex-debug.custom.aNumber=[number]10 +debug.cortex-debug.custom.anotherNumber=[number]10.20 +debug.cortex-debug.custom.anObject=[object]{"key":"value", "boolean":true} +debug.cortex-debug.custom.anotherObject.key=value +debug.cortex-debug.custom.anotherObject.boolean=[boolean]true +``` + +will result in the following JSON: + +```json +{ + "aBoolean": true, + "aNumber": 10, + "anotherNumber": 10.2, + "anObject": { + "boolean": true, + "key": "value" + }, + "anotherObject": { + "boolean": true, + "key": "value" + } +} +``` + +### Additional debugger config selection via `debug.additional_config` directive. + +It is possible to use any sub-tree of the platform configuration to override the debugger configuration using the +directive `debug.additional_config=CONFIG_PREFIX`. This rule will use the configuration under `CONFIG_PREFIX.*` to +override the current `debug.*` config. + +This change allows a more convenient rationalization and selection of the configs to apply to the debugger. For example, +we could factor common parts of a configuration in the platform.txt file: + +``` +# CONFIG 1 +debug-overrides.esp32.cortex-debug.custom.name=Arduino on ESP32 +debug-overrides.esp32.cortex-debug.custom.request=attach +debug-overrides.esp32.cortex-debug.custom.postAttachCommands.0=set remote hardware-watchpoint-limit 2 +debug-overrides.esp32.cortex-debug.custom.postAttachCommands.1=monitor reset halt +debug-overrides.esp32.cortex-debug.custom.postAttachCommands.2=monitor gdb_sync +debug-overrides.esp32.cortex-debug.custom.postAttachCommands.3=thb setup +debug-overrides.esp32.cortex-debug.custom.postAttachCommands.4=c +debug-overrides.esp32.cortex-debug.custom.overrideRestartCommands.0=monitor reset halt +debug-overrides.esp32.cortex-debug.custom.overrideRestartCommands.1=monitor gdb_sync +debug-overrides.esp32.cortex-debug.custom.overrideRestartCommands.2=thb setup +debug-overrides.esp32.cortex-debug.custom.overrideRestartCommands.3=c + +# CONFIG 2 +debug-overrides.esp32s2.cortex-debug.custom.name=Arduino on ESP32-S2 +debug-overrides.esp32s2.cortex-debug.custom.request=attach +debug-overrides.esp32s2.cortex-debug.custom.postAttachCommands.0=set remote hardware-watchpoint-limit 2 +debug-overrides.esp32s2.cortex-debug.custom.postAttachCommands.1=monitor reset halt +debug-overrides.esp32s2.cortex-debug.custom.postAttachCommands.2=monitor gdb_sync +debug-overrides.esp32s2.cortex-debug.custom.postAttachCommands.3=thb setup +debug-overrides.esp32s2.cortex-debug.custom.postAttachCommands.4=c +debug-overrides.esp32s2.cortex-debug.custom.overrideRestartCommands.0=monitor reset halt +debug-overrides.esp32s2.cortex-debug.custom.overrideRestartCommands.1=monitor gdb_sync +debug-overrides.esp32s2.cortex-debug.custom.overrideRestartCommands.2=thb setup +debug-overrides.esp32s2.cortex-debug.custom.overrideRestartCommands.3=c +``` + +and choose which one to use depending on the board in the boards.txt file: + +``` +myboard.name=My Board with esp32 +myboard.debug.additional_config=debug-overrides.esp32 + +anotherboard.name=My Board with esp32s2 +anotherboard.debug.additional_config=debug-overrides.esp32s2 +... +``` + +Another possibility is to compose the configuration using another variable present in the board configuration, for +example if in the `platform.txt` we add: + +``` +debug.additional_config=debug-overrides.{build.mcu} +``` + +we may use the `build.mcu` value as a "selector" for the board-specific debug configuration that is overlapped to the +global debug configuration: + +``` +myboard.name=My Board with esp32 +myboard.build.mcu=esp32 +... + +anotherboard.name=My Board with esp32s2 +anotherboard.build.mcu=esp32s2 +... +``` + ### Optimization level for debugging The compiler optimization level that is appropriate for normal usage will often not provide a good experience while diff --git a/docs/sketch-build-process.md b/docs/sketch-build-process.md index 6fad171187e..9f1f0067571 100644 --- a/docs/sketch-build-process.md +++ b/docs/sketch-build-process.md @@ -137,8 +137,8 @@ The "location priority" is determined as follows (in order of highest to lowest #### Location priorities in Arduino Web Editor -The location priorities system works in the same manner in [Arduino Web Editor](https://create.arduino.cc/editor), but -its cloud-based nature may make the locations of libraries less obvious. +The location priorities system works in the same manner in [Arduino Web Editor](https://create.arduino.cc/), but its +cloud-based nature may make the locations of libraries less obvious. 1. **Custom**: the imported libraries, shown under the **Libraries > Custom** tab. - These libraries are under `/tmp/\/custom` diff --git a/docs/sketch-project-file.md b/docs/sketch-project-file.md index 640ede7505e..896e66eb16a 100644 --- a/docs/sketch-project-file.md +++ b/docs/sketch-project-file.md @@ -10,6 +10,7 @@ multiple profiles. Each profile will define: - The board FQBN +- The programmer to use - The target core platform name and version (with the 3rd party platform index URL if needed) - A possible core platform name and version, that is a dependency of the target core platform (with the 3rd party platform index URL if needed) @@ -22,6 +23,7 @@ profiles: : notes: fqbn: + programmer: platforms: - platform: () platform_index_url: <3RD_PARTY_PLATFORM_URL> @@ -50,6 +52,7 @@ otherwise below). The available fields are: - `libraries:` is a section where the required libraries to build the project are defined. This section is optional. - `` is the version required for the library, for example, `1.0.0`. - `` is a free text string available to the developer to add comments. This field is optional. +- `` is the programmer that will be used. This field is optional. A complete example of a sketch project file may be the following: @@ -78,9 +81,9 @@ profiles: notes: testing the very limit of the AVR platform, it will be very unstable fqbn: attiny:avr:ATtinyX5:cpu=attiny85,clock=internal16 platforms: - - platform: attiny:avr@1.0.2 + - platform: attiny:avr (1.0.2) platform_index_url: https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json - - platform: arduino:avr@1.8.3 + - platform: arduino:avr (1.8.3) libraries: - ArduinoIoTCloud (1.0.2) - Arduino_ConnectionHandler (0.6.4) @@ -134,6 +137,7 @@ The sketch project file may be used to set the default value for some command li particular: - The `default_fqbn` key sets the default value for the `--fqbn` flag +- The `default_programmer` key sets the default value for the `--programmer` flag - The `default_port` key sets the default value for the `--port` flag - The `default_protocol` key sets the default value for the `--protocol` flag - The `default_profile` key sets the default value for the `--profile` flag @@ -141,12 +145,14 @@ particular: For example: ``` -default_fqbn: arduino:avr:uno +default_fqbn: arduino:samd:mkr1000 +default_programmer: atmel_ice default_port: /dev/ttyACM0 default_protocol: serial default_profile: myprofile ``` -With this configuration set, it is not necessary to specify the `--fqbn`, `--port`, `--protocol` or `--profile` flags to -the [`arduino-cli compile`](commands/arduino-cli_compile.md) or [`arduino-cli upload`](commands/arduino-cli_upload.md) -commands when compiling or uploading the sketch. +With this configuration set, it is not necessary to specify the `--fqbn`, `--programmer`, `--port`, `--protocol` or +`--profile` flags to the [`arduino-cli compile`](commands/arduino-cli_compile.md), +[`arduino-cli upload`](commands/arduino-cli_upload.md) or [`arduino-cli debug`](commands/arduino-cli_debug.md) commands +when compiling, uploading or debugging the sketch. diff --git a/docs/versioning.md b/docs/versioning.md new file mode 100644 index 00000000000..17b0414a8ed --- /dev/null +++ b/docs/versioning.md @@ -0,0 +1,120 @@ +# Backward compatibility policy for arduino-cli. + +The arduino-cli project follows a strict semantic versioning policy. We are committing not to make breaking changes in +minor releases of Arduino CLI 1.x.x. + +The release rules are the following: + +- Alpha phase `0.0.X`: In this phase, the software is going through a quick iteration of the API, each release (with + increments of X) may contain massive and breaking changes. +- Beta phase `0.Y.X`: The software is usable, but the API is still not settled and is under continuous testing and + review. Breaking changes are expected. Bug fixes and new features are made as patch releases (with increments of X). + Breaking changes due to API refinements are made as minor releases (with increments of Y). +- Production release-candidate `1.0.0-rc.X`: in this phase, the software is considered ready for release and distributed + to the users for final testing. Release candidates (with increments of X) are possible for bug fixes only. +- **Production release `1.Y.X`**: For the production releases backward compatibility is guaranteed, and all the breaking + changes are cumulated for the next major release (2.0.0). Bug fixes are made as patch releases (with increments of X); + New features are released as minor releases (with increments of Y). +- Next major release development `>=2.0.0` and up: see below. + +## Backward compatibility guarantees and definition of "breaking change" + +There are three main user facing API in the arduino-cli project: + +- the standalone command-line API +- the gRPC API +- the golang API + +Let's examine the backward compatibility rules for each one of these categories. + +### Breaking changes in the command-line app + +Changes in the command-line interface are considered breaking if: + +- a command, a positional argument, or a flag is removed or renamed +- a command, a positional argument, or a flag behavior is changed +- an optional positional argument or a flag is made mandatory +- a positional argument or a flag format is changed + +The following changes to the command-line syntax are NOT considered breaking changes: + +- a new command is added +- a new optional positional argument is added +- a new optional flag is added + +Any change in the **human-readable** text output is **NOT** considered a breaking change. In general, the human-readable +text is subject to translation and small adjustments in natural language syntax and presentation. + +We will consider breaking changes only in the **machine-readable** output of the commands using the `--json` flag. In +particular, we have a breaking change in the JSON command output if: + +- a key in a JSON object is renamed or removed. +- a value in a JSON object or array changes meaning or changes format. + +We do **NOT** have a breaking change if: + +- a new key is added to an existing JSON object + +### Breaking changes in the gRPC API + +To ensure gRPC API backward compatibility the only allowed changes are: + +- adding a new service +- adding a new method to a service +- adding a field to an existing message +- adding a value to an enum + +In general, **adding** to the gRPC API is allowed, **ANY OTHER** change will be considered a breaking change, some +examples are: + +- renaming a service +- renaming a method +- changing a method signature +- renaming a field in a message +- changing a field type in a message +- deleting a field in a message +- etc. + +The gRPC API is defined as a gRPC service running in the endpoint `cc.arduino.cli.commands.v1`. When a breaking change +happens a new gRPC endpoint is created from the existing API. The first breaking change will be implemented in the new +service `cc.arduino.cli.commands.v2`. + +### Breaking changes in the golang API + +The public golang API from the import path `github.com/arduino/arduino-cli` is guaranteed to be stable. Breaking changes +in the API will follow the go-lang guidelines and will be implemented by changing the import path by adding the `/v2` +suffix: `github.com/arduino/arduino-cli/v2`. + +## Development process for the next major releases. + +The development of the 2.0.0 release will proceed in a separate git branch `2.x.x`, in parallel with the 1.0.0 releases +that will continue on the `master` git branch. + +New features and bug fixes should be made on the `master` branch and ported to the `2.x.x` once completed (unless it's a +2.0 specific change, in that case, it's fine to develop directly on the `2.x.x` branch). + +Future releases and pre-releases of the `2.x.x` will follow the following versioning policy: + +- Beta `2.0.0-beta.X.Y`: The v2 API is still under testing and review. Bug fixes and new features are released with + increments of Y. Breaking changes are still possible and released with increments of X. +- Release Candidate `2.0.0-rc.X`: The v2 API is ready for release. Release candidates are distributed for user testing. + Bug-fix releases only are allowed (with increments of X). +- `2.0.0` and up: The same rules for the `1.0.0` applies. + +After the 2.0.0 release, the `master` branch will be moved to `2.x.x`, and the 1.0 branch will be tracked by a new +`1.x.x` branch. + +The command-line interface for CLI 2.0 will be incompatible with CLI 1.0. Some commands may still be compatible though +depending on the amount of changes. + +The gRPC daemon is flexible enough to run both services v1 and v2 at the same time. This capability allows a deprecation +period to allow a soft transition from v1 API to v2 API. We will deprecate the v1 API in the CLI 2.0 series but we will +continue to support it until the next major release CLI 3.0. At that point, we may decide to drop the support for the v1 +API entirely but, depending on the balance between user demand and maintenance effort, we may decide to continue to +support it. + +The go-lang API import path will be updated, following the go modules guidelines, by adding the `/v2` suffix: +`github.com/arduino/arduino-cli/v2`. + +Unlike the gRPC counterpart, we will not guarantee a deprecation policy and a soft transition period for the go-lang API +(but again depending on the balance between user demand and maintenance effort we may decide to deprecate some API). diff --git a/executils/executils.go b/executils/executils.go deleted file mode 100644 index 573db1a3ded..00000000000 --- a/executils/executils.go +++ /dev/null @@ -1,76 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package executils - -import ( - "bytes" - "io" - "os/exec" - - "github.com/arduino/arduino-cli/i18n" -) - -var tr = i18n.Tr - -// PipeCommands executes the commands received as input by feeding the output of -// one to the input of the other, exactly like Unix Pipe (|). -// Returns the output of the final command and the eventual error. -// -// code inspired by https://gist.github.com/tyndyll/89fbb2c2273f83a074dc -func PipeCommands(commands ...*exec.Cmd) ([]byte, error) { - var errorBuffer, outputBuffer bytes.Buffer - pipeStack := make([]*io.PipeWriter, len(commands)-1) - i := 0 - for ; i < len(commands)-1; i++ { - stdinPipe, stdoutPipe := io.Pipe() - commands[i].Stdout = stdoutPipe - commands[i].Stderr = &errorBuffer - commands[i+1].Stdin = stdinPipe - pipeStack[i] = stdoutPipe - } - commands[i].Stdout = &outputBuffer - commands[i].Stderr = &errorBuffer - - if err := call(commands, pipeStack); err != nil { - return nil, err - } - - return outputBuffer.Bytes(), nil -} - -func call(stack []*exec.Cmd, pipes []*io.PipeWriter) (err error) { - if stack[0].Process == nil { - if err = stack[0].Start(); err != nil { - return err - } - } - if len(stack) > 1 { - if err = stack[1].Start(); err != nil { - return err - } - defer func() { - pipes[0].Close() - err = call(stack[1:], pipes[1:]) - }() - } - return stack[0].Wait() -} - -// TellCommandNotToSpawnShell avoids that the specified Cmd display a small -// command prompt while runnning on Windows. It has no effects on other OS. -func TellCommandNotToSpawnShell(cmd *exec.Cmd) { - tellCommandNotToSpawnShell(cmd) -} diff --git a/executils/null.go b/executils/null.go deleted file mode 100644 index e0bb37e75b1..00000000000 --- a/executils/null.go +++ /dev/null @@ -1,36 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package executils - -import "io" - -// NullReader is an io.Reader that will always return EOF -var NullReader = &nullReader{} - -type nullReader struct{} - -func (r *nullReader) Read(buff []byte) (int, error) { - return 0, io.EOF -} - -// NullWriter is an io.Writer that discards any output -var NullWriter = &nullWriter{} - -type nullWriter struct{} - -func (r *nullWriter) Write(buff []byte) (int, error) { - return len(buff), nil -} diff --git a/executils/output.go b/executils/output.go deleted file mode 100644 index 1049ff01699..00000000000 --- a/executils/output.go +++ /dev/null @@ -1,82 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package executils - -import ( - "bufio" - "fmt" - "os" - "os/exec" -) - -// OutputListener is a callback interface to receive output messages from process -type OutputListener interface { - Output(msg string) -} - -// AttachStdoutListener adds an OutputListener to the stdout of the process -func AttachStdoutListener(cmd *exec.Cmd, listener OutputListener) error { - stdout, err := cmd.StdoutPipe() - if err != nil { - return fmt.Errorf(tr("can't retrieve standard output stream: %s"), err) - } - - stdoutCopy := bufio.NewScanner(stdout) - stdoutCopy.Split(bufio.ScanLines) - go func() { - for stdoutCopy.Scan() { - listener.Output(stdoutCopy.Text()) - } - }() - - return nil -} - -// AttachStderrListener adds an OutputListener to the stderr of the process -func AttachStderrListener(cmd *exec.Cmd, listener OutputListener) error { - stderr, err := cmd.StderrPipe() - if err != nil { - return fmt.Errorf(tr("can't retrieve standard error stream: %s"), err) - } - - stderrCopy := bufio.NewScanner(stderr) - stderrCopy.Split(bufio.ScanLines) - go func() { - for stderrCopy.Scan() { - listener.Output(stderrCopy.Text()) - } - }() - - return nil -} - -// PrintToStdout is an OutputListener that outputs messages to standard output -var PrintToStdout = &printToStdout{} - -type printToStdout struct{} - -func (*printToStdout) Output(msg string) { - fmt.Fprintln(os.Stdout, msg) -} - -// PrintToStderr is an OutputListener that outputs messages to standard error -var PrintToStderr = &printToStderr{} - -type printToStderr struct{} - -func (*printToStderr) Output(msg string) { - fmt.Fprintln(os.Stderr, msg) -} diff --git a/executils/process.go b/executils/process.go deleted file mode 100644 index a566226e73f..00000000000 --- a/executils/process.go +++ /dev/null @@ -1,199 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package executils - -import ( - "bytes" - "context" - "io" - "os" - "os/exec" - - "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" -) - -// Process is representation of an external process run -type Process struct { - cmd *exec.Cmd -} - -// NewProcess creates a command with the provided command line arguments -// and environment variables (that will be added to the parent os.Environ). -// The argument args[0] is the path to the executable, the remainder are the -// arguments to the command. -func NewProcess(extraEnv []string, args ...string) (*Process, error) { - if len(args) == 0 { - return nil, errors.New(tr("no executable specified")) - } - p := &Process{ - cmd: exec.Command(args[0], args[1:]...), - } - p.cmd.Env = append(os.Environ(), extraEnv...) - TellCommandNotToSpawnShell(p.cmd) - - // This is required because some tools detects if the program is running - // from terminal by looking at the stdin/out bindings. - // https://github.com/arduino/arduino-cli/issues/844 - p.cmd.Stdin = NullReader - return p, nil -} - -// NewProcessFromPath creates a command from the provided executable path, -// additional environment vars (in addition to the system default ones) -// and command line arguments. -func NewProcessFromPath(extraEnv []string, executable *paths.Path, args ...string) (*Process, error) { - processArgs := []string{executable.String()} - processArgs = append(processArgs, args...) - return NewProcess(extraEnv, processArgs...) -} - -// RedirectStdoutTo will redirect the process' stdout to the specified -// writer. Any previous redirection will be overwritten. -func (p *Process) RedirectStdoutTo(out io.Writer) { - p.cmd.Stdout = out -} - -// RedirectStderrTo will redirect the process' stdout to the specified -// writer. Any previous redirection will be overwritten. -func (p *Process) RedirectStderrTo(out io.Writer) { - p.cmd.Stderr = out -} - -// StdinPipe returns a pipe that will be connected to the command's standard -// input when the command starts. The pipe will be closed automatically after -// Wait sees the command exit. A caller need only call Close to force the pipe -// to close sooner. For example, if the command being run will not exit until -// standard input is closed, the caller must close the pipe. -func (p *Process) StdinPipe() (io.WriteCloser, error) { - if p.cmd.Stdin == NullReader { - p.cmd.Stdin = nil - } - return p.cmd.StdinPipe() -} - -// StdoutPipe returns a pipe that will be connected to the command's standard -// output when the command starts. -// -// Wait will close the pipe after seeing the command exit, so most callers -// don't need to close the pipe themselves. It is thus incorrect to call Wait -// before all reads from the pipe have completed. -// For the same reason, it is incorrect to call Run when using StdoutPipe. -func (p *Process) StdoutPipe() (io.ReadCloser, error) { - return p.cmd.StdoutPipe() -} - -// StderrPipe returns a pipe that will be connected to the command's standard -// error when the command starts. -// -// Wait will close the pipe after seeing the command exit, so most callers -// don't need to close the pipe themselves. It is thus incorrect to call Wait -// before all reads from the pipe have completed. -// For the same reason, it is incorrect to use Run when using StderrPipe. -func (p *Process) StderrPipe() (io.ReadCloser, error) { - return p.cmd.StderrPipe() -} - -// Start will start the underliyng process. -func (p *Process) Start() error { - return p.cmd.Start() -} - -// Wait waits for the command to exit and waits for any copying to stdin or copying -// from stdout or stderr to complete. -func (p *Process) Wait() error { - // TODO: make some helpers to retrieve exit codes out of *ExitError. - return p.cmd.Wait() -} - -// Signal sends a signal to the Process. Sending Interrupt on Windows is not implemented. -func (p *Process) Signal(sig os.Signal) error { - return p.cmd.Process.Signal(sig) -} - -// Kill causes the Process to exit immediately. Kill does not wait until the Process has -// actually exited. This only kills the Process itself, not any other processes it may -// have started. -func (p *Process) Kill() error { - return p.cmd.Process.Kill() -} - -// SetDir sets the working directory of the command. If Dir is the empty string, Run -// runs the command in the calling process's current directory. -func (p *Process) SetDir(dir string) { - p.cmd.Dir = dir -} - -// GetDir gets the working directory of the command. -func (p *Process) GetDir() string { - return p.cmd.Dir -} - -// SetDirFromPath sets the working directory of the command. If path is nil, Run -// runs the command in the calling process's current directory. -func (p *Process) SetDirFromPath(path *paths.Path) { - if path == nil { - p.cmd.Dir = "" - } else { - p.cmd.Dir = path.String() - } -} - -// Run starts the specified command and waits for it to complete. -func (p *Process) Run() error { - return p.cmd.Run() -} - -// SetEnvironment set the environment for the running process. Each entry is of the form "key=value". -// System default environments will be wiped out. -func (p *Process) SetEnvironment(values []string) { - p.cmd.Env = append([]string{}, values...) -} - -// RunWithinContext starts the specified command and waits for it to complete. If the given context -// is canceled before the normal process termination, the process is killed. -func (p *Process) RunWithinContext(ctx context.Context) error { - if err := p.Start(); err != nil { - return err - } - completed := make(chan struct{}) - defer close(completed) - go func() { - select { - case <-ctx.Done(): - p.Kill() - case <-completed: - } - }() - return p.Wait() -} - -// RunAndCaptureOutput starts the specified command and waits for it to complete. If the given context -// is canceled before the normal process termination, the process is killed. The standard output and -// standard error of the process are captured and returned at process termination. -func (p *Process) RunAndCaptureOutput(ctx context.Context) ([]byte, []byte, error) { - stdout := &bytes.Buffer{} - stderr := &bytes.Buffer{} - p.RedirectStdoutTo(stdout) - p.RedirectStderrTo(stderr) - err := p.RunWithinContext(ctx) - return stdout.Bytes(), stderr.Bytes(), err -} - -// GetArgs returns the command arguments -func (p *Process) GetArgs() []string { - return p.cmd.Args -} diff --git a/executils/testdata/delay/.gitignore b/executils/testdata/delay/.gitignore deleted file mode 100644 index fd5812a40bb..00000000000 --- a/executils/testdata/delay/.gitignore +++ /dev/null @@ -1 +0,0 @@ -delay* diff --git a/go.mod b/go.mod index 3cb1be40908..3ef27bbed59 100644 --- a/go.mod +++ b/go.mod @@ -6,59 +6,61 @@ go 1.21 replace github.com/mailru/easyjson => github.com/cmaglie/easyjson v0.8.1 require ( - github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 - github.com/arduino/go-paths-helper v1.9.2 + github.com/ProtonMail/go-crypto v1.1.0-alpha.0 + github.com/arduino/go-paths-helper v1.12.0 github.com/arduino/go-properties-orderedmap v1.8.0 + github.com/arduino/go-serial-utils v0.1.2 github.com/arduino/go-timeutils v0.0.0-20171220113728-d1dd9e313b1b github.com/arduino/go-win32-utils v1.0.0 + github.com/arduino/pluggable-discovery-protocol-handler/v2 v2.2.0 + github.com/arduino/pluggable-monitor-protocol-handler v0.9.2 github.com/cmaglie/pb v1.0.27 github.com/codeclysm/extract/v3 v3.1.1 github.com/djherbis/buffer v1.2.0 github.com/djherbis/nio/v3 v3.0.1 - github.com/fatih/color v1.15.0 + github.com/fatih/color v1.17.0 github.com/go-git/go-git/v5 v5.4.2 - github.com/gofrs/uuid/v5 v5.0.0 + github.com/gofrs/uuid/v5 v5.2.0 github.com/leonelquinteros/gotext v1.4.0 github.com/mailru/easyjson v0.7.7 github.com/marcinbor85/gohex v0.0.0-20210308104911-55fb1c624d84 github.com/mattn/go-colorable v0.1.13 github.com/mattn/go-isatty v0.0.20 - github.com/pkg/errors v0.9.1 github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 - github.com/rogpeppe/go-internal v1.11.0 + github.com/rogpeppe/go-internal v1.12.0 github.com/schollz/closestmatch v2.1.0+incompatible github.com/sirupsen/logrus v1.9.3 - github.com/spf13/cobra v1.7.0 - github.com/spf13/viper v1.17.0 - github.com/stretchr/testify v1.8.4 + github.com/spf13/cobra v1.8.0 + github.com/spf13/viper v1.18.2 + github.com/stretchr/testify v1.9.0 github.com/xeipuuv/gojsonschema v1.2.0 go.bug.st/cleanup v1.0.0 - go.bug.st/downloader/v2 v2.1.1 - go.bug.st/relaxed-semver v0.11.0 - go.bug.st/serial v1.6.1 + go.bug.st/downloader/v2 v2.2.0 + go.bug.st/relaxed-semver v0.12.0 go.bug.st/testifyjson v1.1.1 - golang.org/x/term v0.13.0 - golang.org/x/text v0.13.0 - google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a - google.golang.org/grpc v1.59.0 - google.golang.org/protobuf v1.31.0 + golang.org/x/term v0.20.0 + golang.org/x/text v0.15.0 + google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 + google.golang.org/grpc v1.64.0 + google.golang.org/protobuf v1.34.1 gopkg.in/yaml.v3 v3.0.1 ) require ( github.com/Microsoft/go-winio v0.6.1 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/cloudflare/circl v1.3.3 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/cloudflare/circl v1.3.7 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect github.com/creack/goselect v0.1.2 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect github.com/h2non/filetype v1.1.3 // indirect + github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -77,25 +79,26 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sagikazarmark/locafero v0.3.0 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.10.0 // indirect - github.com/spf13/cast v1.5.1 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + go.bug.st/serial v1.6.1 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.9.0 // indirect - golang.org/x/crypto v0.14.0 // indirect + golang.org/x/crypto v0.21.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/sys v0.20.0 // indirect golang.org/x/tools v0.13.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect diff --git a/go.sum b/go.sum index 7de473165d6..96f3dd7f035 100644 --- a/go.sum +++ b/go.sum @@ -1,85 +1,42 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v1.1.0-alpha.0 h1:nHGfwXmFvJrSR9xu8qL7BkO4DqTHXE9N5vPhgY2I+j0= +github.com/ProtonMail/go-crypto v1.1.0-alpha.0/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/arduino/go-paths-helper v1.0.1/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck= -github.com/arduino/go-paths-helper v1.9.2 h1:omR8DPTL4nbUCWfGey5D+e3WvWfA2zEgoM6ZBRNt7ls= -github.com/arduino/go-paths-helper v1.9.2/go.mod h1:V82BWgAAp4IbmlybxQdk9Bpkz8M4Qyx+RAFKaG9NuvU= +github.com/arduino/go-paths-helper v1.12.0 h1:xizOQtI9iHdl19qXd1EmWg5i9W//2bOCOYwlNv8F61E= +github.com/arduino/go-paths-helper v1.12.0/go.mod h1:jcpW4wr0u69GlXhTYydsdsqAjLaYK5n7oWHfKqOG6LM= github.com/arduino/go-properties-orderedmap v1.8.0 h1:wEfa6hHdpezrVOh787OmClsf/Kd8qB+zE3P2Xbrn0CQ= github.com/arduino/go-properties-orderedmap v1.8.0/go.mod h1:DKjD2VXY/NZmlingh4lSFMEYCVubfeArCsGPGDwb2yk= +github.com/arduino/go-serial-utils v0.1.2 h1:MRFwME4w/uaVkJ1R+wzz4KSbI9cF9IDVrYorazvjpTk= +github.com/arduino/go-serial-utils v0.1.2/go.mod h1:kzIsNPgz8DFAd1sAFKve4ubxrdGcwQ4XzvRLlztsgnE= github.com/arduino/go-timeutils v0.0.0-20171220113728-d1dd9e313b1b h1:9hDi4F2st6dbLC3y4i02zFT5quS4X6iioWifGlVwfy4= github.com/arduino/go-timeutils v0.0.0-20171220113728-d1dd9e313b1b/go.mod h1:uwGy5PpN4lqW97FiLnbcx+xx8jly5YuPMJWfVwwjJiQ= github.com/arduino/go-win32-utils v1.0.0 h1:/cXB86sOJxOsCHP7sQmXGLkdValwJt56mIwOHYxgQjQ= github.com/arduino/go-win32-utils v1.0.0/go.mod h1:0jqM7doGEAs6DaJCxxhLBUDS5OawrqF48HqXkcEie/Q= +github.com/arduino/pluggable-discovery-protocol-handler/v2 v2.2.0 h1:v7og6LpskewFabmaShKVzWXl5MXbmsxaRP3yo4dJta8= +github.com/arduino/pluggable-discovery-protocol-handler/v2 v2.2.0/go.mod h1:1dgblsmK2iBx3L5iNTyRIokeaxbTLUrYiUbHBK6yC3Y= +github.com/arduino/pluggable-monitor-protocol-handler v0.9.2 h1:vb5AmE3bT9we5Ej4AdBxcC9dJLXasRimVqaComf9L3M= +github.com/arduino/pluggable-monitor-protocol-handler v0.9.2/go.mod h1:vMG8tgHyE+hli26oT0JB/M7NxUMzzWoU5wd6cgJQRK4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cmaglie/easyjson v0.8.1 h1:nKQ6Yew57jsoGsuyRJPgm8PSsjbU3eO/uA9BsTu3E/8= github.com/cmaglie/easyjson v0.8.1/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/cmaglie/pb v1.0.27 h1:ynGj8vBXR+dtj4B7Q/W/qGt31771Ux5iFfRQBnwdQiA= github.com/cmaglie/pb v1.0.27/go.mod h1:GilkKZMXYjBA4NxItWFfO+lwkp59PLHQ+IOW/b/kmZI= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/codeclysm/extract/v3 v3.1.1 h1:iHZtdEAwSTqPrd+1n4jfhr1qBhUWtHlMTjT90+fJVXg= github.com/codeclysm/extract/v3 v3.1.1/go.mod h1:ZJi80UG2JtfHqJI+lgJSCACttZi++dHxfWuPaMhlOfQ= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/goselect v0.1.2 h1:2DNy14+JPjRBgPzAd1thbQp4BSIihxcBf0IXhQXDRa0= github.com/creack/goselect v0.1.2/go.mod h1:a/NhLweNvqIYMuxcMOuWY516Cimucms3DglDzQP3hKY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -97,19 +54,13 @@ github.com/djherbis/nio/v3 v3.0.1/go.mod h1:Ng4h80pbZFMla1yKzm61cF0tqqilXZYrogmW github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= +github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= @@ -123,79 +74,20 @@ github.com/go-git/go-git-fixtures/v4 v4.2.1 h1:n9gGL1Ct/yIw+nfsfr8s4+sbhT+Ncu2Su github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M= -github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/gofrs/uuid/v5 v5.2.0 h1:qw1GMx6/y8vhVsx626ImfKMuS5CvJmhIKKtuyvfajMM= +github.com/gofrs/uuid/v5 v5.2.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -209,18 +101,14 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/juju/errors v1.0.0 h1:yiq7kjCLll1BiaRuNY53MGI0+EQ3rF6GB+wvboZDefM= github.com/juju/errors v1.0.0/go.mod h1:B5x9thDqx0wIMH3+aLIMP9HjItInYWObRovoCFM5Qe8= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -258,23 +146,20 @@ github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdU github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= -github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk= @@ -288,16 +173,16 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= -github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= -github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= -github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= +github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= +github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -305,12 +190,12 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= @@ -324,382 +209,78 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHo github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.bug.st/cleanup v1.0.0 h1:XVj1HZxkBXeq3gMT7ijWUpHyIC1j8XAoNSyQ06CskgA= go.bug.st/cleanup v1.0.0/go.mod h1:EqVmTg2IBk4znLbPD28xne3abjsJftMdqqJEjhn70bk= -go.bug.st/downloader/v2 v2.1.1 h1:nyqbUizo3E2IxCCm4YFac4FtSqqFpqWP+Aae5GCMuw4= -go.bug.st/downloader/v2 v2.1.1/go.mod h1:VZW2V1iGKV8rJL2ZEGIDzzBeKowYv34AedJz13RzVII= -go.bug.st/relaxed-semver v0.11.0 h1:ngzpUlBEZ5F9hJnMZP55LIFbgX3bCztBBufMhJViAsY= -go.bug.st/relaxed-semver v0.11.0/go.mod h1:rqPEm+790OTQlAdfSJSHWwpKOg3A8UyvAWMZxYkQivc= +go.bug.st/downloader/v2 v2.2.0 h1:Y0jSuDISNhrzePkrAWqz9xUC3xol9hqZo/+tz1D4EqY= +go.bug.st/downloader/v2 v2.2.0/go.mod h1:VZW2V1iGKV8rJL2ZEGIDzzBeKowYv34AedJz13RzVII= +go.bug.st/relaxed-semver v0.12.0 h1:se8v3lTdAAFp68+/RS/0Y/nFdnpdzkP5ICY04SPau4E= +go.bug.st/relaxed-semver v0.12.0/go.mod h1:Cpcbiig6Omwlq6bS7i3MQWiqS7W7HDd8CAnZFC40Cl0= go.bug.st/serial v1.6.1 h1:VSSWmUxlj1T/YlRo2J104Zv3wJFrjHIl/T3NeruWAHY= go.bug.st/serial v1.6.1/go.mod h1:UABfsluHAiaNI+La2iESysd9Vetq7VRdpxvjx7CmmOE= go.bug.st/testifyjson v1.1.1 h1:nHotIMK151LF3vYsU/b2RaoVaWCgrf2kvQeGNoZkGaA= go.bug.st/testifyjson v1.1.1/go.mod h1:nZyy2icFbv3OE3zW3mGVOnC/GhWgb93LRu+29n2tJlI= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a h1:a2MQQVoTo96JC9PMGtGBymLp7+/RzpFc2yX/9WfFg1c= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= +google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= @@ -712,13 +293,3 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/i18n/data/de.po b/i18n/data/de.po deleted file mode 100644 index 2b5ddd0af82..00000000000 --- a/i18n/data/de.po +++ /dev/null @@ -1,3644 +0,0 @@ -# -# Translators: -# Timo, 2021 -# Dan H, 2021 -# CLI team , 2022 -# Dee Gee, 2022 -# Ettore Atalan , 2022 -# C A, 2022 -# Luc Ohles, 2023 -# Jannis Lämmle, 2023 -# -msgid "" -msgstr "" -"Last-Translator: Jannis Lämmle, 2023\n" -"Language-Team: German (https://app.transifex.com/arduino-1/teams/108174/de/)\n" -"Language: de\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: version/version.go:59 -msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" -msgstr "%[1]s %[2]s Version: %[3]s Commit: %[4]s Datum: %[5]s" - -#: arduino/builder/internal/detector/detector.go:455 -msgid "%[1]s folder is no longer supported! See %[2]s for more information" -msgstr "" -"Der Ordner %[1]s wird nicht länger unterstützt! Siehe %[2]s für weitere " -"Informationen" - -#: arduino/builder/build_options_manager.go:142 -msgid "%[1]s invalid, rebuilding all" -msgstr "%[1]s ungültig, alles wird neu gebaut" - -#: internal/cli/lib/check_deps.go:111 -msgid "%[1]s is required but %[2]s is currently installed." -msgstr "%[1]s wird benötigt, aber %[2]s ist aktuell installiert." - -#: arduino/builder/builder.go:466 -msgid "%[1]s pattern is missing" -msgstr "Muster %[1]s fehlt" - -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, Nachricht: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, port: %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, Ports: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, Protokollversion: %[2]d" - -#: arduino/resources/download.go:49 -msgid "%s already downloaded" -msgstr "%s bereits heruntergeladen" - -#: commands/upload/upload.go:690 -msgid "%s and %s cannot be used together" -msgstr "%s und %s können nicht gemeinsam verwendet werden" - -#: arduino/cores/packagemanager/install_uninstall.go:368 -msgid "%s installed" -msgstr "%s installiert" - -#: internal/cli/lib/check_deps.go:108 -msgid "%s is already installed." -msgstr "%s ist bereits installiert." - -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 -msgid "%s is not a directory" -msgstr "%s ist kein Verzeichnis" - -#: arduino/cores/packagemanager/install_uninstall.go:288 -msgid "%s is not managed by package manager" -msgstr "%s wird nicht vom Paketmanager verwaltet" - -#: internal/cli/lib/check_deps.go:105 -msgid "%s must be installed." -msgstr "%s muss installiert sein." - -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 -msgid "%s pattern is missing" -msgstr "Muster %s fehlt" - -#: arduino/errors.go:819 -msgid "'%s' has an invalid signature" -msgstr "'%s' hat eine ungültige Signatur" - -#: arduino/cores/packagemanager/package_manager.go:400 -msgid "" -"'build.core' and 'build.variant' refer to different platforms: %[1]s and " -"%[2]s" -msgstr "" -"'build.core' und 'build.variant' verweisen auf andere Plattformen: %[1]s and" -" %[2]s" - -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 -msgid "(hidden)" -msgstr "(versteckt)" - -#: arduino/builder/libraries.go:302 -msgid "(legacy)" -msgstr "(veraltet)" - -#: internal/cli/lib/install.go:81 -msgid "" -"--git-url and --zip-path are disabled by default, for more information see: " -"%v" -msgstr "" -"--git-url und --zip-path sind Standardmäßig deaktiviert. Für mehr " -"Informationen sehen Sie hier nach: %v" - -#: internal/cli/lib/install.go:83 -msgid "" -"--git-url and --zip-path flags allow installing untrusted files, use it at " -"your own risk." -msgstr "" -"--git-url und --zip-path flags erlauben das Installieren von nicht " -"vertrauenswürdigen Dateien. Benutzung auf eigene Gefahr." - -#: internal/cli/lib/install.go:86 -msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" -msgstr "" -"--git-url oder --zip-path können nicht mit --install-in-builtin-dir " -"verwendet werden" - -#: commands/sketch/new.go:66 -msgid ".ino file already exists" -msgstr ".ino-Datei existiert bereits" - -#: internal/cli/updater/updater.go:71 -msgid "A new release of Arduino CLI is available:" -msgstr "Eine neue Version von Arduino CLI ist verfügbar:" - -#: arduino/errors.go:300 -msgid "A programmer is required to upload" -msgstr "Zum Hochladen ist ein Programmer benötigt" - -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 -msgid "ARCH" -msgstr "ARCH" - -#: internal/cli/generatedocs/generatedocs.go:80 -msgid "ARDUINO COMMAND LINE MANUAL" -msgstr "Arduino CLI Handbuch" - -#: internal/cli/usage.go:32 -msgid "Additional help topics:" -msgstr "Weitere Hilfethemen:" - -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 -msgid "Adds one or more values to a setting." -msgstr "Fügt einen oder mehrere Werte zu einer Einstellung hinzu." - -#: internal/cli/usage.go:27 -msgid "Aliases:" -msgstr "Decknamen:" - -#: internal/cli/core/upgrade.go:72 -msgid "All the cores are already at the latest version" -msgstr "Alle Kerne sind bereits auf der neuesten Version" - -#: commands/lib/install.go:86 -msgid "Already installed %s" -msgstr "Bereits installiert %s" - -#: arduino/builder/internal/detector/detector.go:88 -msgid "Alternatives for %[1]s: %[2]s" -msgstr "Alternativen für %[1]s: %[2]s" - -#: arduino/builder/internal/preprocessor/ctags.go:69 -msgid "An error occurred adding prototypes" -msgstr "Beim Hinzufügen von Prototypen ist ein Fehler aufgetreten" - -#: arduino/builder/internal/detector/detector.go:209 -msgid "An error occurred detecting libraries" -msgstr "Ein Fehler trat beim erkennen der Bibliotheken auf" - -#: internal/cli/daemon/daemon.go:62 -msgid "Append debug logging to the specified file" -msgstr "Debug-Protokollierung an die angegebene Datei anhängen" - -#: internal/cli/lib/search.go:164 -msgid "Architecture: %s" -msgstr "Architektur: %s" - -#: commands/sketch/archive.go:71 -msgid "Archive already exists" -msgstr "Archiv existiert bereits" - -#: arduino/builder/core.go:141 -msgid "Archiving built core (caching) in: %[1]s" -msgstr "Gebauter Kern wird archiviert (zwischengespeichert) in: %[1]s" - -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 -msgid "Arduino CLI sketch commands." -msgstr "" - -#: internal/cli/cli.go:70 -msgid "Arduino CLI." -msgstr "Arduino CLI." - -#: internal/cli/cli.go:71 -msgid "Arduino Command Line Interface (arduino-cli)." -msgstr "Arduino Befehlszeilen-Schnittstelle (arduino-cli)." - -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 -msgid "Arduino board commands." -msgstr "Arduino-Platinen-Befehle." - -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 -msgid "Arduino cache commands." -msgstr "" - -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 -msgid "Arduino commands about libraries." -msgstr "Arduino Befehle für Bibliotheken." - -#: internal/cli/config/config.go:33 -msgid "Arduino configuration commands." -msgstr "Arduino-Konfigurationsbefehle." - -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 -msgid "Arduino core operations." -msgstr "Arduino-Kern-Operationen." - -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 -msgid "Arguments error: %v" -msgstr "Argumentefehler: %v" - -#: internal/cli/board/attach.go:35 -msgid "Attaches a sketch to a board." -msgstr "" - -#: internal/cli/lib/search.go:155 -msgid "Author: %s" -msgstr "Autor: %s" - -#: arduino/libraries/librariesmanager/install.go:78 -msgid "" -"Automatic library install can't be performed in this case, please manually " -"remove all duplicates and retry." -msgstr "" -"Automatische Installation der Bibliotheken kann in diesem Fall nicht " -"durchgeführt werden, bitte lösche alle Duplikate und versuche erneut." - -#: commands/lib/uninstall.go:57 -msgid "" -"Automatic library uninstall can't be performed in this case, please manually" -" remove them." -msgstr "" -"Automatische Desinstallation der Bibliotheken kann in diesem Fall nicht " -"durchgeführt werden, bitte entferne sie manuell." - -#: internal/cli/lib/list.go:136 -msgid "Available" -msgstr "Verfügbar" - -#: internal/cli/usage.go:29 -msgid "Available Commands:" -msgstr "Verfügbare Befehle:" - -#: internal/cli/upload/upload.go:75 -msgid "Binary file to upload." -msgstr "Binärdatei zum Hochladen." - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 -msgid "Board Name" -msgstr "Platinenname" - -#: internal/cli/board/details.go:138 -msgid "Board name:" -msgstr "Platinenname:" - -#: internal/cli/board/details.go:140 -msgid "Board version:" -msgstr "Platinenversion:" - -#: arduino/builder/sketch.go:245 -msgid "Bootloader file specified but missing: %[1]s" -msgstr "Bootloader-Datei angegeben, aber nicht vorhanden: %[1]s" - -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." -msgstr "" - -#: arduino/resources/index.go:64 -msgid "Can't create data directory %s" -msgstr "Datenverzeichnis %s kann nicht erstellt werden" - -#: arduino/errors.go:512 -msgid "Can't create sketch" -msgstr "Sketch kann nicht erstellt werden" - -#: commands/lib/download.go:63 commands/lib/download.go:66 -msgid "Can't download library" -msgstr "Bibliothek kann nicht heruntergeladen werden" - -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 -msgid "Can't find dependencies for platform %s" -msgstr "Abhängigkeiten für die Plattform %s können nicht gefunden werden" - -#: arduino/errors.go:538 -msgid "Can't open sketch" -msgstr "Sketch kann nicht geöffnet werden" - -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 -msgid "Can't update sketch" -msgstr "" - -#: internal/cli/arguments/arguments.go:36 -msgid "Can't use the following flags together: %s" -msgstr "" - -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "Konfigurationsdatei kann nicht geschrieben werden: %v" - -#: internal/cli/daemon/daemon.go:91 -msgid "Can't write debug log: %s" -msgstr "" - -#: commands/compile/compile.go:160 commands/compile/compile.go:163 -msgid "Cannot create build cache directory" -msgstr "" - -#: commands/compile/compile.go:148 -msgid "Cannot create build directory" -msgstr "" - -#: internal/cli/config/init.go:94 -msgid "Cannot create config file directory: %v" -msgstr "Verzeichnis der Konfigurationsdatei kann nicht erstellt werden: %v" - -#: internal/cli/config/init.go:109 -msgid "Cannot create config file: %v" -msgstr "Konfigurationsdatei kann nicht erstellt werden: %v" - -#: arduino/errors.go:782 -msgid "Cannot create temp dir" -msgstr "Temporärer Ordner kann nicht erstellt werden" - -#: arduino/errors.go:800 -msgid "Cannot create temp file" -msgstr "Temporäre Datei kann nicht erstellt werden" - -#: internal/cli/config/delete.go:53 -msgid "Cannot delete the key %[1]s: %[2]v" -msgstr "" - -#: commands/debug/debug.go:72 -msgid "Cannot execute debug tool" -msgstr "" - -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 -msgid "Cannot find absolute path: %v" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:141 -msgid "Cannot install platform" -msgstr "Plattform kann nicht installiert werden" - -#: arduino/cores/packagemanager/install_uninstall.go:346 -msgid "Cannot install tool %s" -msgstr "Werkzeug %s kann nicht installiert werden" - -#: commands/upload/upload.go:468 -msgid "Cannot perform port reset: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" -msgstr "" - -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "Datei %[1]s kann nicht geschrieben werden: %[2]v" - -#: internal/cli/lib/search.go:163 -msgid "Category: %s" -msgstr "Kategorie: %s" - -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 -msgid "Check dependencies status for the specified library." -msgstr "" - -#: arduino/resources/checksums.go:167 -msgid "Checksum differs from checksum in package.json" -msgstr "Prüfsumme unterscheidet sich von der Prüfsumme in package.json" - -#: internal/cli/board/details.go:188 -msgid "Checksum:" -msgstr "Prüfsumme:" - -#: internal/cli/cache/cache.go:33 -msgid "Clean caches." -msgstr "" - -#: internal/cli/cli.go:126 -msgid "Comma-separated list of additional URLs for the Boards Manager." -msgstr "" - -#: internal/cli/board/list.go:54 -msgid "" -"Command keeps running and prints list of connected boards whenever there is " -"a change." -msgstr "" -"Befehl läuft weiter und gibt die Liste der verbundenen Platinen aus, sobald " -"sich eine Änderung ergibt." - -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 -msgid "Compiled sketch not found in %s" -msgstr "" - -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 -msgid "Compiles Arduino sketches." -msgstr "Kompiliert Arduino-Sketche." - -#: arduino/builder/builder.go:400 -msgid "Compiling core..." -msgstr "Kern wird kompiliert ..." - -#: arduino/builder/builder.go:379 -msgid "Compiling libraries..." -msgstr "Bibliotheken werden kompiliert ..." - -#: arduino/builder/libraries.go:133 -msgid "Compiling library \"%[1]s\"" -msgstr "Bibliothek \"%[1]s\" wird kompiliert" - -#: arduino/builder/builder.go:363 -msgid "Compiling sketch..." -msgstr "Sketch wird kompiliert ..." - -#: internal/cli/config/init.go:88 -msgid "" -"Config file already exists, use --overwrite to discard the existing one." -msgstr "" - -#: internal/cli/config/init.go:112 -msgid "Config file written to: %s" -msgstr "Konfigurationsdatei geschrieben nach: %s" - -#: internal/cli/debug/debug.go:197 -msgid "Configuration options for %s" -msgstr "Konfigurationsoptionen für %s" - -#: internal/cli/monitor/monitor.go:70 -msgid "" -"Configure communication port settings. The format is " -"=[,=]..." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:175 -msgid "Configuring platform." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:356 -msgid "Configuring tool." -msgstr "" - -#: internal/cli/board/list.go:188 -msgid "Connected" -msgstr "Verbunden" - -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "Verbunden mit %s! Zum Beenden STRG-C drücken." - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -msgid "Core" -msgstr "Kern" - -#: arduino/httpclient/httpclient.go:112 -msgid "Could not connect via HTTP" -msgstr "Konnte nicht über HTTP verbinden" - -#: commands/instances.go:503 -msgid "Could not create index directory" -msgstr "Indexverzeichnis konnte nicht erstellt werden" - -#: arduino/builder/core.go:41 -msgid "Couldn't deeply cache core build: %[1]s" -msgstr "" - -#: arduino/builder/sizer.go:153 -msgid "Couldn't determine program size" -msgstr "Programmgröße konnte nicht ermittelt werden" - -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 -msgid "Couldn't get current working directory: %v" -msgstr "" - -#: internal/cli/sketch/new.go:37 internal/cli/sketch/new.go:38 -msgid "Create a new Sketch" -msgstr "Einen neuen Sketch erstellen" - -#: internal/cli/compile/compile.go:96 -msgid "Create and print a profile configuration from the build." -msgstr "" - -#: internal/cli/sketch/archive.go:37 internal/cli/sketch/archive.go:38 -msgid "Creates a zip file containing all sketch files." -msgstr "Erstellt eine ZIP-Datei, die alle Sketch-Dateien enthält." - -#: internal/cli/config/init.go:43 -msgid "" -"Creates or updates the configuration file in the data directory or custom " -"directory with the current configuration settings." -msgstr "" - -#: internal/cli/compile/compile.go:308 -msgid "" -"Currently, Build Profiles only support libraries available through Arduino " -"Library Manager." -msgstr "" - -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" -msgstr "" - -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 -msgid "DEPRECATED" -msgstr "VERALTET" - -#: internal/cli/daemon/daemon.go:174 -msgid "Daemon is now listening on %s:%s" -msgstr "Daemon überwacht jetzt %s: %s" - -#: internal/cli/debug/debug.go:51 -msgid "Debug Arduino sketches." -msgstr "Arduino-Sketche debuggen" - -#: internal/cli/debug/debug.go:52 -msgid "" -"Debug Arduino sketches. (this command opens an interactive gdb session)" -msgstr "" - -#: internal/cli/debug/debug.go:61 -msgid "Debug interpreter e.g.: %s" -msgstr "Debug-Interpreter z.B.: %s" - -#: commands/debug/debug_info.go:151 -msgid "Debugging not supported for board %s" -msgstr "Debugging für Board %s nicht unterstützt" - -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "Debugging unterstützt:" - -#: internal/cli/monitor/monitor.go:232 -msgid "Default" -msgstr "Standard" - -#: internal/cli/board/attach.go:108 -msgid "Default FQBN set to" -msgstr "Standard-FQBN gesetzt auf" - -#: internal/cli/board/attach.go:107 -msgid "Default port set to" -msgstr "Standard-Port gesetzt auf" - -#: internal/cli/cache/clean.go:30 -msgid "Delete Boards/Library Manager download cache." -msgstr "" - -#: internal/cli/cache/clean.go:31 -msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." -msgstr "" - -#: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 -msgid "Deletes a settings key and all its sub keys." -msgstr "" -"Löscht einen Einstellungsschlüssel und alle zugehörigen Unterschlüssel." - -#: internal/cli/lib/search.go:171 -msgid "Dependencies: %s" -msgstr "Abhängigkeiten: %s" - -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 -msgid "Description" -msgstr "Beschreibung" - -#: arduino/builder/builder.go:289 -msgid "Detecting libraries used..." -msgstr "Verwendete Bibliotheken erkennen ..." - -#: internal/cli/board/list.go:44 -msgid "" -"Detects and displays a list of boards connected to the current computer." -msgstr "" -"Erkennt und zeigt eine Liste von Platinen, die mit dem Computer verbunden " -"sind." - -#: internal/cli/debug/debug.go:62 -msgid "Directory containing binaries for debug." -msgstr "" - -#: internal/cli/upload/upload.go:74 -msgid "Directory containing binaries to upload." -msgstr "Verzeichnis, welche die Binärdateien zum Hochladen enthält." - -#: internal/cli/generatedocs/generatedocs.go:45 -msgid "" -"Directory where to save generated files. Default is './docs', the directory " -"must exist." -msgstr "" - -#: internal/cli/completion/completion.go:44 -msgid "Disable completion description for shells that support it" -msgstr "" - -#: internal/cli/board/list.go:189 -msgid "Disconnected" -msgstr "Verbindung getrennt" - -#: internal/cli/daemon/daemon.go:63 -msgid "Display only the provided gRPC calls" -msgstr "Nur die bereitgestellten gRPC-Aufrufe anzeigen" - -#: internal/cli/lib/install.go:61 -msgid "Do not install dependencies." -msgstr "Abhängigkeiten nicht installieren." - -#: internal/cli/lib/install.go:62 -msgid "Do not overwrite already installed libraries." -msgstr "Bereits installierte Bibliotheken nicht überschreiben." - -#: internal/cli/core/install.go:55 -msgid "Do not overwrite already installed platforms." -msgstr "Bereits installierte Plattformen nicht überschreiben." - -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 -msgid "Do not perform the actual upload, just log out actions" -msgstr "" -"Den eigentlichen Hochladevorgang nicht durchführen, sondern nur die " -"Abmeldeaktionen" - -#: internal/cli/daemon/daemon.go:60 -msgid "Do not terminate daemon process if the parent process dies" -msgstr "" - -#: commands/lib/download.go:60 -msgid "Downloading %s" -msgstr "%s wird heruntergeladen" - -#: arduino/resources/index.go:136 -msgid "Downloading index signature: %s" -msgstr "Indexsignatur wird heruntergeladen: %s" - -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 -msgid "Downloading index: %s" -msgstr "Index wird heruntergeladen: %s" - -#: commands/instances.go:439 -msgid "Downloading library %s" -msgstr "Bibliothek %s wird heruntergeladen" - -#: commands/instances.go:136 -msgid "Downloading missing tool %s" -msgstr "Fehlendes Werkzeug %s wird heruntergeladen" - -#: arduino/cores/packagemanager/install_uninstall.go:94 -msgid "Downloading packages" -msgstr "Pakete werden heruntergeladen" - -#: arduino/cores/packagemanager/profiles.go:98 -msgid "Downloading platform %s" -msgstr "Plattform %s wird heruntergeladen" - -#: arduino/cores/packagemanager/profiles.go:178 -msgid "Downloading tool %s" -msgstr "Werkzeug %s wird heruntergeladen" - -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 -msgid "Downloads one or more cores and corresponding tool dependencies." -msgstr "" -"Lädt einen oder mehrere Kerne und die entsprechenden Werkzeugabhängigkeiten " -"herunter." - -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 -msgid "Downloads one or more libraries without installing them." -msgstr "" -"Lädt eine oder mehrere Bibliotheken herunter, ohne sie zu installieren." - -#: internal/cli/daemon/daemon.go:61 -msgid "Enable debug logging of gRPC calls" -msgstr "Debug-Protokollierung von gRPC-Aufrufen aktivieren" - -#: internal/cli/lib/install.go:64 -msgid "Enter a path to zip file" -msgstr "Geben Sie einen Pfad zur ZIP-Datei an" - -#: internal/cli/lib/install.go:63 -msgid "Enter git url for libraries hosted on repositories" -msgstr "" - -#: commands/sketch/archive.go:107 -msgid "Error adding file to sketch archive" -msgstr "Fehler beim Hinzufügen einer Datei zum Sketch-Archiv" - -#: arduino/builder/core.go:147 -msgid "Error archiving built core (caching) in %[1]s: %[2]s" -msgstr "" - -#: internal/cli/sketch/archive.go:81 -msgid "Error archiving: %v" -msgstr "Fehler beim Archivieren: %v" - -#: commands/sketch/archive.go:95 -msgid "Error calculating relative file path" -msgstr "Fehler beim Berechnen des relativen Dateipfads" - -#: internal/cli/cache/clean.go:45 -msgid "Error cleaning caches: %v" -msgstr "" - -#: internal/cli/compile/compile.go:217 -msgid "Error converting path to absolute: %v" -msgstr "" - -#: commands/compile/compile.go:335 -msgid "Error copying output file %s" -msgstr "Fehler beim Kopieren der Ausgabedatei %s" - -#: internal/cli/instance/instance.go:43 -msgid "Error creating instance: %v" -msgstr "Fehler beim Erstellen der Instanz: %v" - -#: commands/compile/compile.go:319 -msgid "Error creating output dir" -msgstr "Fehler beim Erstellen des Ausgabeverzeichnisses" - -#: commands/sketch/archive.go:83 -msgid "Error creating sketch archive" -msgstr "Fehler beim Erstellen des Sketch-Archivs" - -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 -msgid "Error creating sketch: %v" -msgstr "Fehler beim Erstellen des Sketches: %v" - -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 -msgid "Error detecting boards: %v" -msgstr "Fehler beim Erkennen von Platinen: %v" - -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 -msgid "Error downloading %[1]s: %[2]v" -msgstr "Fehler beim Herunterladen von %[1]s: %[2]v" - -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 -msgid "Error downloading %s" -msgstr "Fehler beim Herunterladen von %s" - -#: arduino/resources/index.go:82 commands/instances.go:603 -msgid "Error downloading index '%s'" -msgstr "" - -#: arduino/resources/index.go:137 -msgid "Error downloading index signature '%s'" -msgstr "" - -#: commands/instances.go:451 -msgid "Error downloading library %s" -msgstr "Fehler beim Herunterladen der Bibliothek %s" - -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 -msgid "Error downloading platform %s" -msgstr "Fehler beim Herunterladen der Plattform %s" - -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 -msgid "Error downloading tool %s" -msgstr "Fehler beim Herunterladen des Werkzeugs %s" - -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 -msgid "Error during Debug: %v" -msgstr "" - -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "Fehler während FQBN-Bestimmung: %v" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 -msgid "Error during JSON encoding of the output: %v" -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 -msgid "Error during Upload: %v" -msgstr "Fehler während dem Hochladen: %v" - -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "Fehler während der YAML-Kodierung der Ausgabe: %v" - -#: internal/cli/compile/compile.go:354 -msgid "Error during build: %v" -msgstr "" - -#: internal/cli/core/install.go:80 -msgid "Error during install: %v" -msgstr "Fehler während dem Installieren: %v" - -#: internal/cli/core/uninstall.go:73 -msgid "Error during uninstall: %v" -msgstr "Fehler während dem Deinstallieren: %v" - -#: internal/cli/core/upgrade.go:120 -msgid "Error during upgrade: %v" -msgstr "" - -#: arduino/resources/index.go:104 arduino/resources/index.go:123 -msgid "Error extracting %s" -msgstr "Fehler beim Extrahieren von %s" - -#: commands/upload/upload.go:373 -msgid "Error finding build artifacts" -msgstr "" - -#: internal/cli/debug/debug.go:96 -msgid "Error getting Debug info: %v" -msgstr "" - -#: commands/sketch/archive.go:59 -msgid "Error getting absolute path of sketch archive" -msgstr "Fehler beim Abrufen des absoluten Pfads des Sketch-Archivs" - -#: internal/cli/board/details.go:73 -msgid "Error getting board details: %v" -msgstr "Fehler beim Abrufen von Platinendetails: %v" - -#: arduino/builder/internal/compilation/database.go:81 -msgid "Error getting current directory for compilation database: %s" -msgstr "" - -#: commands/compile/compile.go:257 commands/lib/list.go:108 -msgid "Error getting information for library %s" -msgstr "Fehler beim Abrufen von Informationen für die Bibliothek %s" - -#: internal/cli/lib/examples.go:72 -msgid "Error getting libraries info: %v" -msgstr "Fehler beim Abrufen von Bibliotheksinformationen: %v" - -#: internal/cli/arguments/fqbn.go:90 -msgid "Error getting port metadata: %v" -msgstr "Fehler beim Abrufen von Port-Metadaten: %v" - -#: internal/cli/monitor/monitor.go:98 -msgid "Error getting port settings details: %s" -msgstr "Fehler beim Abrufen von Details zu Port-Einstellungen: %s" - -#: internal/cli/upload/upload.go:169 -msgid "Error getting user input" -msgstr "" - -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 -msgid "Error initializing instance: %v" -msgstr "Fehler beim Initialisieren der Instanz: %v" - -#: internal/cli/lib/install.go:145 -msgid "Error installing %s: %v" -msgstr "Fehler beim Installieren von %s: %v" - -#: internal/cli/lib/install.go:119 -msgid "Error installing Git Library: %v" -msgstr "Fehler beim Installieren der Git-Bibliothek: %v" - -#: internal/cli/lib/install.go:98 -msgid "Error installing Zip Library: %v" -msgstr "Fehler beim Installieren der Zip-Bibliothek: %v" - -#: commands/instances.go:461 -msgid "Error installing library %s" -msgstr "Fehler beim Installieren der Bibliothek %s" - -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 -msgid "Error installing platform %s" -msgstr "Fehler beim Installieren der Plattform %s" - -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 -msgid "Error installing tool %s" -msgstr "Fehler beim Installieren des Werkzeugs %s" - -#: internal/cli/board/listall.go:63 -msgid "Error listing boards: %v" -msgstr "Fehler beim Auflisten von Platinen: %v" - -#: internal/cli/lib/list.go:89 -msgid "Error listing libraries: %v" -msgstr "" - -#: internal/cli/core/list.go:69 -msgid "Error listing platforms: %v" -msgstr "Fehler beim Auflisten von Plattformen: %v" - -#: arduino/errors.go:425 -msgid "Error loading hardware platform" -msgstr "Fehler beim Laden der Hardware-Plattform" - -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 -msgid "Error loading index %s" -msgstr "Fehler beim Laden des Index %s" - -#: arduino/resources/index.go:98 -msgid "Error opening %s" -msgstr "Fehler beim Öffnen von %s" - -#: internal/cli/daemon/daemon.go:85 -msgid "Error opening debug logging file: %s" -msgstr "Fehler beim Öffnen der Debug-Protokollierungsdatei: %s" - -#: internal/cli/compile/compile.go:190 -msgid "Error opening source code overrides data file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:203 -msgid "Error parsing --show-properties flag: %v" -msgstr "" - -#: commands/compile/compile.go:328 -msgid "Error reading build directory" -msgstr "" - -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "Fehler beim Lesen der Konfigurationsdatei: %v" - -#: commands/sketch/archive.go:77 -msgid "Error reading sketch files" -msgstr "Fehler beim Lesen von Sketch-Dateien" - -#: internal/cli/lib/check_deps.go:65 -msgid "Error resolving dependencies for %[1]s: %[2]s" -msgstr "Fehler beim Auflösen von Abhängigkeiten für %[1]s: %[2]s" - -#: internal/cli/core/upgrade.go:68 -msgid "Error retrieving core list: %v" -msgstr "Fehler beim Abrufen der Kernliste: %v" - -#: arduino/cores/packagemanager/install_uninstall.go:156 -msgid "Error rolling-back changes: %s" -msgstr "" - -#: arduino/resources/index.go:164 arduino/resources/index.go:176 -msgid "Error saving downloaded index" -msgstr "Fehler beim Speichern des heruntergeladenen Index" - -#: arduino/resources/index.go:171 arduino/resources/index.go:180 -msgid "Error saving downloaded index signature" -msgstr "Fehler beim Speichern der heruntergeladenen Indexsignatur" - -#: internal/cli/board/search.go:60 -msgid "Error searching boards: %v" -msgstr "Fehler bei der Suche nach Platinen: %v" - -#: internal/cli/lib/search.go:79 -msgid "Error searching for Libraries: %v" -msgstr "" - -#: internal/cli/core/search.go:80 -msgid "Error searching for platforms: %v" -msgstr "Fehler bei der Suche nach Plattformen: %v" - -#: arduino/builder/internal/compilation/database.go:66 -msgid "Error serializing compilation database: %s" -msgstr "Fehler bei der Serialisierung der Kompilierungsdatenbank: %s" - -#: internal/cli/board/list.go:82 -msgid "Error starting discovery: %v" -msgstr "" - -#: internal/cli/lib/uninstall.go:63 -msgid "Error uninstalling %[1]s: %[2]v" -msgstr "Fehler beim Deinstallieren von %[1]s: %[2]v" - -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 -msgid "Error updating library index: %v" -msgstr "Fehler beim Aktualisieren des Bibliotheksindex: %v" - -#: internal/cli/lib/upgrade.go:71 -msgid "Error upgrading libraries" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:151 -msgid "Error upgrading platform: %s" -msgstr "" - -#: arduino/resources/index.go:146 arduino/resources/index.go:152 -msgid "Error verifying signature" -msgstr "Fehler beim Verifizieren der Signatur" - -#: arduino/builder/internal/detector/detector.go:365 -msgid "Error while detecting libraries included by %[1]s" -msgstr "" - -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 -msgid "Error while determining sketch size: %s" -msgstr "Fehler während der Bestimmung der Sketch-Größe: %s" - -#: arduino/builder/internal/compilation/database.go:69 -msgid "Error writing compilation database: %s" -msgstr "Fehler beim Schreiben der Kompilierungsdatenbank: %s" - -#: internal/cli/completion/completion.go:56 -msgid "Error: command description is not supported by %v" -msgstr "Fehler: Befehlsbeschreibung wird nicht unterstützt von %v" - -#: internal/cli/compile/compile.go:196 -msgid "Error: invalid source code overrides data file: %v" -msgstr "" - -#: internal/cli/board/list.go:96 -msgid "Event" -msgstr "Ereignis" - -#: internal/cli/lib/examples.go:120 -msgid "Examples for library %s" -msgstr "Beispiele für Bibliothek %s" - -#: internal/cli/usage.go:28 -msgid "Examples:" -msgstr "Beispiele:" - -#: internal/cli/debug/debug.go:180 -msgid "Executable to debug" -msgstr "" - -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 -msgid "Expected compiled sketch in directory %s, but is a file instead" -msgstr "" - -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 -msgid "FQBN" -msgstr "FQBN" - -#: internal/cli/board/details.go:139 -msgid "FQBN:" -msgstr "FQBN:" - -#: commands/upload/upload.go:502 -msgid "Failed chip erase" -msgstr "" - -#: commands/upload/upload.go:509 -msgid "Failed programming" -msgstr "Fehlgeschlagene Programmierung" - -#: commands/upload/upload.go:505 -msgid "Failed to burn bootloader" -msgstr "" - -#: commands/instances.go:166 -msgid "Failed to create data directory" -msgstr "" - -#: commands/instances.go:156 -msgid "Failed to create downloads directory" -msgstr "" - -#: internal/cli/daemon/daemon.go:129 -msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." -msgstr "" -"Fehler beim Überwachen von TCP-Port: %[1]s. %[2]s ist ein ungültiger Port." - -#: internal/cli/daemon/daemon.go:124 -msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." -msgstr "" -"Fehler beim Überwachen von TCP-Port: %[1]s. %[2]s ist ein unbekannter Name." - -#: internal/cli/daemon/daemon.go:136 -msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" -msgstr "" -"Fehler beim Überwachen von TCP-Port: %[1]s. Unerwarteter Fehler: %[2]v" - -#: internal/cli/daemon/daemon.go:134 -msgid "Failed to listen on TCP port: %s. Address already in use." -msgstr "" -"Fehler beim Überwachen von TCP-Port: %s. Adresse wird bereits benutzt." - -#: commands/upload/upload.go:513 -msgid "Failed uploading" -msgstr "Fehlgeschlagenes Hochladen" - -#: internal/cli/board/details.go:186 -msgid "File:" -msgstr "Datei:" - -#: commands/compile/compile.go:131 -msgid "" -"Firmware encryption/signing requires all the following properties to be " -"defined: %s" -msgstr "" - -#: commands/daemon/debug.go:40 -msgid "First message must contain debug request, not data" -msgstr "" - -#: internal/cli/arguments/arguments.go:47 -msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" -msgstr "" - -#: internal/cli/usage.go:30 -msgid "Flags:" -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:37 -msgid "" -"Force run of post-install scripts (if the CLI is not running interactively)." -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:39 -msgid "" -"Force run of pre-uninstall scripts (if the CLI is not running " -"interactively)." -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:38 -msgid "" -"Force skip of post-install scripts (if the CLI is running interactively)." -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:40 -msgid "" -"Force skip of pre-uninstall scripts (if the CLI is running interactively)." -msgstr "" - -#: arduino/errors.go:840 -msgid "Found %d platforms matching \"%s\": %s" -msgstr "" - -#: internal/cli/arguments/fqbn.go:37 -msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" -msgstr "Vollständig qualifizierter Platinenname, z.B.: arduino:avr:uno" - -#: commands/debug/debug.go:183 -msgid "GDB server '%s' is not supported" -msgstr "GDB-Server '%s' wird nicht unterstützt" - -#: internal/cli/generatedocs/generatedocs.go:38 -#: internal/cli/generatedocs/generatedocs.go:39 -msgid "Generates bash completion and command manpages." -msgstr "" - -#: internal/cli/completion/completion.go:38 -msgid "Generates completion scripts" -msgstr "" - -#: internal/cli/completion/completion.go:39 -msgid "Generates completion scripts for various shells" -msgstr "" - -#: arduino/builder/builder.go:308 -msgid "Generating function prototypes..." -msgstr "Funktionsprototypen werden generiert ..." - -#: internal/cli/usage.go:31 -msgid "Global Flags:" -msgstr "" - -#: arduino/builder/sizer.go:163 -msgid "" -"Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " -"bytes for local variables. Maximum is %[2]s bytes." -msgstr "" -"Globale Variablen verwenden %[1]s Bytes (%[3]s%%) des dynamischen Speichers," -" %[4]s Bytes für lokale Variablen verbleiben. Das Maximum sind %[2]s Bytes." - -#: arduino/builder/sizer.go:169 -msgid "Global variables use %[1]s bytes of dynamic memory." -msgstr "Globale Variablen verwenden %[1]s Bytes des dynamischen Speichers." - -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 -msgid "ID" -msgstr "ID" - -#: internal/cli/board/details.go:110 -msgid "Id" -msgstr "Id" - -#: internal/cli/board/details.go:153 -msgid "Identification properties:" -msgstr "Identifikationseigenschaften:" - -#: internal/cli/compile/compile.go:131 -msgid "If set built binaries will be exported to the sketch folder." -msgstr "" - -#: internal/cli/core/list.go:45 -msgid "" -"If set return all installable and installed cores, including manually " -"installed." -msgstr "" - -#: internal/cli/lib/list.go:53 -msgid "Include built-in libraries (from platforms and IDE) in listing." -msgstr "" -"Eingebaute Bibliotheken (von Plattformen und IDE) in die Auflistung " -"einbeziehen." - -#: internal/cli/sketch/archive.go:49 -msgid "Includes %s directory in the archive." -msgstr "" - -#: internal/cli/lib/install.go:65 -msgid "Install libraries in the IDE-Builtin directory" -msgstr "" - -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 -msgid "Installed" -msgstr "Installiert" - -#: commands/lib/install.go:140 -msgid "Installed %s" -msgstr "%s installiert" - -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 -msgid "Installing %s" -msgstr "%s wird installiert" - -#: commands/instances.go:459 -msgid "Installing library %s" -msgstr "Bibliothek %s wird installiert" - -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 -msgid "Installing platform %s" -msgstr "Plattform %s wird installiert" - -#: arduino/cores/packagemanager/profiles.go:186 -msgid "Installing tool %s" -msgstr "Werkzeug %s wird installiert" - -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 -msgid "Installs one or more cores and corresponding tool dependencies." -msgstr "" -"Installiert einen oder mehrere Kerne und die entsprechenden " -"Werkzeugabhängigkeiten." - -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 -msgid "Installs one or more specified libraries into the system." -msgstr "Installiert eine oder mehrere angegebene Bibliotheken in das System." - -#: arduino/builder/internal/detector/detector.go:391 -msgid "Internal error in cache" -msgstr "" - -#: arduino/errors.go:378 -msgid "Invalid '%[1]s' property: %[2]s" -msgstr "Ungültige '%[1]s' Eigenschaft: %[2]s" - -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 -msgid "Invalid FQBN" -msgstr "Ungültiger FQBN" - -#: internal/cli/daemon/daemon.go:147 -msgid "Invalid TCP address: port is missing" -msgstr "Ungültige TCP-Adresse: Port fehlt" - -#: arduino/errors.go:80 -msgid "Invalid URL" -msgstr "Ungültige URL" - -#: commands/instances.go:274 -msgid "Invalid additional URL: %v" -msgstr "" - -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" -msgstr "Ungültiges Archiv: Datei %{1}s nicht in Archiv %{2}s gefunden" - -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 -msgid "Invalid argument passed: %v" -msgstr "Ungültiges Argument übergeben: %v" - -#: commands/compile/compile.go:205 -msgid "Invalid build properties" -msgstr "" - -#: arduino/builder/sizer.go:249 -msgid "Invalid data size regexp: %s" -msgstr "" - -#: arduino/builder/sizer.go:255 -msgid "Invalid eeprom size regexp: %s" -msgstr "" - -#: arduino/errors.go:48 -msgid "Invalid instance" -msgstr "Ungültige Instanz" - -#: internal/cli/core/upgrade.go:99 -msgid "Invalid item %s" -msgstr "Ungültiges Element %s" - -#: arduino/errors.go:98 -msgid "Invalid library" -msgstr "Ungültige Bibliothek" - -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" -msgstr "" - -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "Ungültige Option für --log-level: %s" - -#: internal/cli/cli.go:229 -msgid "Invalid output format: %s" -msgstr "Ungültiges Ausgabeformat: %s" - -#: commands/instances.go:555 -msgid "Invalid package index in %s" -msgstr "Ungültiger Paketindex in %s" - -#: internal/cli/core/uninstall.go:62 -msgid "Invalid parameter %s: version not allowed" -msgstr "Ungültiger Parameter %s: Version nicht erlaubt" - -#: commands/board/list.go:79 -msgid "Invalid pid value: '%s'" -msgstr "" - -#: arduino/errors.go:222 -msgid "Invalid profile" -msgstr "Ungültiges Profil" - -#: commands/monitor/monitor.go:145 -msgid "Invalid recipe in platform.txt" -msgstr "" - -#: arduino/builder/sizer.go:239 -msgid "Invalid size regexp: %s" -msgstr "" - -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "Ungültige Zeitbeschränkung: %s" - -#: arduino/errors.go:116 -msgid "Invalid version" -msgstr "Ungültige Version" - -#: commands/board/list.go:76 -msgid "Invalid vid value: '%s'" -msgstr "" - -#: internal/cli/compile/compile.go:126 -msgid "" -"Just produce the compilation database, without actually compiling. All build" -" commands are skipped except pre* hooks." -msgstr "" - -#: internal/cli/lib/list.go:38 -msgid "LIBNAME" -msgstr "" - -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 -msgid "LIBRARY" -msgstr "BIBLIOTHEK" - -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 -msgid "LIBRARY_NAME" -msgstr "BIBLIOTHEKSNAME" - -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 -msgid "Latest" -msgstr "Neueste" - -#: arduino/builder/libraries.go:91 -msgid "Library %[1]s has been declared precompiled:" -msgstr "Bibliothek %[1]s wurde als vorkompiliert angegeben:" - -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 -msgid "" -"Library %[1]s is already installed, but with a different version: %[2]s" -msgstr "" -"Bibliothek %[1]s ist bereits installiert, aber mit einer anderen Version: " -"%[2]s" - -#: commands/lib/upgrade.go:59 -msgid "Library %s is already at the latest version" -msgstr "Bibliothek %s ist bereits die neueste Version" - -#: commands/lib/uninstall.go:39 -msgid "Library %s is not installed" -msgstr "Bibliothek %s ist nicht installiert" - -#: commands/instances.go:445 -msgid "Library %s not found" -msgstr "Bibliothek %s nicht gefunden" - -#: arduino/errors.go:446 -msgid "Library '%s' not found" -msgstr "Bibliothek '%s' nicht gefunden" - -#: arduino/builder/internal/detector/detector.go:464 -msgid "" -"Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." -msgstr "" - -#: arduino/errors.go:575 -msgid "Library install failed" -msgstr "Installation der Bibliothek fehlgeschlagen" - -#: commands/lib/install.go:150 commands/lib/install.go:160 -msgid "Library installed" -msgstr "Bibliothek installiert" - -#: internal/cli/lib/search.go:161 -msgid "License: %s" -msgstr "Lizenz: %s" - -#: arduino/builder/builder.go:416 -msgid "Linking everything together..." -msgstr "" - -#: internal/cli/board/listall.go:39 -msgid "" -"List all boards that have the support platform installed. You can search\n" -"for a specific board if you specify the board name" -msgstr "" - -#: internal/cli/board/listall.go:38 -msgid "List all known boards and their corresponding FQBN." -msgstr "Liste alle bekannte Boards und ihre respektive FQBNs auf" - -#: internal/cli/board/list.go:43 -msgid "List connected boards." -msgstr "Verbundene Platinen auflisten." - -#: internal/cli/arguments/fqbn.go:42 -msgid "" -"List of board options separated by commas. Or can be used multiple times for" -" multiple options." -msgstr "" - -#: internal/cli/compile/compile.go:104 -msgid "" -"List of custom build properties separated by commas. Or can be used multiple" -" times for multiple properties." -msgstr "" - -#: internal/cli/lib/list.go:55 -msgid "List updatable libraries." -msgstr "Aktualisierbare Bibliotheken auflisten." - -#: internal/cli/core/list.go:44 -msgid "List updatable platforms." -msgstr "Aktualisierbare Plattformen auflisten." - -#: internal/cli/board/board.go:33 -msgid "Lists all connected boards." -msgstr "Listet alle verbundenen Platinen auf." - -#: internal/cli/outdated/outdated.go:41 -msgid "Lists cores and libraries that can be upgraded" -msgstr "" - -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 -msgid "Loading index file: %v" -msgstr "Indexdatei wird geladen: %v" - -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 -msgid "Location" -msgstr "Ort" - -#: arduino/builder/sizer.go:204 -msgid "Low memory available, stability problems may occur." -msgstr "" -"Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme auftreten." - -#: internal/cli/lib/search.go:156 -msgid "Maintainer: %s" -msgstr "" - -#: internal/cli/arguments/discovery_timeout.go:31 -msgid "Max time to wait for port discovery, e.g.: 30s, 1m" -msgstr "" - -#: internal/cli/cli.go:110 -msgid "" -"Messages with this level and above will be logged. Valid levels are: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:459 -msgid "Missing '%[1]s' from library in %[2]s" -msgstr "'%[1]s' aus der Bibliothek in %[2]s fehlt" - -#: arduino/errors.go:171 -msgid "Missing FQBN (Fully Qualified Board Name)" -msgstr "Fehlender FQBN (Fully Qualified Board Name)" - -#: arduino/errors.go:262 -msgid "Missing port" -msgstr "Fehlender Port" - -#: arduino/errors.go:238 -msgid "Missing port address" -msgstr "Fehlende Port-Adresse" - -#: arduino/errors.go:250 -msgid "Missing port protocol" -msgstr "Fehlendes Port-Protokoll" - -#: arduino/errors.go:288 -msgid "Missing programmer" -msgstr "" - -#: internal/cli/upload/upload.go:162 -msgid "Missing required upload field: %s" -msgstr "" - -#: arduino/builder/sizer.go:243 -msgid "Missing size regexp" -msgstr "" - -#: arduino/errors.go:498 -msgid "Missing sketch path" -msgstr "" - -#: arduino/errors.go:359 -msgid "Monitor '%s' not found" -msgstr "" - -#: internal/cli/monitor/monitor.go:141 -msgid "Monitor port settings:" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:153 -msgid "Multiple libraries were found for \"%[1]s\"" -msgstr "Mehrere Bibliotheken wurden für \"%[1]s\" gefunden" - -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 -msgid "Name" -msgstr "Name" - -#: internal/cli/lib/search.go:135 -msgid "Name: \"%s\"" -msgstr "" - -#: internal/cli/upload/upload.go:221 -msgid "New upload port: %[1]s (%[2]s)" -msgstr "" - -#: internal/cli/board/list.go:122 -msgid "No boards found." -msgstr "Keine Platinen gefunden." - -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "Kein Standard-Port oder Standard-FQBN konfiguriert" - -#: internal/cli/lib/examples.go:105 -msgid "No libraries found." -msgstr "Keine Bibliotheken gefunden." - -#: internal/cli/lib/list.go:128 -msgid "No libraries installed." -msgstr "Keine Bibliotheken installiert." - -#: internal/cli/lib/search.go:124 -msgid "No libraries matching your search." -msgstr "Keine Bibliotheken stimmen mit Ihrer Suche überein." - -#: internal/cli/lib/search.go:130 -msgid "" -"No libraries matching your search.\n" -"Did you mean...\n" -msgstr "" -"Keine Bibliotheken stimmen mit Ihrer Suche überein.\n" -"Meinten Sie ...\n" - -#: internal/cli/lib/list.go:126 -msgid "No libraries update is available." -msgstr "" - -#: arduino/errors.go:276 -msgid "No monitor available for the port protocol %s" -msgstr "" - -#: internal/cli/outdated/outdated.go:77 -msgid "No outdated platforms or libraries found." -msgstr "" - -#: internal/cli/core/list.go:86 -msgid "No platforms installed." -msgstr "" - -#: internal/cli/core/search.go:110 -msgid "No platforms matching your search." -msgstr "" - -#: commands/upload/upload.go:458 -msgid "No upload port found, using %s as fallback" -msgstr "" - -#: arduino/errors.go:465 -msgid "No valid dependencies solution found" -msgstr "" - -#: arduino/builder/sizer.go:194 -msgid "Not enough memory; see %[1]s for tips on reducing your footprint." -msgstr "" -"Nicht genug Arbeitsspeicher; unter %[1]s finden sich Hinweise, um die Größe " -"zu verringern." - -#: arduino/builder/internal/detector/detector.go:156 -msgid "Not used: %[1]s" -msgstr "Nicht benutzt: %[1]s" - -#: internal/cli/board/details.go:185 -msgid "OS:" -msgstr "BS:" - -#: internal/cli/board/details.go:147 -msgid "Official Arduino board:" -msgstr "Offizielles Arduino-Board:" - -#: internal/cli/lib/search.go:50 -msgid "" -"Omit library details far all versions except the latest (produce a more " -"compact JSON output)." -msgstr "" - -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 -msgid "Open a communication port with a board." -msgstr "Einen Kommunikations-Port mit einer Platine öffnen." - -#: internal/cli/board/details.go:197 -msgid "Option:" -msgstr "Option:" - -#: internal/cli/compile/compile.go:114 -msgid "" -"Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." -msgstr "" - -#: internal/cli/compile/compile.go:127 -msgid "Optional, cleanup the build folder and do not use any cached build." -msgstr "" - -#: internal/cli/compile/compile.go:124 -msgid "" -"Optional, optimize compile output for debugging, rather than for release." -msgstr "" - -#: internal/cli/compile/compile.go:116 -msgid "Optional, suppresses almost every output." -msgstr "" - -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 -msgid "Optional, turns on verbose mode." -msgstr "" - -#: internal/cli/compile/compile.go:132 -msgid "" -"Optional. Path to a .json file that contains a set of replacements of the " -"sketch source code." -msgstr "" - -#: internal/cli/compile/compile.go:106 -msgid "" -"Override a build property with a custom value. Can be used multiple times " -"for multiple properties." -msgstr "" - -#: internal/cli/config/init.go:57 -msgid "Overwrite existing config file." -msgstr "" - -#: internal/cli/sketch/archive.go:50 -msgid "Overwrites an already existing archive" -msgstr "" - -#: internal/cli/sketch/new.go:44 -msgid "Overwrites an existing .ino sketch." -msgstr "" - -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 -msgid "PACKAGER" -msgstr "PAKETIERER" - -#: internal/cli/board/details.go:163 -msgid "Package URL:" -msgstr "Paket-URL:" - -#: internal/cli/board/details.go:162 -msgid "Package maintainer:" -msgstr "" - -#: internal/cli/board/details.go:161 -msgid "Package name:" -msgstr "Paketname:" - -#: internal/cli/board/details.go:165 -msgid "Package online help:" -msgstr "" - -#: internal/cli/board/details.go:164 -msgid "Package website:" -msgstr "" - -#: internal/cli/lib/search.go:158 -msgid "Paragraph: %s" -msgstr "" - -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 -msgid "Path" -msgstr "Pfad" - -#: internal/cli/compile/compile.go:123 -msgid "" -"Path to a collection of libraries. Can be used multiple times or entries can" -" be comma separated." -msgstr "" - -#: internal/cli/compile/compile.go:121 -msgid "" -"Path to a single library’s root folder. Can be used multiple times or " -"entries can be comma separated." -msgstr "" - -#: internal/cli/cli.go:114 -msgid "Path to the file where logs will be written." -msgstr "" - -#: internal/cli/compile/compile.go:102 -msgid "" -"Path where to save compiled files. If omitted, a directory will be created " -"in the default temporary path of your OS." -msgstr "" - -#: commands/upload/upload.go:439 -msgid "Performing 1200-bps touch reset on serial port %s" -msgstr "" - -#: commands/core/install.go:54 commands/core/install.go:61 -msgid "Platform %s already installed" -msgstr "Plattform %s bereits installiert" - -#: arduino/cores/packagemanager/install_uninstall.go:192 -msgid "Platform %s installed" -msgstr "Plattform %s installiert" - -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 -msgid "" -"Platform %s is not found in any known index\n" -"Maybe you need to add a 3rd party URL?" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:316 -msgid "Platform %s uninstalled" -msgstr "Plattform %s deinstalliert" - -#: arduino/errors.go:483 -msgid "Platform '%s' is already at the latest version" -msgstr "" - -#: arduino/errors.go:407 -msgid "Platform '%s' not found" -msgstr "Plattform '%s' nicht gefunden" - -#: internal/cli/board/search.go:82 -msgid "Platform ID" -msgstr "" - -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 -msgid "Platform ID is not correct" -msgstr "" - -#: internal/cli/board/details.go:171 -msgid "Platform URL:" -msgstr "Plattform-URL:" - -#: internal/cli/board/details.go:170 -msgid "Platform architecture:" -msgstr "Plattformarchitektur:" - -#: internal/cli/board/details.go:169 -msgid "Platform category:" -msgstr "Plattformkategorie:" - -#: internal/cli/board/details.go:176 -msgid "Platform checksum:" -msgstr "" - -#: internal/cli/board/details.go:172 -msgid "Platform file name:" -msgstr "Plattformdateiname:" - -#: internal/cli/board/details.go:168 -msgid "Platform name:" -msgstr "Plattformname:" - -#: internal/cli/board/details.go:174 -msgid "Platform size (bytes):" -msgstr "Plattformgröße (Bytes):" - -#: arduino/errors.go:155 -msgid "" -"Please specify an FQBN. Multiple possible boards detected on port %[1]s with" -" protocol %[2]s" -msgstr "" -"Bitte gib ein FQBN an. Mehrere mögliche Boards wurden an Port %[1]s mit " -"Protokoll %[2]s entdeckt" - -#: arduino/errors.go:135 -msgid "" -"Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" -" identified" -msgstr "" -"Bitte gib ein FQBN an. Das Board an Port %[1]s mit Protokoll %[2]s kann " -"nicht identifiziert werden" - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -msgid "Port" -msgstr "Port" - -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 -msgid "Port closed: %v" -msgstr "Port geschlossen: %v" - -#: arduino/errors.go:669 -msgid "Port monitor error" -msgstr "" - -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 -msgid "Precompiled library in \"%[1]s\" not found" -msgstr "Vorkompilierte Bibliothek in \"%[1]s\" nicht gefunden" - -#: internal/cli/board/details.go:41 -msgid "Print details about a board." -msgstr "" - -#: internal/cli/compile/compile.go:98 -msgid "Print preprocessed code to stdout instead of compiling." -msgstr "" - -#: internal/cli/cli.go:106 internal/cli/cli.go:108 -msgid "Print the logs on the standard output." -msgstr "" - -#: internal/cli/config/dump.go:31 -msgid "Prints the current configuration" -msgstr "" - -#: internal/cli/config/dump.go:32 -msgid "Prints the current configuration." -msgstr "" - -#: arduino/errors.go:204 -msgid "Profile '%s' not found" -msgstr "Profil '%s' nicht gefunden" - -#: arduino/errors.go:340 -msgid "Programmer '%s' not found" -msgstr "" - -#: internal/cli/board/details.go:110 -msgid "Programmer name" -msgstr "" - -#: internal/cli/arguments/programmer.go:29 -msgid "Programmer to use, e.g: atmel_ice" -msgstr "" - -#: internal/cli/board/details.go:214 -msgid "Programmers:" -msgstr "" - -#: arduino/errors.go:392 -msgid "Property '%s' is undefined" -msgstr "" - -#: internal/cli/board/list.go:132 -msgid "Protocol" -msgstr "Protokoll" - -#: internal/cli/lib/search.go:168 -msgid "Provides includes: %s" -msgstr "" - -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 -msgid "Removes one or more values from a setting." -msgstr "" - -#: commands/lib/install.go:130 -msgid "Replacing %[1]s with %[2]s" -msgstr "Ersetze %[1]s durch %[2]s " - -#: arduino/cores/packagemanager/install_uninstall.go:121 -msgid "Replacing platform %[1]s with %[2]s" -msgstr "" - -#: internal/cli/board/details.go:182 -msgid "Required tool:" -msgstr "Erforderliches Werkzeug:" - -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 -msgid "Run in silent mode, show only monitor input and output." -msgstr "" - -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." -msgstr "" - -#: arduino/builder/core.go:42 -msgid "Running normal build of the core..." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 -msgid "Running pre_uninstall script." -msgstr "" - -#: internal/cli/debug/debug.go:185 -msgid "SVD file path" -msgstr "" - -#: internal/cli/compile/compile.go:100 -msgid "Save build artifacts in this directory." -msgstr "" - -#: internal/cli/board/search.go:38 -msgid "Search for a board in the Boards Manager using the specified keywords." -msgstr "" - -#: internal/cli/board/search.go:37 -msgid "Search for a board in the Boards Manager." -msgstr "" - -#: internal/cli/core/search.go:47 -msgid "Search for a core in Boards Manager using the specified keywords." -msgstr "" - -#: internal/cli/core/search.go:46 -msgid "Search for a core in Boards Manager." -msgstr "" - -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." -msgstr "" - -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "" - -#: internal/cli/lib/search.go:157 -msgid "Sentence: %s" -msgstr "" - -#: internal/cli/debug/debug.go:193 -msgid "Server path" -msgstr "" - -#: arduino/httpclient/httpclient.go:73 -msgid "Server responded with: %s" -msgstr "" - -#: internal/cli/debug/debug.go:192 -msgid "Server type" -msgstr "" - -#: internal/cli/upload/upload.go:81 -msgid "Set a value for a field required to upload." -msgstr "" - -#: internal/cli/monitor/monitor.go:68 -msgid "Set terminal in raw mode (unbuffered)." -msgstr "" - -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 -msgid "Sets a setting value." -msgstr "" - -#: internal/cli/board/attach.go:36 -msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." -msgstr "" -"Setzt die Standardwerte für Port und FQBN. Wenn kein Port oder FQBN " -"angegeben wird, werden der Standard-Port und -FQBN angezeigt." - -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 -msgid "Sets where to save the configuration file." -msgstr "" - -#: internal/cli/monitor/monitor.go:232 -msgid "Setting" -msgstr "Einstellung" - -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "" - -#: internal/cli/core/search.go:52 -msgid "Show all available core versions." -msgstr "Zeige alle verfügbare Core-Versionen." - -#: internal/cli/monitor/monitor.go:69 -msgid "Show all the settings of the communication port." -msgstr "" - -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 -msgid "Show also boards marked as 'hidden' in the platform" -msgstr "" - -#: internal/cli/arguments/show_properties.go:59 -msgid "" -"Show build properties. The properties are expanded, use \"--show-" -"properties=unexpanded\" if you want them exactly as they are defined." -msgstr "" - -#: internal/cli/board/details.go:51 -msgid "Show full board details" -msgstr "Vollständige Platinendetails anzeigen" - -#: internal/cli/board/details.go:42 -msgid "" -"Show information about a board, in particular if the board has options to be" -" specified in the FQBN." -msgstr "" -"Zeige Informationen über ein Board, im Besonderen wenn das Board die Option " -"hat, im FQBN angegeben zu werden." - -#: internal/cli/lib/search.go:49 -msgid "Show library names only." -msgstr "Nur Namen der Bibliotheken anzeigen." - -#: internal/cli/board/details.go:52 -msgid "Show list of available programmers" -msgstr "Zeige alle verfügbare Programmer" - -#: internal/cli/debug/debug.go:63 -msgid "" -"Show metadata about the debug session instead of starting the debugger." -msgstr "" - -#: internal/cli/update/update.go:45 -msgid "Show outdated cores and libraries after index update" -msgstr "" - -#: internal/cli/lib/list.go:39 -msgid "Shows a list of installed libraries." -msgstr "Zeige die Liste mit den installierten Bibliotheken." - -#: internal/cli/lib/list.go:40 -msgid "" -"Shows a list of installed libraries.\n" -"\n" -"If the LIBNAME parameter is specified the listing is limited to that specific\n" -"library. By default the libraries provided as built-in by platforms/core are\n" -"not listed, they can be listed by adding the --all flag." -msgstr "" - -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 -msgid "Shows the list of installed platforms." -msgstr "" - -#: internal/cli/lib/examples.go:43 -msgid "Shows the list of the examples for libraries." -msgstr "" - -#: internal/cli/lib/examples.go:44 -msgid "" -"Shows the list of the examples for libraries. A name may be given as " -"argument to search a specific library." -msgstr "" - -#: internal/cli/version/version.go:39 -msgid "" -"Shows the version number of Arduino CLI which is installed on your system." -msgstr "" - -#: internal/cli/version/version.go:38 -msgid "Shows version number of Arduino CLI." -msgstr "" - -#: internal/cli/board/details.go:187 -msgid "Size (bytes):" -msgstr "Größe (Bytes):" - -#: commands/compile/compile.go:209 -msgid "" -"Sketch cannot be located in build path. Please specify a different build " -"path" -msgstr "" - -#: internal/cli/sketch/new.go:84 -msgid "Sketch created in: %s" -msgstr "Sketch erstellt in: %s" - -#: internal/cli/arguments/profiles.go:29 -msgid "Sketch profile to use" -msgstr "" - -#: arduino/builder/sizer.go:189 -msgid "Sketch too big; see %[1]s for tips on reducing it." -msgstr "" -"Der Sketch ist zu groß; unter %[1]s finden sich Hinweise, um die Größe zu " -"verringern." - -#: arduino/builder/sizer.go:157 -msgid "" -"Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" -" bytes." -msgstr "" -"Der Sketch verwendet %[1]s Bytes (%[3]s%%) des Programmspeicherplatzes. Das " -"Maximum sind %[2]s Bytes." - -#: commands/sketch/warn_deprecated.go:29 -msgid "" -"Sketches with .pde extension are deprecated, please rename the following " -"files to .ino:" -msgstr "" - -#: arduino/builder/linker.go:30 -msgid "Skip linking of final executable." -msgstr "" - -#: commands/upload/upload.go:432 -msgid "Skipping 1200-bps touch reset: no serial port selected!" -msgstr "" - -#: arduino/builder/archive_compiled_files.go:29 -msgid "Skipping archive creation of: %[1]s" -msgstr "" - -#: arduino/builder/compilation.go:177 -msgid "Skipping compile of: %[1]s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:407 -msgid "Skipping dependencies detection for precompiled library %[1]s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:188 -msgid "Skipping platform configuration." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 -msgid "Skipping pre_uninstall script." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:365 -msgid "Skipping tool configuration." -msgstr "" - -#: arduino/builder/recipe.go:48 -msgid "Skipping: %[1]s" -msgstr "Wird übersprungen: %[1]s" - -#: commands/instances.go:575 -msgid "Some indexes could not be updated." -msgstr "" - -#: internal/cli/core/upgrade.go:125 -msgid "Some upgrades failed, please check the output for details." -msgstr "" - -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "" - -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" -msgstr "TCP-Port, der vom Daemon überwacht wird" - -#: internal/cli/cli.go:125 -msgid "The custom config file (if not specified the default will be used)." -msgstr "" - -#: internal/cli/daemon/daemon.go:77 -msgid "The flag --debug-file must be used with --debug." -msgstr "Das Flag --debug-file muss mit --debug benutzt werden." - -#: internal/cli/config/add.go:93 -msgid "" -"The key '%[1]v' is not a list of items, can't add to it.\n" -"Maybe use '%[2]s'?" -msgstr "" - -#: internal/cli/config/remove.go:51 -msgid "" -"The key '%[1]v' is not a list of items, can't remove from it.\n" -"Maybe use '%[2]s'?" -msgstr "" - -#: arduino/errors.go:859 -msgid "The library %s has multiple installations:" -msgstr "" - -#: internal/cli/compile/compile.go:112 -msgid "" -"The name of the custom encryption key to use to encrypt a binary during the " -"compile process. Used only by the platforms that support it." -msgstr "" - -#: internal/cli/compile/compile.go:110 -msgid "" -"The name of the custom signing key to use to sign a binary during the " -"compile process. Used only by the platforms that support it." -msgstr "" - -#: internal/cli/cli.go:116 internal/cli/cli.go:121 -msgid "The output format for the logs, can be: %s" -msgstr "" - -#: internal/cli/compile/compile.go:108 -msgid "" -"The path of the dir to search for the custom keys to sign and encrypt a " -"binary. Used only by the platforms that support it." -msgstr "" - -#: arduino/builder/libraries.go:151 -msgid "The platform does not support '%[1]s' for precompiled libraries." -msgstr "" - -#: internal/cli/lib/upgrade.go:35 -msgid "" -"This command upgrades an installed library to the latest available version. " -"Multiple libraries can be passed separated by a space. If no arguments are " -"provided, the command will upgrade all the installed libraries where an " -"update is available." -msgstr "" - -#: internal/cli/outdated/outdated.go:42 -msgid "" -"This commands shows a list of installed cores and/or libraries\n" -"that can be upgraded. If nothing needs to be updated the output is empty." -msgstr "" - -#: internal/cli/monitor/monitor.go:72 -msgid "Timestamp each incoming line." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 -msgid "Tool %s already installed" -msgstr "Werkzeug %s bereits installiert" - -#: arduino/cores/packagemanager/install_uninstall.go:429 -msgid "Tool %s uninstalled" -msgstr "Werkzeug %s deinstalliert" - -#: commands/debug/debug.go:139 -msgid "Toolchain '%s' is not supported" -msgstr "" - -#: internal/cli/debug/debug.go:182 -msgid "Toolchain path" -msgstr "" - -#: internal/cli/debug/debug.go:183 -msgid "Toolchain prefix" -msgstr "" - -#: internal/cli/debug/debug.go:181 -msgid "Toolchain type" -msgstr "" - -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 -msgid "Try running %s" -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:57 -msgid "Turns on verbose mode." -msgstr "" - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -msgid "Type" -msgstr "Typ" - -#: internal/cli/lib/search.go:165 -msgid "Types: %s" -msgstr "Typen: %s" - -#: internal/cli/board/details.go:189 -msgid "URL:" -msgstr "URL:" - -#: arduino/builder/core.go:143 -msgid "" -"Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" -msgstr "" - -#: configuration/configuration.go:122 -msgid "Unable to get Documents Folder: %v" -msgstr "" - -#: configuration/configuration.go:97 -msgid "Unable to get Local App Data Folder: %v" -msgstr "" - -#: configuration/configuration.go:85 configuration/configuration.go:110 -msgid "Unable to get user home dir: %v" -msgstr "" - -#: internal/cli/cli.go:204 -msgid "Unable to open file for logging: %s" -msgstr "" - -#: commands/instances.go:542 -msgid "Unable to parse URL" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 -msgid "Uninstalling %s" -msgstr "%s wird deinstalliert" - -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 -msgid "Uninstalling %s, tool is no more required" -msgstr "" - -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 -msgid "" -"Uninstalls one or more cores and corresponding tool dependencies if no " -"longer used." -msgstr "" - -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 -msgid "Uninstalls one or more libraries." -msgstr "" - -#: internal/cli/board/list.go:164 -msgid "Unknown" -msgstr "Unbekannt" - -#: arduino/errors.go:185 -msgid "Unknown FQBN" -msgstr "Unbekannter FQBN" - -#: internal/cli/update/update.go:37 -msgid "Updates the index of cores and libraries" -msgstr "" - -#: internal/cli/update/update.go:38 -msgid "Updates the index of cores and libraries to the latest versions." -msgstr "" - -#: internal/cli/core/update_index.go:34 -msgid "Updates the index of cores to the latest version." -msgstr "" - -#: internal/cli/core/update_index.go:33 -msgid "Updates the index of cores." -msgstr "Aktualisiert den Index der Kerne." - -#: internal/cli/lib/update_index.go:34 -msgid "Updates the libraries index to the latest version." -msgstr "Aktualisiert den Bibliotheksindex auf die neueste Version." - -#: internal/cli/lib/update_index.go:33 -msgid "Updates the libraries index." -msgstr "Aktualisiert den Bibliotheksindex." - -#: arduino/cores/packagemanager/install_uninstall.go:44 -msgid "Upgrade doesn't accept parameters with version" -msgstr "" - -#: internal/cli/upgrade/upgrade.go:38 -msgid "Upgrades installed cores and libraries to latest version." -msgstr "" - -#: internal/cli/upgrade/upgrade.go:37 -msgid "Upgrades installed cores and libraries." -msgstr "" - -#: internal/cli/lib/upgrade.go:34 -msgid "Upgrades installed libraries." -msgstr "" - -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 -msgid "Upgrades one or all installed platforms to the latest version." -msgstr "" - -#: internal/cli/upload/upload.go:57 -msgid "Upload Arduino sketches." -msgstr "" - -#: internal/cli/upload/upload.go:58 -msgid "" -"Upload Arduino sketches. This does NOT compile the sketch prior to upload." -msgstr "" - -#: internal/cli/arguments/port.go:42 -msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" -msgstr "" - -#: commands/upload/upload.go:456 -msgid "Upload port found on %s" -msgstr "" - -#: internal/cli/arguments/port.go:46 -msgid "Upload port protocol, e.g: serial" -msgstr "" - -#: internal/cli/compile/compile.go:117 -msgid "Upload the binary after the compilation." -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:47 -msgid "Upload the bootloader on the board using an external programmer." -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:46 -msgid "Upload the bootloader." -msgstr "" - -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 -msgid "" -"Uploading to specified board using %s protocol requires the following info:" -msgstr "" - -#: internal/cli/config/init.go:103 -msgid "" -"Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" -"%s" -msgstr "" - -#: internal/cli/usage.go:26 -msgid "Usage:" -msgstr "" - -#: internal/cli/usage.go:33 -msgid "Use %s for more information about a command." -msgstr "Benutze %s für mehr Informationen über einen Befehl." - -#: internal/cli/compile/compile.go:425 -msgid "Used library" -msgstr "Benutzte Bibliothek" - -#: internal/cli/compile/compile.go:440 -msgid "Used platform" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:154 -msgid "Used: %[1]s" -msgstr "Benutzt: %[1]s" - -#: commands/compile/compile.go:280 -msgid "Using board '%[1]s' from platform in folder: %[2]s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:347 -msgid "Using cached library dependencies for file: %[1]s" -msgstr "" - -#: commands/compile/compile.go:281 -msgid "Using core '%[1]s' from platform in folder: %[2]s" -msgstr "" - -#: arduino/builder/libraries.go:312 -msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" -msgstr "" -"Bibliothek %[1]s in Version %[2]s im Ordner: %[3]s %[4]s wird verwendet" - -#: arduino/builder/libraries.go:306 -msgid "Using library %[1]s in folder: %[2]s %[3]s" -msgstr "Bibliothek %[1]s im Ordner: %[2]s %[3]s wird verwendet" - -#: arduino/builder/core.go:116 -msgid "Using precompiled core: %[1]s" -msgstr "" - -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 -msgid "Using precompiled library in %[1]s" -msgstr "Benutze vorkompilierte Bibliothek in %[1]s" - -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 -msgid "Using previously compiled file: %[1]s" -msgstr "Zuvor kompilierte Datei wird verwendet: %[1]s" - -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -msgid "VERSION" -msgstr "VERSION" - -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 -msgid "VERSION_NUMBER" -msgstr "VERSION_NUMMER" - -#: internal/cli/monitor/monitor.go:232 -msgid "Values" -msgstr "Werte" - -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 -msgid "Verify uploaded binary after the upload." -msgstr "" - -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 -msgid "Version" -msgstr "Version" - -#: internal/cli/lib/search.go:166 -msgid "Versions: %s" -msgstr "Versionen: %s" - -#: arduino/cores/packagemanager/install_uninstall.go:183 -msgid "WARNING cannot configure platform: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:361 -msgid "WARNING cannot configure tool: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 -msgid "WARNING cannot run pre_uninstall script: %s" -msgstr "" - -#: internal/cli/compile/compile.go:307 -msgid "WARNING: The sketch is compiled using one or more custom libraries." -msgstr "" - -#: arduino/builder/libraries.go:283 -msgid "" -"WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " -"incompatible with your current board which runs on %[3]s architecture(s)." -msgstr "" -"WARNUNG: Bibliothek %[1]s behauptet auf %[2]s Architektur(en) ausgeführt " -"werden zu können und ist möglicherweise inkompatibel mit Ihrer derzeitigen " -"Platine, welche auf %[3]s Architektur(en) ausgeführt wird." - -#: commands/upload/upload.go:445 -msgid "Waiting for upload port..." -msgstr "Warten auf Upload-Port ..." - -#: commands/compile/compile.go:286 -msgid "" -"Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" -msgstr "" -"Warnung: Board %[1]s definiert keine %[2]s Präferenz. Automatisch gesetzt " -"auf: %[3]s" - -#: internal/cli/lib/search.go:159 -msgid "Website: %s" -msgstr "Webseite: %s" - -#: internal/cli/config/init.go:42 -msgid "Writes current configuration to a configuration file." -msgstr "" - -#: internal/cli/config/init.go:45 -msgid "" -"Writes current configuration to the configuration file in the data " -"directory." -msgstr "" - -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "Konfigurationsdatei wird geschrieben: %v" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 -msgid "You cannot use the %s flag while compiling with a profile." -msgstr "" - -#: arduino/resources/checksums.go:79 -msgid "archive hash differs from hash in index" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:192 -msgid "archive is not valid: multiple files found in zip file top level" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:195 -msgid "archive is not valid: no files found in zip file top level" -msgstr "" - -#: internal/cli/sketch/archive.go:36 -msgid "archivePath" -msgstr "" - -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 -msgid "arduino-preprocessor pattern is missing" -msgstr "" - -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "" - -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" -msgstr "" - -#: commands/upload/upload.go:700 -msgid "binary file not found in %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:305 -msgid "board %s not found" -msgstr "Platine %s nicht gefunden" - -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 -msgid "boardname" -msgstr "Platinenname" - -#: arduino/libraries/librariesmanager/librariesmanager.go:161 -msgid "built-in libraries directory not set" -msgstr "" - -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 -msgid "can't find latest release of %s" -msgstr "" - -#: commands/instances.go:360 -msgid "can't find latest release of tool %s" -msgstr "" - -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 -msgid "can't find pattern for discovery with id %s" -msgstr "" - -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 -msgid "candidates" -msgstr "Kandidaten" - -#: commands/upload/upload.go:657 commands/upload/upload.go:664 -msgid "cannot execute upload tool: %s" -msgstr "" - -#: arduino/resources/install.go:39 -msgid "checking local archive integrity" -msgstr "" - -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 -msgid "cleaning build path" -msgstr "" - -#: internal/cli/cli.go:72 -msgid "command" -msgstr "Befehl" - -#: arduino/monitor/monitor.go:150 -msgid "command '%[1]s' failed: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 -msgid "communication out of sync, expected '%[1]s', received '%[2]s'" -msgstr "" - -#: arduino/resources/checksums.go:75 -msgid "computing hash: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:145 -msgid "copying library to destination directory:" -msgstr "kopiere Bibliothek in Zielordner:" - -#: commands/upload/upload.go:772 -msgid "could not find a valid build artifact" -msgstr "" - -#: commands/core/install.go:62 -msgid "could not overwrite" -msgstr "" - -#: commands/lib/install.go:133 -msgid "could not remove old library" -msgstr "konnte alte Bibliothek nicht entfernen" - -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 -msgid "could not update sketch project file" -msgstr "" - -#: arduino/builder/core.go:95 -msgid "creating core cache folder: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:217 -msgid "creating installed.json in %[1]s: %[2]s" -msgstr "" - -#: arduino/resources/install.go:44 arduino/resources/install.go:48 -msgid "creating temp dir for extraction: %s" -msgstr "" - -#: arduino/builder/sizer.go:195 -msgid "data section exceeds available space in board" -msgstr "Datenbereich überschreitet den verfügbaren Platz auf der Platine" - -#: commands/lib/resolve_deps.go:56 -msgid "dependency '%s' is not available" -msgstr "" - -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "Zielordner existiert bereits" - -#: arduino/libraries/librariesmanager/install.go:93 -msgid "destination dir %s already exists, cannot install" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:142 -msgid "destination directory already exists" -msgstr "Zielordner existiert bereits" - -#: arduino/libraries/librariesmanager/install.go:282 -msgid "directory doesn't exist: %s" -msgstr "Verzeichnis existiert nicht: %s" - -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:756 -msgid "discovery %s not found" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:760 -msgid "discovery %s not installed" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:698 -msgid "discovery release not found: %s" -msgstr "" - -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 -msgid "download a specific version (in this case 1.6.9)." -msgstr "eine bestimmte Version herunterladen (in diesem Fall 1.6.9)." - -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 -msgid "download the latest version of Arduino SAMD core." -msgstr "" - -#: internal/cli/feedback/rpc_progress.go:73 -msgid "downloaded" -msgstr "heruntergeladen" - -#: commands/instances.go:138 -msgid "downloading %[1]s tool: %[2]s" -msgstr "Werkzeug %[1]s wird heruntergeladen: %[2]s" - -#: arduino/cores/fqbn.go:48 -msgid "empty board identifier" -msgstr "leerer Platinenidentifikator" - -#: arduino/sketch/sketch.go:92 -msgid "error loading sketch project file:" -msgstr "Fehler beim Laden der Sketch-Projektdatei:" - -#: arduino/cores/packagemanager/loader.go:650 -msgid "error opening %s" -msgstr "Fehler beim Öffnen von %s" - -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 -msgid "error parsing version constraints" -msgstr "" - -#: commands/board/list.go:116 -msgid "error processing response from server" -msgstr "" - -#: commands/board/list.go:96 -msgid "error querying Arduino Cloud Api" -msgstr "" - -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" -msgstr "Archiv wird extrahiert: %s" - -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" -msgstr "Archiv wird extrahiert: %w" - -#: arduino/resources/checksums.go:144 -msgid "failed to compute hash of file \"%s\"" -msgstr "" - -#: commands/board/list.go:91 -msgid "failed to initialize http client" -msgstr "" - -#: arduino/resources/checksums.go:96 -msgid "fetched archive size differs from size specified in index" -msgstr "" - -#: arduino/resources/install.go:128 -msgid "files in archive must be placed in a subdirectory" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:61 -msgid "finding absolute path of %s" -msgstr "" - -#: internal/cli/cli.go:72 -msgid "flags" -msgstr "Flags" - -#: arduino/cores/packagemanager/loader.go:100 -msgid "following symlink %s" -msgstr "" - -#: internal/cli/lib/download.go:39 -msgid "for a specific version." -msgstr "für eine bestimmte Version." - -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 -msgid "for the latest version." -msgstr "für die neueste Version." - -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 -msgid "for the specific version." -msgstr "für die jeweilige Version." - -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" -msgstr "" - -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" -msgstr "" - -#: arduino/resources/download.go:53 -msgid "getting archive file info: %s" -msgstr "" - -#: arduino/resources/checksums.go:93 -msgid "getting archive info: %s" -msgstr "" - -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 -msgid "getting archive path: %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:311 -msgid "getting build properties for board %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:106 -msgid "getting discovery dependencies for platform %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:114 -msgid "getting monitor dependencies for platform %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 -msgid "getting tool dependencies for platform %[1]s: %[2]s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:153 -msgid "install directory not set" -msgstr "Installationsverzeichnis nicht festgelegt" - -#: commands/instances.go:142 -msgid "installing %[1]s tool: %[2]s" -msgstr "Werkzeug %[1]s wird installiert: %[2]s" - -#: arduino/cores/packagemanager/install_uninstall.go:209 -msgid "installing platform %[1]s: %[2]s" -msgstr "Plattform %[1]s wird installiert: %[2]s" - -#: internal/cli/feedback/terminal.go:36 -msgid "interactive terminal not supported for the '%s' output format" -msgstr "" - -#: arduino/sketch/profiles.go:191 -msgid "invalid '%s' directive" -msgstr "" - -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 -msgid "invalid checksum format: %s" -msgstr "" - -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 -msgid "invalid config option: %s" -msgstr "ungültige Konfigurationsoption: %s" - -#: internal/cli/arguments/reference.go:90 -msgid "invalid empty core architecture '%s'" -msgstr "" - -#: internal/cli/arguments/reference.go:67 -msgid "invalid empty core argument" -msgstr "" - -#: internal/cli/arguments/reference.go:86 -msgid "invalid empty core name '%s'" -msgstr "" - -#: internal/cli/arguments/reference.go:71 -msgid "invalid empty core reference '%s'" -msgstr "" - -#: internal/cli/arguments/reference.go:76 -msgid "invalid empty core version: '%s'" -msgstr "" - -#: internal/cli/lib/args.go:49 -msgid "invalid empty library name" -msgstr "ungültiger, leerer Bibliotheksname" - -#: internal/cli/lib/args.go:54 -msgid "invalid empty library version: %s" -msgstr "ungültige, leere Bibliotheksversion: %s" - -#: arduino/cores/board.go:142 -msgid "invalid empty option found" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:272 -msgid "invalid git url" -msgstr "Ungültige Git-URL" - -#: arduino/resources/checksums.go:48 -msgid "invalid hash '%[1]s': %[2]s" -msgstr "" - -#: internal/cli/arguments/reference.go:83 -msgid "invalid item %s" -msgstr "ungültiges Element %s" - -#: arduino/sketch/profiles.go:225 -msgid "invalid library directive:" -msgstr "" - -#: arduino/libraries/libraries_layout.go:65 -msgid "invalid library layout: %s" -msgstr "" - -#: arduino/libraries/libraries_location.go:88 -msgid "invalid library location: %s" -msgstr "Ungültiger Ort für Bibliothek: %s" - -#: arduino/libraries/loader.go:139 -msgid "invalid library: no header files found" -msgstr "ungültige Bibliothek: keine Header-Dateien gefunden" - -#: arduino/cores/board.go:145 -msgid "invalid option '%s'" -msgstr "Ungültige Option '%s'" - -#: internal/cli/arguments/show_properties.go:51 -msgid "invalid option '%s'." -msgstr "Ungültige Option '%s'." - -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" -msgstr "" - -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" -msgstr "ungültige Plattformarchivgröße: %s" - -#: arduino/sketch/profiles.go:195 -msgid "invalid platform identifier" -msgstr "ungültiger Plattformidentifikator" - -#: arduino/sketch/profiles.go:205 -msgid "invalid platform index URL:" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:363 -msgid "invalid pluggable monitor reference: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:126 -msgid "invalid port configuration value for %s: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" -msgstr "ungültige Port-Konfiguration: %s" - -#: commands/upload/upload.go:644 -msgid "invalid recipe '%[1]s': %[2]s" -msgstr "" - -#: commands/sketch/new.go:86 -msgid "" -"invalid sketch name \"%[1]s\": the first character must be alphanumeric or " -"\"_\", the following ones can also contain \"-\" and \".\". The last one " -"cannot be \".\"." -msgstr "" - -#: arduino/cores/board.go:149 -msgid "invalid value '%[1]s' for option '%[2]s'" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:273 -msgid "invalid version directory %s" -msgstr "" - -#: arduino/sketch/profiles.go:227 -msgid "invalid version:" -msgstr "ungültige Version:" - -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "Schlüssel in Einstellungen nicht gefunden" - -#: internal/cli/core/search.go:45 -msgid "keywords" -msgstr "Schlüsselwörter" - -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" -msgstr "Bibliothek %s bereits installiert" - -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" -msgstr "Bibliothek nicht gültig" - -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" -msgstr "Bibliothekspfad existiert nicht: %s" - -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" -msgstr "lade %[1]s: %[2]s" - -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" -msgstr "Platinen werden geladen: %s" - -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 -msgid "loading json index file %[1]s: %[2]s" -msgstr "" - -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 -msgid "loading library from %[1]s: %[2]s" -msgstr "lade Bibliothek von %[1]s: %[2]s" - -#: arduino/libraries/loader.go:54 -msgid "loading library.properties: %s" -msgstr "lade library.porperties: %s" - -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 -msgid "loading platform release %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:197 -msgid "loading platform.txt" -msgstr "lade platform.txt" - -#: arduino/cores/packagemanager/profiles.go:44 -msgid "loading required platform %s" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:60 -msgid "loading required tool %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:625 -msgid "loading tool release in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:190 -msgid "looking for boards.txt in %s" -msgstr "suche nach boards.txt in %s" - -#: arduino/sketch/sketch.go:76 -msgid "main file missing from sketch: %s" -msgstr "" - -#: arduino/sketch/profiles.go:189 -msgid "missing '%s' directive" -msgstr "" - -#: arduino/resources/checksums.go:40 -msgid "missing checksum for: %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:413 -msgid "missing package %[1]s referenced by board %[2]s" -msgstr "" - -#: internal/cli/core/upgrade.go:86 -msgid "missing package index for %s, future updates cannot be guaranteed" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:418 -msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:423 -msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" -msgstr "" - -#: arduino/resources/index.go:152 -msgid "missing signature" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:709 -msgid "monitor release not found: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 -msgid "moving extracted archive to destination dir: %s" -msgstr "" - -#: commands/upload/upload.go:767 -msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" -msgstr "" - -#: arduino/sketch/sketch.go:68 -msgid "multiple main sketch files found (%[1]v, %[2]v)" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:335 -msgid "" -"no compatible version of %[1]s tools found for the current os, try " -"contacting %[2]s" -msgstr "" - -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 -msgid "no instance specified" -msgstr "" - -#: commands/upload/upload.go:722 -msgid "no sketch or build directory/file specified" -msgstr "" - -#: arduino/sketch/sketch.go:55 -msgid "no such file or directory" -msgstr "" - -#: arduino/resources/install.go:131 -msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" -msgstr "" - -#: commands/upload/upload.go:639 -msgid "no upload port provided" -msgstr "" - -#: arduino/sketch/sketch.go:278 -msgid "no valid sketch found in %[1]s: missing %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:128 -msgid "no versions available for the current OS, try contacting %s" -msgstr "" - -#: internal/cli/feedback/terminal.go:39 -msgid "not running in a terminal" -msgstr "" - -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 -msgid "opening archive file: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:266 -msgid "opening boards.txt" -msgstr "boards.txt wird geöffnet" - -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 -msgid "opening signature file: %s" -msgstr "" - -#: arduino/security/signatures.go:78 -msgid "opening target file: %s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 -msgid "package %s not found" -msgstr "Paket %s nicht gefunden" - -#: arduino/cores/packagemanager/package_manager.go:481 -msgid "package '%s' not found" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 -msgid "parsing fqbn: %s" -msgstr "parse FQBN: %s" - -#: arduino/libraries/librariesindex/json.go:72 -msgid "parsing library_index.json: %s" -msgstr "parse library_index.json: %s" - -#: arduino/cores/packagemanager/loader.go:181 -msgid "path is not a platform directory: %s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:80 -msgid "platform %[1]s not found in package %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" -msgstr "Plattform %s ist nicht installiert" - -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 -msgid "platform not installed" -msgstr "Plattform nicht installiert" - -#: internal/cli/compile/compile.go:138 -msgid "please use --build-property instead." -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:126 -msgid "pluggable discovery already added: %s" -msgstr "" - -#: internal/cli/board/attach.go:34 -msgid "port" -msgstr "Port" - -#: internal/cli/arguments/port.go:125 -msgid "port not found: %[1]s %[2]s" -msgstr "Port nicht gefunden: %[1]s %[2]s" - -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" -msgstr "%[1]s wird gelesen: %[2]s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:176 -msgid "reading dir %[1]s: %[2]s" -msgstr "Verzeichnis %[1]s wird gelesen: %[2]s" - -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 -msgid "reading directory %s" -msgstr "Verzeichnis %s wird gelesen" - -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" -msgstr "" - -#: arduino/builder/sketch.go:83 -msgid "reading file %[1]s: %[2]s" -msgstr "Datei %[1]s wird gelesen: %[2]s" - -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" -msgstr "Dateien werden gelesen: %v" - -#: arduino/libraries/librariesresolver/cpp.go:104 -msgid "reading lib headers: %s" -msgstr "" - -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" -msgstr "" - -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" -msgstr "" - -#: arduino/libraries/librariesindex/json.go:66 -msgid "reading library_index.json: %s" -msgstr "lese library_index.json: %s" - -#: arduino/resources/install.go:121 -msgid "reading package root dir: %s" -msgstr "" - -#: commands/upload/upload.go:633 -msgid "recipe not found '%s'" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:557 -msgid "release %[1]s not found for tool %[2]s" -msgstr "" - -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 -msgid "release cannot be nil" -msgstr "" - -#: arduino/resources/download.go:44 -msgid "removing corrupted archive file: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:156 -msgid "removing library directory: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:308 -msgid "removing platform files: %s" -msgstr "Plattformdateien werden entfernt: %s" - -#: arduino/cores/packagemanager/download.go:87 -msgid "required version %[1]s not found for platform %[2]s" -msgstr "" - -#: arduino/security/signatures.go:74 -msgid "retrieving Arduino public keys: %s" -msgstr "" - -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" -msgstr "" - -#: arduino/resources/install.go:73 -msgid "searching package root dir: %s" -msgstr "" - -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 -msgid "sketch name cannot be empty" -msgstr "" - -#: commands/sketch/new.go:91 -msgid "sketch name cannot be the reserved name \"%[1]s\"" -msgstr "" - -#: commands/sketch/new.go:81 -msgid "" -"sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" -msgstr "" - -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 -msgid "sketch path is not valid" -msgstr "" - -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 -msgid "sketchPath" -msgstr "" - -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "Quelle ist kein Verzeichnis" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 -msgid "starting discovery %s" -msgstr "" - -#: arduino/resources/checksums.go:118 -msgid "testing archive checksum: %s" -msgstr "" - -#: arduino/resources/checksums.go:111 -msgid "testing archive size: %s" -msgstr "Archivgröße wird getestet: %s" - -#: arduino/resources/checksums.go:105 -msgid "testing if archive is cached: %s" -msgstr "" - -#: arduino/resources/install.go:37 -msgid "testing local archive integrity: %s" -msgstr "" - -#: arduino/builder/sizer.go:190 -msgid "text section exceeds available space in board" -msgstr "Textbereich überschreitet den verfügbaren Platz auf der Platine" - -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 -msgid "the compilation database may be incomplete or inaccurate" -msgstr "" - -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 -msgid "the server responded with status %s" -msgstr "" - -#: arduino/monitor/monitor.go:140 -msgid "timeout waiting for message" -msgstr "" - -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 -msgid "tool %s is not managed by package manager" -msgstr "" - -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 -msgid "tool %s not found" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:507 -msgid "tool '%[1]s' not found in package '%[2]s'" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:396 -msgid "tool not installed" -msgstr "Werkzeug nicht installiert" - -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 -msgid "tool release not found: %s" -msgstr "" - -#: arduino/cores/status.go:105 -msgid "tool version %s not found" -msgstr "Werkzeugversion %s nicht gefunden" - -#: commands/lib/install.go:61 -msgid "" -"two different versions of the library %[1]s are required: %[2]s and %[3]s" -msgstr "" -"zwei verschiedene Versionen der Bibliothek %[1]s sind erforderlich: %[2]s " -"und %[3]s" - -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 -msgid "unable to compute relative path to the sketch for the item" -msgstr "" - -#: arduino/builder/sketch.go:45 -msgid "unable to create a folder to save the sketch" -msgstr "" - -#: arduino/builder/sketch.go:126 -msgid "unable to create the folder containing the item" -msgstr "" - -#: internal/cli/config/dump.go:59 -msgid "unable to marshal config to YAML: %v" -msgstr "" - -#: arduino/builder/sketch.go:164 -msgid "unable to read contents of the destination item" -msgstr "" - -#: arduino/builder/sketch.go:137 -msgid "unable to read contents of the source item" -msgstr "" - -#: arduino/builder/sketch.go:147 -msgid "unable to write to destination file" -msgstr "Schreiben in Zieldatei unmöglich" - -#: arduino/cores/packagemanager/package_manager.go:286 -msgid "unknown package %s" -msgstr "unbekanntes Paket %s" - -#: arduino/cores/packagemanager/package_manager.go:293 -msgid "unknown platform %s:%s" -msgstr "unbekannte Plattform %s:%s" - -#: arduino/sketch/sketch.go:147 -msgid "unknown sketch file extension '%s'" -msgstr "" - -#: arduino/resources/checksums.go:61 -msgid "unsupported hash algorithm: %s" -msgstr "" - -#: internal/cli/core/upgrade.go:43 -msgid "upgrade arduino:samd to the latest version" -msgstr "" - -#: internal/cli/core/upgrade.go:41 -msgid "upgrade everything to the latest version" -msgstr "" - -#: commands/upload/upload.go:668 -msgid "uploading error: %s" -msgstr "Hochladefehler: %s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:159 -msgid "user directory not set" -msgstr "" - -#: internal/cli/feedback/terminal.go:73 -msgid "user input not supported for the '%s' output format" -msgstr "" - -#: internal/cli/feedback/terminal.go:76 -msgid "user input not supported in non interactive mode" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:176 -msgid "version %s not available for this operating system" -msgstr "Version %s ist für dieses Betriebssystem nicht verfügbar" - -#: arduino/cores/packagemanager/profiles.go:155 -msgid "version %s not found" -msgstr "Version %s nicht gefunden" - -#: commands/board/list.go:121 -msgid "wrong format in server response" -msgstr "falsches Format in der Serverantwort" diff --git a/install.sh b/install.sh index d248dffdfb5..2f74a65295e 100755 --- a/install.sh +++ b/install.sh @@ -84,7 +84,7 @@ initDownloadTool() { checkLatestVersion() { # Use the GitHub releases webpage to find the latest version for this project # so we don't get rate-limited. - CHECKLATESTVERSION_REGEX="v?[0-9][A-Za-z0-9\.-]*" + CHECKLATESTVERSION_REGEX="v\?[0-9][A-Za-z0-9\.-]*" CHECKLATESTVERSION_LATEST_URL="https://github.com/${PROJECT_OWNER}/${PROJECT_NAME}/releases/latest" if [ "$DOWNLOAD_TOOL" = "curl" ]; then CHECKLATESTVERSION_TAG=$(curl -SsL $CHECKLATESTVERSION_LATEST_URL | grep -o "Release $CHECKLATESTVERSION_REGEX · ${PROJECT_OWNER}/${PROJECT_NAME}" | grep -o "$CHECKLATESTVERSION_REGEX") @@ -117,7 +117,7 @@ downloadFile() { TAG=$1 fi # arduino-lint_0.4.0-rc1_Linux_64bit.[tar.gz, zip] - APPLICATION_DIST_PREFIX="${PROJECT_NAME}_${TAG}_" + APPLICATION_DIST_PREFIX="${PROJECT_NAME}_${TAG#"v"}_" if [ "$OS" = "Windows" ]; then APPLICATION_DIST_EXTENSION=".zip" else @@ -220,7 +220,7 @@ testVersion() { else # $PATH is intentionally a literal in this message. # shellcheck disable=SC2016 - echo "$PROJECT_NAME not found. You might want to add \"$EFFECTIVE_BINDIR\" to your "'$PATH' + echo "install.sh: $PROJECT_NAME not found. You might want to add \"$EFFECTIVE_BINDIR\" to your "'$PATH' fi set -e diff --git a/internal/algorithms/slices.go b/internal/algorithms/slices.go index ab904a97f94..90ea3d1984b 100644 --- a/internal/algorithms/slices.go +++ b/internal/algorithms/slices.go @@ -71,3 +71,17 @@ func NotEquals[T comparable](value T) Matcher[T] { return x != value } } + +// Uniq return a copy of the input array with all duplicates removed +func Uniq[T comparable](in []T) []T { + have := map[T]bool{} + var out []T + for _, v := range in { + if have[v] { + continue + } + out = append(out, v) + have[v] = true + } + return out +} diff --git a/arduino/builder/archive_compiled_files.go b/internal/arduino/builder/archive_compiled_files.go similarity index 79% rename from arduino/builder/archive_compiled_files.go rename to internal/arduino/builder/archive_compiled_files.go index b640e3e256e..ed87225e2ff 100644 --- a/arduino/builder/archive_compiled_files.go +++ b/internal/arduino/builder/archive_compiled_files.go @@ -16,17 +16,15 @@ package builder import ( + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" ) // ArchiveCompiledFiles fixdoc -func (b *Builder) archiveCompiledFiles(buildPath *paths.Path, archiveFile *paths.Path, objectFilesToArchive paths.PathList) (*paths.Path, error) { - archiveFilePath := buildPath.JoinPath(archiveFile) - +func (b *Builder) archiveCompiledFiles(archiveFilePath *paths.Path, objectFilesToArchive paths.PathList) (*paths.Path, error) { if b.onlyUpdateCompilationDatabase { if b.logger.Verbose() { - b.logger.Info(tr("Skipping archive creation of: %[1]s", archiveFilePath)) + b.logger.Info(i18n.Tr("Skipping archive creation of: %[1]s", archiveFilePath)) } return archiveFilePath, nil } @@ -45,11 +43,11 @@ func (b *Builder) archiveCompiledFiles(buildPath *paths.Path, archiveFile *paths // something changed, rebuild the core archive if rebuildArchive { if err := archiveFilePath.Remove(); err != nil { - return nil, errors.WithStack(err) + return nil, err } } else { if b.logger.Verbose() { - b.logger.Info(tr("Using previously compiled file: %[1]s", archiveFilePath)) + b.logger.Info(i18n.Tr("Using previously compiled file: %[1]s", archiveFilePath)) } return archiveFilePath, nil } @@ -63,11 +61,11 @@ func (b *Builder) archiveCompiledFiles(buildPath *paths.Path, archiveFile *paths command, err := b.prepareCommandForRecipe(properties, "recipe.ar.pattern", false) if err != nil { - return nil, errors.WithStack(err) + return nil, err } if err := b.execCommand(command); err != nil { - return nil, errors.WithStack(err) + return nil, err } } diff --git a/arduino/builder/build_options_manager.go b/internal/arduino/builder/build_options_manager.go similarity index 87% rename from arduino/builder/build_options_manager.go rename to internal/arduino/builder/build_options_manager.go index 0ff35611934..09f0afad815 100644 --- a/arduino/builder/build_options_manager.go +++ b/internal/arduino/builder/build_options_manager.go @@ -17,15 +17,16 @@ package builder import ( "encoding/json" + "fmt" "path/filepath" "strings" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) // buildOptions fixdoc @@ -33,7 +34,6 @@ type buildOptions struct { currentOptions *properties.Map hardwareDirs paths.PathList - builtInToolsDirs paths.PathList otherLibrariesDirs paths.PathList builtInLibrariesDirs *paths.Path buildPath *paths.Path @@ -47,7 +47,7 @@ type buildOptions struct { // newBuildOptions fixdoc func newBuildOptions( - hardwareDirs, builtInToolsDirs, otherLibrariesDirs paths.PathList, + hardwareDirs, otherLibrariesDirs paths.PathList, builtInLibrariesDirs, buildPath *paths.Path, sketch *sketch.Sketch, customBuildProperties []string, @@ -59,7 +59,6 @@ func newBuildOptions( opts := properties.NewMap() opts.Set("hardwareFolders", strings.Join(hardwareDirs.AsStrings(), ",")) - opts.Set("builtInToolsFolders", strings.Join(builtInToolsDirs.AsStrings(), ",")) opts.Set("otherLibrariesFolders", strings.Join(otherLibrariesDirs.AsStrings(), ",")) opts.SetPath("sketchLocation", sketch.FullPath) opts.Set("fqbn", fqbn.String()) @@ -84,7 +83,6 @@ func newBuildOptions( return &buildOptions{ currentOptions: opts, hardwareDirs: hardwareDirs, - builtInToolsDirs: builtInToolsDirs, otherLibrariesDirs: otherLibrariesDirs, builtInLibrariesDirs: builtInLibrariesDirs, buildPath: buildPath, @@ -100,7 +98,7 @@ func newBuildOptions( func (b *Builder) createBuildOptionsJSON() error { buildOptionsJSON, err := json.MarshalIndent(b.buildOptions.currentOptions, "", " ") if err != nil { - return errors.WithStack(err) + return err } return b.buildOptions.buildPath.Join("build.options.json").WriteFile(buildOptionsJSON) } @@ -110,10 +108,10 @@ func (b *Builder) wipeBuildPath() error { // control when this should be printed. // logger.Println(constants.LOG_LEVEL_INFO, constants.MSG_BUILD_OPTIONS_CHANGED + constants.MSG_REBUILD_ALL) if err := b.buildOptions.buildPath.RemoveAll(); err != nil { - return errors.WithMessage(err, tr("cleaning build path")) + return fmt.Errorf("%s: %w", i18n.Tr("cleaning build path"), err) } if err := b.buildOptions.buildPath.MkdirAll(); err != nil { - return errors.WithMessage(err, tr("cleaning build path")) + return fmt.Errorf("%s: %w", i18n.Tr("cleaning build path"), err) } return nil } @@ -125,11 +123,11 @@ func (b *Builder) wipeBuildPathIfBuildOptionsChanged() error { // Load previous build options map var buildOptionsJSONPrevious []byte - var _err error if buildOptionsFile := b.buildOptions.buildPath.Join("build.options.json"); buildOptionsFile.Exist() { - buildOptionsJSONPrevious, _err = buildOptionsFile.ReadFile() - if _err != nil { - return errors.WithStack(_err) + var err error + buildOptionsJSONPrevious, err = buildOptionsFile.ReadFile() + if err != nil { + return err } } @@ -139,7 +137,7 @@ func (b *Builder) wipeBuildPathIfBuildOptionsChanged() error { var prevOpts *properties.Map if err := json.Unmarshal(buildOptionsJSONPrevious, &prevOpts); err != nil || prevOpts == nil { - b.logger.Info(tr("%[1]s invalid, rebuilding all", "build.options.json")) + b.logger.Info(i18n.Tr("%[1]s invalid, rebuilding all", "build.options.json")) return b.wipeBuildPath() } diff --git a/arduino/builder/builder.go b/internal/arduino/builder/builder.go similarity index 85% rename from arduino/builder/builder.go rename to internal/arduino/builder/builder.go index 51646bdcf48..608baead6ee 100644 --- a/arduino/builder/builder.go +++ b/internal/arduino/builder/builder.go @@ -16,6 +16,7 @@ package builder import ( + "context" "errors" "fmt" "io" @@ -23,16 +24,17 @@ import ( "path/filepath" "strings" - "github.com/arduino/arduino-cli/arduino/builder/internal/compilation" - "github.com/arduino/arduino-cli/arduino/builder/internal/detector" - "github.com/arduino/arduino-cli/arduino/builder/internal/logger" - "github.com/arduino/arduino-cli/arduino/builder/internal/progress" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/executils" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/compilation" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/detector" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/diagnostics" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/logger" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/progress" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" @@ -43,6 +45,8 @@ var ErrSketchCannotBeLocatedInBuildPath = errors.New("sketch cannot be located i // Builder is a Sketch builder. type Builder struct { + ctx context.Context + sketch *sketch.Sketch buildProperties *properties.Map @@ -58,7 +62,8 @@ type Builder struct { customBuildProperties []string // core related - coreBuildCachePath *paths.Path + coreBuildCachePath *paths.Path + extraCoreBuildCachePaths paths.PathList logger *logger.BuilderLogger clean bool @@ -90,6 +95,10 @@ type Builder struct { buildOptions *buildOptions libsDetector *detector.SketchLibrariesDetector + + toolEnv []string + + diagnosticStore *diagnostics.Store } // buildArtifacts contains the result of various build @@ -107,14 +116,16 @@ type buildArtifacts struct { // NewBuilder creates a sketch Builder. func NewBuilder( + ctx context.Context, sk *sketch.Sketch, boardBuildProperties *properties.Map, buildPath *paths.Path, optimizeForDebug bool, coreBuildCachePath *paths.Path, + extraCoreBuildCachePaths paths.PathList, jobs int, requestBuildProperties []string, - hardwareDirs, builtInToolsDirs, otherLibrariesDirs paths.PathList, + hardwareDirs, otherLibrariesDirs paths.PathList, builtInLibrariesDirs *paths.Path, fqbn *cores.FQBN, clean bool, @@ -126,6 +137,7 @@ func NewBuilder( libraryDirs paths.PathList, stdout, stderr io.Writer, verbose bool, warningsLevel string, progresCB rpc.TaskProgressCB, + toolEnv []string, ) (*Builder, error) { buildProperties := properties.NewMap() if boardBuildProperties != nil { @@ -189,7 +201,9 @@ func NewBuilder( logger.Warn(string(verboseOut)) } - return &Builder{ + diagnosticStore := diagnostics.NewStore() + b := &Builder{ + ctx: ctx, sketch: sk, buildProperties: buildProperties, buildPath: buildPath, @@ -199,6 +213,7 @@ func NewBuilder( jobs: jobs, customBuildProperties: customBuildPropertiesArgs, coreBuildCachePath: coreBuildCachePath, + extraCoreBuildCachePaths: extraCoreBuildCachePaths, logger: logger, clean: clean, sourceOverrides: sourceOverrides, @@ -209,14 +224,9 @@ func NewBuilder( buildArtifacts: &buildArtifacts{}, targetPlatform: targetPlatform, actualPlatform: actualPlatform, - libsDetector: detector.NewSketchLibrariesDetector( - libsManager, libsResolver, - useCachedLibrariesResolution, - onlyUpdateCompilationDatabase, - logger, - ), + toolEnv: toolEnv, buildOptions: newBuildOptions( - hardwareDirs, builtInToolsDirs, otherLibrariesDirs, + hardwareDirs, otherLibrariesDirs, builtInLibrariesDirs, buildPath, sk, customBuildPropertiesArgs, @@ -226,7 +236,16 @@ func NewBuilder( buildProperties.GetPath("runtime.platform.path"), buildProperties.GetPath("build.core.path"), // TODO can we buildCorePath ? ), - }, nil + diagnosticStore: diagnosticStore, + libsDetector: detector.NewSketchLibrariesDetector( + libsManager, libsResolver, + useCachedLibrariesResolution, + onlyUpdateCompilationDatabase, + logger, + diagnosticStore, + ), + } + return b, nil } // GetBuildProperties returns the build properties for running this build @@ -249,6 +268,11 @@ func (b *Builder) ImportedLibraries() libraries.List { return b.libsDetector.ImportedLibraries() } +// CompilerDiagnostics returns the parsed compiler diagnostics +func (b *Builder) CompilerDiagnostics() diagnostics.Diagnostics { + return b.diagnosticStore.Diagnostics() +} + // Preprocess fixdoc func (b *Builder) Preprocess() ([]byte, error) { b.Progress.AddSubSteps(6) @@ -286,8 +310,9 @@ func (b *Builder) preprocess() error { } b.Progress.CompleteStep() - b.logIfVerbose(false, tr("Detecting libraries used...")) + b.logIfVerbose(false, i18n.Tr("Detecting libraries used...")) err := b.libsDetector.FindIncludes( + b.ctx, b.buildPath, b.buildProperties.GetPath("build.core.path"), b.buildProperties.GetPath("build.variant.path"), @@ -305,7 +330,7 @@ func (b *Builder) preprocess() error { b.warnAboutArchIncompatibleLibraries(b.libsDetector.ImportedLibraries()) b.Progress.CompleteStep() - b.logIfVerbose(false, tr("Generating function prototypes...")) + b.logIfVerbose(false, i18n.Tr("Generating function prototypes...")) if err := b.preprocessSketch(b.libsDetector.IncludeFolders()); err != nil { return err } @@ -345,9 +370,6 @@ func (b *Builder) Build() error { if buildErr != nil { return buildErr } - if err := b.exportProjectCMake(b.libsDetector.ImportedLibraries(), b.libsDetector.IncludeFolders()); err != nil { - return err - } b.Progress.CompleteStep() if err := b.size(); err != nil { @@ -360,7 +382,7 @@ func (b *Builder) Build() error { // Build fixdoc func (b *Builder) build() error { - b.logIfVerbose(false, tr("Compiling sketch...")) + b.logIfVerbose(false, i18n.Tr("Compiling sketch...")) if err := b.RunRecipe("recipe.hooks.sketch.prebuild", ".pattern", false); err != nil { return err } @@ -376,7 +398,7 @@ func (b *Builder) build() error { } b.Progress.CompleteStep() - b.logIfVerbose(false, tr("Compiling libraries...")) + b.logIfVerbose(false, i18n.Tr("Compiling libraries...")) if err := b.RunRecipe("recipe.hooks.libraries.prebuild", ".pattern", false); err != nil { return err } @@ -397,7 +419,7 @@ func (b *Builder) build() error { } b.Progress.CompleteStep() - b.logIfVerbose(false, tr("Compiling core...")) + b.logIfVerbose(false, i18n.Tr("Compiling core...")) if err := b.RunRecipe("recipe.hooks.core.prebuild", ".pattern", false); err != nil { return err } @@ -413,7 +435,7 @@ func (b *Builder) build() error { } b.Progress.CompleteStep() - b.logIfVerbose(false, tr("Linking everything together...")) + b.logIfVerbose(false, i18n.Tr("Linking everything together...")) if err := b.RunRecipe("recipe.hooks.linking.prelink", ".pattern", false); err != nil { return err } @@ -460,10 +482,10 @@ func (b *Builder) build() error { return nil } -func (b *Builder) prepareCommandForRecipe(buildProperties *properties.Map, recipe string, removeUnsetProperties bool) (*executils.Process, error) { +func (b *Builder) prepareCommandForRecipe(buildProperties *properties.Map, recipe string, removeUnsetProperties bool) (*paths.Process, error) { pattern := buildProperties.Get(recipe) if pattern == "" { - return nil, fmt.Errorf(tr("%[1]s pattern is missing"), recipe) + return nil, errors.New(i18n.Tr("%[1]s pattern is missing", recipe)) } commandLine := buildProperties.ExpandPropsInString(pattern) @@ -493,7 +515,7 @@ func (b *Builder) prepareCommandForRecipe(buildProperties *properties.Map, recip } } - command, err := executils.NewProcess(nil, parts...) + command, err := paths.NewProcess(b.toolEnv, parts...) if err != nil { return nil, err } @@ -504,7 +526,7 @@ func (b *Builder) prepareCommandForRecipe(buildProperties *properties.Map, recip return command, nil } -func (b *Builder) execCommand(command *executils.Process) error { +func (b *Builder) execCommand(command *paths.Process) error { if b.logger.Verbose() { b.logger.Info(utils.PrintableCommand(command.GetArgs())) command.RedirectStdoutTo(b.logger.Stdout()) diff --git a/arduino/builder/compilation.go b/internal/arduino/builder/compilation.go similarity index 86% rename from arduino/builder/compilation.go rename to internal/arduino/builder/compilation.go index e3c70900bf6..d3a1459da25 100644 --- a/arduino/builder/compilation.go +++ b/internal/arduino/builder/compilation.go @@ -22,10 +22,10 @@ import ( "strings" "sync" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" ) func (b *Builder) compileFiles( @@ -104,7 +104,7 @@ func (b *Builder) compileFiles( wg.Wait() if len(errorsList) > 0 { // output the first error - return nil, errors.WithStack(errorsList[0]) + return nil, errorsList[0] } objectFiles.Sort() return objectFiles, nil @@ -124,7 +124,7 @@ func (b *Builder) compileFileWithRecipe( properties.SetPath("source_file", source) relativeSource, err := sourcePath.RelTo(source) if err != nil { - return nil, errors.WithStack(err) + return nil, err } depsFile := buildPath.Join(relativeSource.String() + ".d") objectFile := buildPath.Join(relativeSource.String() + ".o") @@ -132,17 +132,17 @@ func (b *Builder) compileFileWithRecipe( properties.SetPath("object_file", objectFile) err = objectFile.Parent().MkdirAll() if err != nil { - return nil, errors.WithStack(err) + return nil, err } objIsUpToDate, err := utils.ObjFileIsUpToDate(source, objectFile, depsFile) if err != nil { - return nil, errors.WithStack(err) + return nil, err } command, err := b.prepareCommandForRecipe(properties, recipe, false) if err != nil { - return nil, errors.WithStack(err) + return nil, err } if b.compilationDatabase != nil { b.compilationDatabase.Add(source, command) @@ -166,15 +166,21 @@ func (b *Builder) compileFileWithRecipe( } b.logger.WriteStderr(commandStderr.Bytes()) + // Parse the output of the compiler to gather errors and warnings... + if b.diagnosticStore != nil { + b.diagnosticStore.Parse(command.GetArgs(), commandStdout.Bytes()) + b.diagnosticStore.Parse(command.GetArgs(), commandStderr.Bytes()) + } + // ...and then return the error if err != nil { - return nil, errors.WithStack(err) + return nil, err } } else if b.logger.Verbose() { if objIsUpToDate { - b.logger.Info(tr("Using previously compiled file: %[1]s", objectFile)) + b.logger.Info(i18n.Tr("Using previously compiled file: %[1]s", objectFile)) } else { - b.logger.Info(tr("Skipping compile of: %[1]s", objectFile)) + b.logger.Info(i18n.Tr("Skipping compile of: %[1]s", objectFile)) } } diff --git a/arduino/builder/core.go b/internal/arduino/builder/core.go similarity index 61% rename from arduino/builder/core.go rename to internal/arduino/builder/core.go index 7d61d962f18..f407ed60c41 100644 --- a/arduino/builder/core.go +++ b/internal/arduino/builder/core.go @@ -18,39 +18,39 @@ package builder import ( "crypto/md5" "encoding/hex" - "fmt" + "errors" "os" "strings" - "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/buildcache" f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/buildcache" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" ) // buildCore fixdoc func (b *Builder) buildCore() error { if err := b.coreBuildPath.MkdirAll(); err != nil { - return errors.WithStack(err) + return err } if b.coreBuildCachePath != nil { if _, err := b.coreBuildCachePath.RelTo(b.buildPath); err != nil { - b.logger.Info(tr("Couldn't deeply cache core build: %[1]s", err)) - b.logger.Info(tr("Running normal build of the core...")) + b.logger.Info(i18n.Tr("Couldn't deeply cache core build: %[1]s", err)) + b.logger.Info(i18n.Tr("Running normal build of the core...")) // TODO decide if we want to override this or not. (It's only used by the // compileCore function). b.coreBuildCachePath = nil } else if err := b.coreBuildCachePath.MkdirAll(); err != nil { - return errors.WithStack(err) + return err } } archiveFile, objectFiles, err := b.compileCore() if err != nil { - return errors.WithStack(err) + return err } b.buildArtifacts.coreObjectsFiles = objectFiles b.buildArtifacts.coreArchiveFilePath = archiveFile @@ -77,7 +77,7 @@ func (b *Builder) compileCore() (*paths.Path, paths.PathList, error) { includes, ) if err != nil { - return nil, nil, errors.WithStack(err) + return nil, nil, err } } @@ -89,34 +89,56 @@ func (b *Builder) compileCore() (*paths.Path, paths.PathList, error) { b.buildProperties.Get("compiler.optimization_flags"), realCoreFolder, ) - targetArchivedCore = b.coreBuildCachePath.Join(archivedCoreName, "core.a") - - if _, err := buildcache.New(b.coreBuildCachePath).GetOrCreate(archivedCoreName); errors.Is(err, buildcache.CreateDirErr) { - return nil, nil, fmt.Errorf(tr("creating core cache folder: %s", err)) - } - var canUseArchivedCore bool - if b.onlyUpdateCompilationDatabase || b.clean { - canUseArchivedCore = false - } else if isOlder, err := utils.DirContentIsOlderThan(realCoreFolder, targetArchivedCore); err != nil || !isOlder { - // Recreate the archive if ANY of the core files (including platform.txt) has changed - canUseArchivedCore = false - } else if targetCoreFolder == nil || realCoreFolder.EquivalentTo(targetCoreFolder) { - canUseArchivedCore = true - } else if isOlder, err := utils.DirContentIsOlderThan(targetCoreFolder, targetArchivedCore); err != nil || !isOlder { - // Recreate the archive if ANY of the build core files (including platform.txt) has changed - canUseArchivedCore = false - } else { - canUseArchivedCore = true + canUseArchivedCore := func(archivedCore *paths.Path) bool { + if b.onlyUpdateCompilationDatabase || b.clean { + return false + } + if isOlder, err := utils.DirContentIsOlderThan(realCoreFolder, archivedCore); err != nil || !isOlder { + // Recreate the archive if ANY of the core files (including platform.txt) has changed + return false + } + if targetCoreFolder == nil || realCoreFolder.EquivalentTo(targetCoreFolder) { + return true + } + if isOlder, err := utils.DirContentIsOlderThan(targetCoreFolder, archivedCore); err != nil || !isOlder { + // Recreate the archive if ANY of the build core files (including platform.txt) has changed + return false + } + return true } - if canUseArchivedCore { + // If there is an archived core in the current build cache, use it + targetArchivedCore = b.coreBuildCachePath.Join(archivedCoreName, "core.a") + if canUseArchivedCore(targetArchivedCore) { + // Extend the build cache expiration time + if _, err := buildcache.New(b.coreBuildCachePath).GetOrCreate(archivedCoreName); errors.Is(err, buildcache.CreateDirErr) { + return nil, nil, errors.New(i18n.Tr("creating core cache folder: %s", err)) + } // use archived core if b.logger.Verbose() { - b.logger.Info(tr("Using precompiled core: %[1]s", targetArchivedCore)) + b.logger.Info(i18n.Tr("Using precompiled core: %[1]s", targetArchivedCore)) } return targetArchivedCore, variantObjectFiles, nil } + + // Otherwise try the extra build cache paths to see if there is a precompiled core + // that can be used + for _, extraCoreBuildCachePath := range b.extraCoreBuildCachePaths { + extraTargetArchivedCore := extraCoreBuildCachePath.Join(archivedCoreName, "core.a") + if canUseArchivedCore(extraTargetArchivedCore) { + // use archived core + if b.logger.Verbose() { + b.logger.Info(i18n.Tr("Using precompiled core: %[1]s", extraTargetArchivedCore)) + } + return extraTargetArchivedCore, variantObjectFiles, nil + } + } + + // Create the build cache folder for the core + if _, err := buildcache.New(b.coreBuildCachePath).GetOrCreate(archivedCoreName); errors.Is(err, buildcache.CreateDirErr) { + return nil, nil, errors.New(i18n.Tr("creating core cache folder: %s", err)) + } } coreObjectFiles, err := b.compileFiles( @@ -125,12 +147,12 @@ func (b *Builder) compileCore() (*paths.Path, paths.PathList, error) { includes, ) if err != nil { - return nil, nil, errors.WithStack(err) + return nil, nil, err } - archiveFile, err := b.archiveCompiledFiles(b.coreBuildPath, paths.New("core.a"), coreObjectFiles) + archiveFile, err := b.archiveCompiledFiles(b.coreBuildPath.Join("core.a"), coreObjectFiles) if err != nil { - return nil, nil, errors.WithStack(err) + return nil, nil, err } // archive core.a @@ -138,13 +160,13 @@ func (b *Builder) compileCore() (*paths.Path, paths.PathList, error) { err := archiveFile.CopyTo(targetArchivedCore) if b.logger.Verbose() { if err == nil { - b.logger.Info(tr("Archiving built core (caching) in: %[1]s", targetArchivedCore)) + b.logger.Info(i18n.Tr("Archiving built core (caching) in: %[1]s", targetArchivedCore)) } else if os.IsNotExist(err) { - b.logger.Info(tr("Unable to cache built core, please tell %[1]s maintainers to follow %[2]s", + b.logger.Info(i18n.Tr("Unable to cache built core, please tell %[1]s maintainers to follow %[2]s", b.actualPlatform, "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-build-the-corea-archive-file")) } else { - b.logger.Info(tr("Error archiving built core (caching) in %[1]s: %[2]s", targetArchivedCore, err)) + b.logger.Info(i18n.Tr("Error archiving built core (caching) in %[1]s: %[2]s", targetArchivedCore, err)) } } } diff --git a/arduino/builder/cpp/cpp.go b/internal/arduino/builder/cpp/cpp.go similarity index 100% rename from arduino/builder/cpp/cpp.go rename to internal/arduino/builder/cpp/cpp.go diff --git a/arduino/builder/cpp/cpp_test.go b/internal/arduino/builder/cpp/cpp_test.go similarity index 97% rename from arduino/builder/cpp/cpp_test.go rename to internal/arduino/builder/cpp/cpp_test.go index b6ae543f558..400e3d1f02e 100644 --- a/arduino/builder/cpp/cpp_test.go +++ b/internal/arduino/builder/cpp/cpp_test.go @@ -18,7 +18,7 @@ package cpp_test import ( "testing" - "github.com/arduino/arduino-cli/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" "github.com/stretchr/testify/require" ) diff --git a/arduino/builder/internal/compilation/database.go b/internal/arduino/builder/internal/compilation/database.go similarity index 73% rename from arduino/builder/internal/compilation/database.go rename to internal/arduino/builder/internal/compilation/database.go index f6a6b1ab5f0..3d20d277fab 100644 --- a/arduino/builder/internal/compilation/database.go +++ b/internal/arduino/builder/internal/compilation/database.go @@ -19,18 +19,17 @@ import ( "encoding/json" "fmt" "os" + "sync" - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" ) -var tr = i18n.Tr - // Database keeps track of all the compile commands run by the builder type Database struct { - Contents []Command - File *paths.Path + lock sync.Mutex + contents []Command + file *paths.Path } // Command keeps track of a single run of a compile command @@ -44,8 +43,8 @@ type Command struct { // NewDatabase creates an empty CompilationDatabase func NewDatabase(filename *paths.Path) *Database { return &Database{ - File: filename, - Contents: []Command{}, + file: filename, + contents: []Command{}, } } @@ -56,29 +55,31 @@ func LoadDatabase(file *paths.Path) (*Database, error) { return nil, err } res := NewDatabase(file) - return res, json.Unmarshal(f, &res.Contents) + return res, json.Unmarshal(f, &res.contents) } // SaveToFile save the CompilationDatabase to file as a clangd-compatible compile_commands.json, // see https://clang.llvm.org/docs/JSONCompilationDatabase.html func (db *Database) SaveToFile() { - if jsonContents, err := json.MarshalIndent(db.Contents, "", " "); err != nil { - fmt.Println(tr("Error serializing compilation database: %s", err)) + db.lock.Lock() + defer db.lock.Unlock() + if jsonContents, err := json.MarshalIndent(db.contents, "", " "); err != nil { + fmt.Println(i18n.Tr("Error serializing compilation database: %s", err)) return - } else if err := db.File.WriteFile(jsonContents); err != nil { - fmt.Println(tr("Error writing compilation database: %s", err)) + } else if err := db.file.WriteFile(jsonContents); err != nil { + fmt.Println(i18n.Tr("Error writing compilation database: %s", err)) } } // Add adds a new CompilationDatabase entry -func (db *Database) Add(target *paths.Path, command *executils.Process) { +func (db *Database) Add(target *paths.Path, command *paths.Process) { commandDir := command.GetDir() if commandDir == "" { // This mimics what Cmd.Run also does: Use Dir if specified, // current directory otherwise dir, err := os.Getwd() if err != nil { - fmt.Println(tr("Error getting current directory for compilation database: %s", err)) + fmt.Println(i18n.Tr("Error getting current directory for compilation database: %s", err)) } commandDir = dir } @@ -89,5 +90,7 @@ func (db *Database) Add(target *paths.Path, command *executils.Process) { File: target.String(), } - db.Contents = append(db.Contents, entry) + db.lock.Lock() + db.contents = append(db.contents, entry) + db.lock.Unlock() } diff --git a/arduino/builder/internal/compilation/database_test.go b/internal/arduino/builder/internal/compilation/database_test.go similarity index 77% rename from arduino/builder/internal/compilation/database_test.go rename to internal/arduino/builder/internal/compilation/database_test.go index 26badfc6cb2..dde90738d91 100644 --- a/arduino/builder/internal/compilation/database_test.go +++ b/internal/arduino/builder/internal/compilation/database_test.go @@ -18,7 +18,6 @@ package compilation import ( "testing" - "github.com/arduino/arduino-cli/executils" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" ) @@ -28,7 +27,7 @@ func TestCompilationDatabase(t *testing.T) { require.NoError(t, err) defer tmpfile.Remove() - cmd, err := executils.NewProcess(nil, "gcc", "arg1", "arg2") + cmd, err := paths.NewProcess(nil, "gcc", "arg1", "arg2") require.NoError(t, err) db := NewDatabase(tmpfile) db.Add(paths.New("test"), cmd) @@ -37,11 +36,11 @@ func TestCompilationDatabase(t *testing.T) { db2, err := LoadDatabase(tmpfile) require.NoError(t, err) require.Equal(t, db, db2) - require.Len(t, db2.Contents, 1) - require.Equal(t, db2.Contents[0].File, "test") - require.Equal(t, db2.Contents[0].Command, "") - require.Equal(t, db2.Contents[0].Arguments, []string{"gcc", "arg1", "arg2"}) + require.Len(t, db2.contents, 1) + require.Equal(t, db2.contents[0].File, "test") + require.Equal(t, db2.contents[0].Command, "") + require.Equal(t, db2.contents[0].Arguments, []string{"gcc", "arg1", "arg2"}) cwd, err := paths.Getwd() require.NoError(t, err) - require.Equal(t, db2.Contents[0].Directory, cwd.String()) + require.Equal(t, db2.contents[0].Directory, cwd.String()) } diff --git a/arduino/builder/internal/detector/detector.go b/internal/arduino/builder/internal/detector/detector.go similarity index 81% rename from arduino/builder/internal/detector/detector.go rename to internal/arduino/builder/internal/detector/detector.go index 2c5f836374b..17de9377833 100644 --- a/arduino/builder/internal/detector/detector.go +++ b/internal/arduino/builder/internal/detector/detector.go @@ -17,7 +17,9 @@ package detector import ( "bytes" + "context" "encoding/json" + "errors" "fmt" "os/exec" "regexp" @@ -25,23 +27,21 @@ import ( "strings" "time" - "github.com/arduino/arduino-cli/arduino/builder/internal/logger" - "github.com/arduino/arduino-cli/arduino/builder/internal/preprocessor" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/libraries/librariesresolver" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/diagnostics" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/logger" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/preprocessor" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesresolver" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) -var tr = i18n.Tr - type libraryResolutionResult struct { Library *libraries.Library NotUsedLibraries []*libraries.Library @@ -57,6 +57,7 @@ type SketchLibrariesDetector struct { librariesResolutionResults map[string]libraryResolutionResult includeFolders paths.PathList logger *logger.BuilderLogger + diagnosticStore *diagnostics.Store } // NewSketchLibrariesDetector todo @@ -66,6 +67,7 @@ func NewSketchLibrariesDetector( useCachedLibrariesResolution bool, onlyUpdateCompilationDatabase bool, logger *logger.BuilderLogger, + diagnosticStore *diagnostics.Store, ) *SketchLibrariesDetector { return &SketchLibrariesDetector{ librariesManager: lm, @@ -76,6 +78,7 @@ func NewSketchLibrariesDetector( includeFolders: paths.PathList{}, onlyUpdateCompilationDatabase: onlyUpdateCompilationDatabase, logger: logger, + diagnosticStore: diagnosticStore, } } @@ -85,9 +88,9 @@ func (l *SketchLibrariesDetector) resolveLibrary(header, platformArch string) *l candidates := l.librariesResolver.AlternativesFor(header) if l.logger.Verbose() { - l.logger.Info(tr("Alternatives for %[1]s: %[2]s", header, candidates)) + l.logger.Info(i18n.Tr("Alternatives for %[1]s: %[2]s", header, candidates)) l.logger.Info(fmt.Sprintf("ResolveLibrary(%s)", header)) - l.logger.Info(fmt.Sprintf(" -> %s: %s", tr("candidates"), candidates)) + l.logger.Info(fmt.Sprintf(" -> %s: %s", i18n.Tr("candidates"), candidates)) } if len(candidates) == 0 { @@ -150,10 +153,10 @@ func (l *SketchLibrariesDetector) PrintUsedAndNotUsedLibraries(sketchError bool) if len(libResResult.NotUsedLibraries) == 0 { continue } - res += fmt.Sprintln(tr(`Multiple libraries were found for "%[1]s"`, header)) - res += fmt.Sprintln(" " + tr("Used: %[1]s", libResResult.Library.InstallDir)) + res += fmt.Sprintln(i18n.Tr(`Multiple libraries were found for "%[1]s"`, header)) + res += fmt.Sprintln(" " + i18n.Tr("Used: %[1]s", libResResult.Library.InstallDir)) for _, notUsedLibrary := range libResResult.NotUsedLibraries { - res += fmt.Sprintln(" " + tr("Not used: %[1]s", notUsedLibrary.InstallDir)) + res += fmt.Sprintln(" " + i18n.Tr("Not used: %[1]s", notUsedLibrary.InstallDir)) } } res = strings.TrimSpace(res) @@ -192,6 +195,7 @@ func (l *SketchLibrariesDetector) appendIncludeFolder( // FindIncludes todo func (l *SketchLibrariesDetector) FindIncludes( + ctx context.Context, buildPath *paths.Path, buildCorePath *paths.Path, buildVariantPath *paths.Path, @@ -201,13 +205,13 @@ func (l *SketchLibrariesDetector) FindIncludes( buildProperties *properties.Map, platformArch string, ) error { - err := l.findIncludes(buildPath, buildCorePath, buildVariantPath, sketchBuildPath, sketch, librariesBuildPath, buildProperties, platformArch) + err := l.findIncludes(ctx, buildPath, buildCorePath, buildVariantPath, sketchBuildPath, sketch, librariesBuildPath, buildProperties, platformArch) if err != nil && l.onlyUpdateCompilationDatabase { l.logger.Info( fmt.Sprintf( "%s: %s", - tr("An error occurred detecting libraries"), - tr("the compilation database may be incomplete or inaccurate"), + i18n.Tr("An error occurred detecting libraries"), + i18n.Tr("the compilation database may be incomplete or inaccurate"), ), ) return nil @@ -216,6 +220,7 @@ func (l *SketchLibrariesDetector) FindIncludes( } func (l *SketchLibrariesDetector) findIncludes( + ctx context.Context, buildPath *paths.Path, buildCorePath *paths.Path, buildVariantPath *paths.Path, @@ -231,8 +236,7 @@ func (l *SketchLibrariesDetector) findIncludes( if err != nil { return err } - includeFolders := l.includeFolders - if err := json.Unmarshal(d, &includeFolders); err != nil { + if err := json.Unmarshal(d, &l.includeFolders); err != nil { return err } if l.logger.Verbose() { @@ -255,7 +259,7 @@ func (l *SketchLibrariesDetector) findIncludes( sketch := sketch mergedfile, err := makeSourceFile(sketchBuildPath, sketchBuildPath, paths.New(sketch.MainFile.Base()+".cpp")) if err != nil { - return errors.WithStack(err) + return err } sourceFileQueue.push(mergedfile) @@ -266,22 +270,22 @@ func (l *SketchLibrariesDetector) findIncludes( } for !sourceFileQueue.empty() { - err := l.findIncludesUntilDone(cache, sourceFileQueue, buildProperties, sketchBuildPath, librariesBuildPath, platformArch) + err := l.findIncludesUntilDone(ctx, cache, sourceFileQueue, buildProperties, librariesBuildPath, platformArch) if err != nil { cachePath.Remove() - return errors.WithStack(err) + return err } } // Finalize the cache cache.ExpectEnd() if err := writeCache(cache, cachePath); err != nil { - return errors.WithStack(err) + return err } } if err := l.failIfImportedLibraryIsWrong(); err != nil { - return errors.WithStack(err) + return err } if d, err := json.Marshal(l.includeFolders); err != nil { @@ -294,10 +298,10 @@ func (l *SketchLibrariesDetector) findIncludes( } func (l *SketchLibrariesDetector) findIncludesUntilDone( + ctx context.Context, cache *includeCache, sourceFileQueue *uniqueSourceFileQueue, buildProperties *properties.Map, - sketchBuildPath *paths.Path, librariesBuildPath *paths.Path, platformArch string, ) error { @@ -321,7 +325,7 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone( // remove the object file if it is found to be stale? unchanged, err := utils.ObjFileIsUpToDate(sourcePath, objPath, depPath) if err != nil { - return errors.WithStack(err) + return err } first := true @@ -338,31 +342,31 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone( } var preprocErr error - var preprocStderr []byte + var preprocFirstResult preprocessor.Result var missingIncludeH string if unchanged && cache.valid { missingIncludeH = cache.Next().Include if first && l.logger.Verbose() { - l.logger.Info(tr("Using cached library dependencies for file: %[1]s", sourcePath)) + l.logger.Info(i18n.Tr("Using cached library dependencies for file: %[1]s", sourcePath)) } } else { - var preprocStdout []byte - preprocStdout, preprocStderr, preprocErr = preprocessor.GCC(sourcePath, targetFilePath, includeFolders, buildProperties) + preprocFirstResult, preprocErr = preprocessor.GCC(ctx, sourcePath, targetFilePath, includeFolders, buildProperties) if l.logger.Verbose() { - l.logger.WriteStdout(preprocStdout) + l.logger.WriteStdout(preprocFirstResult.Stdout()) } // Unwrap error and see if it is an ExitError. + var exitErr *exec.ExitError if preprocErr == nil { // Preprocessor successful, done missingIncludeH = "" - } else if _, isExitErr := errors.Cause(preprocErr).(*exec.ExitError); !isExitErr || preprocStderr == nil { + } else if isExitErr := errors.As(preprocErr, &exitErr); !isExitErr || preprocFirstResult.Stderr() == nil { // Ignore ExitErrors (e.g. gcc returning non-zero status), but bail out on other errors - return errors.WithStack(preprocErr) + return preprocErr } else { - missingIncludeH = IncludesFinderWithRegExp(string(preprocStderr)) + missingIncludeH = IncludesFinderWithRegExp(string(preprocFirstResult.Stderr())) if missingIncludeH == "" && l.logger.Verbose() { - l.logger.Info(tr("Error while detecting libraries included by %[1]s", sourcePath)) + l.logger.Info(i18n.Tr("Error while detecting libraries included by %[1]s", sourcePath)) } } } @@ -376,23 +380,26 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone( library := l.resolveLibrary(missingIncludeH, platformArch) if library == nil { // Library could not be resolved, show error - if preprocErr == nil || preprocStderr == nil { + if preprocErr == nil || preprocFirstResult.Stderr() == nil { // Filename came from cache, so run preprocessor to obtain error to show - var preprocStdout []byte - preprocStdout, preprocStderr, preprocErr = preprocessor.GCC(sourcePath, targetFilePath, includeFolders, buildProperties) + result, err := preprocessor.GCC(ctx, sourcePath, targetFilePath, includeFolders, buildProperties) if l.logger.Verbose() { - l.logger.WriteStdout(preprocStdout) + l.logger.WriteStdout(result.Stdout()) } - if preprocErr == nil { + if err == nil { // If there is a missing #include in the cache, but running // gcc does not reproduce that, there is something wrong. // Returning an error here will cause the cache to be // deleted, so hopefully the next compilation will succeed. - return errors.New(tr("Internal error in cache")) + return errors.New(i18n.Tr("Internal error in cache")) } + l.diagnosticStore.Parse(result.Args(), result.Stderr()) + l.logger.WriteStderr(result.Stderr()) + return err } - l.logger.WriteStderr(preprocStderr) - return errors.WithStack(preprocErr) + l.diagnosticStore.Parse(preprocFirstResult.Args(), preprocFirstResult.Stderr()) + l.logger.WriteStderr(preprocFirstResult.Stderr()) + return preprocErr } // Add this library to the list of libraries, the @@ -404,7 +411,7 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone( if library.Precompiled && library.PrecompiledWithSources { // Fully precompiled libraries should have no dependencies to avoid ABI breakage if l.logger.Verbose() { - l.logger.Info(tr("Skipping dependencies detection for precompiled library %[1]s", library.Name)) + l.logger.Info(i18n.Tr("Skipping dependencies detection for precompiled library %[1]s", library.Name)) } } else { for _, sourceDir := range library.SourceDirs() { @@ -430,13 +437,13 @@ func (l *SketchLibrariesDetector) queueSourceFilesFromFolder( } filePaths, err := utils.FindFilesInFolder(folder, recurse, sourceFileExtensions...) if err != nil { - return errors.WithStack(err) + return err } for _, filePath := range filePaths { sourceFile, err := makeSourceFile(sourceDir, buildDir, filePath, extraIncludePath...) if err != nil { - return errors.WithStack(err) + return err } sourceFileQueue.push(sourceFile) } @@ -452,16 +459,16 @@ func (l *SketchLibrariesDetector) failIfImportedLibraryIsWrong() error { for _, library := range l.importedLibraries { if !library.IsLegacy { if library.InstallDir.Join("arch").IsDir() { - return errors.New(tr("%[1]s folder is no longer supported! See %[2]s for more information", "'arch'", "http://goo.gl/gfFJzU")) + return errors.New(i18n.Tr("%[1]s folder is no longer supported! See %[2]s for more information", "'arch'", "http://goo.gl/gfFJzU")) } for _, propName := range libraries.MandatoryProperties { if !library.Properties.ContainsKey(propName) { - return errors.New(tr("Missing '%[1]s' from library in %[2]s", propName, library.InstallDir)) + return errors.New(i18n.Tr("Missing '%[1]s' from library in %[2]s", propName, library.InstallDir)) } } if library.Layout == libraries.RecursiveLayout { if library.UtilityDir != nil { - return errors.New(tr("Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'.", "src", "utility", library.InstallDir)) + return errors.New(i18n.Tr("Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'.", "src", "utility", library.InstallDir)) } } } @@ -598,33 +605,56 @@ func LibrariesLoader( if useCachedLibrariesResolution { // Since we are using the cached libraries resolution // the library manager is not needed. - lm = librariesmanager.NewLibraryManager(nil, nil) + lm, _ = librariesmanager.NewBuilder().Build() } if librariesManager == nil { - lm = librariesmanager.NewLibraryManager(nil, nil) + lmb := librariesmanager.NewBuilder() builtInLibrariesFolders := builtInLibrariesDirs if builtInLibrariesFolders != nil { if err := builtInLibrariesFolders.ToAbs(); err != nil { - return nil, nil, nil, errors.WithStack(err) + return nil, nil, nil, err } - lm.AddLibrariesDir(builtInLibrariesFolders, libraries.IDEBuiltIn) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: builtInLibrariesFolders, + Location: libraries.IDEBuiltIn, + }) } if actualPlatform != targetPlatform { - lm.AddPlatformReleaseLibrariesDir(actualPlatform, libraries.ReferencedPlatformBuiltIn) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + PlatformRelease: actualPlatform, + Path: actualPlatform.GetLibrariesDir(), + Location: libraries.ReferencedPlatformBuiltIn, + }) } - lm.AddPlatformReleaseLibrariesDir(targetPlatform, libraries.PlatformBuiltIn) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + PlatformRelease: targetPlatform, + Path: targetPlatform.GetLibrariesDir(), + Location: libraries.PlatformBuiltIn, + }) librariesFolders := otherLibrariesDirs if err := librariesFolders.ToAbs(); err != nil { - return nil, nil, nil, errors.WithStack(err) + return nil, nil, nil, err } for _, folder := range librariesFolders { - lm.AddLibrariesDir(folder, libraries.User) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: folder, + Location: libraries.User, // XXX: Should be libraries.Unmanaged? + }) + } + + for _, dir := range libraryDirs { + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: dir, + Location: libraries.Unmanaged, + IsSingleLibrary: true, + }) } - for _, status := range lm.RescanLibraries() { + newLm, libsLoadingWarnings := lmb.Build() + for _, status := range libsLoadingWarnings { // With the refactoring of the initialization step of the CLI we changed how // errors are returned when loading platforms and libraries, that meant returning a list of // errors instead of a single one to enhance the experience for the user. @@ -633,30 +663,11 @@ func LibrariesLoader( // When we're gonna refactor the legacy package this will be gone. verboseOut.Write([]byte(status.Message())) } - - for _, dir := range libraryDirs { - // Libraries specified this way have top priority - if err := lm.LoadLibraryFromDir(dir, libraries.Unmanaged); err != nil { - return nil, nil, nil, errors.WithStack(err) - } - } + lm = newLm } - resolver := librariesresolver.NewCppResolver() - if err := resolver.ScanIDEBuiltinLibraries(lm); err != nil { - return nil, nil, nil, errors.WithStack(err) - } - if err := resolver.ScanUserAndUnmanagedLibraries(lm); err != nil { - return nil, nil, nil, errors.WithStack(err) - } - if err := resolver.ScanPlatformLibraries(lm, targetPlatform); err != nil { - return nil, nil, nil, errors.WithStack(err) - } - if actualPlatform != targetPlatform { - if err := resolver.ScanPlatformLibraries(lm, actualPlatform); err != nil { - return nil, nil, nil, errors.WithStack(err) - } - } + allLibs := lm.FindAllInstalled() + resolver := librariesresolver.NewCppResolver(allLibs, targetPlatform, actualPlatform) return lm, resolver, verboseOut.Bytes(), nil } @@ -761,11 +772,11 @@ func writeCache(cache *includeCache, path *paths.Path) error { } else { bytes, err := json.MarshalIndent(cache.entries, "", " ") if err != nil { - return errors.WithStack(err) + return err } err = path.WriteFile(bytes) if err != nil { - return errors.WithStack(err) + return err } } return nil diff --git a/arduino/builder/internal/detector/detector_test.go b/internal/arduino/builder/internal/detector/detector_test.go similarity index 97% rename from arduino/builder/internal/detector/detector_test.go rename to internal/arduino/builder/internal/detector/detector_test.go index 2290dc02de6..6e7f72648a4 100644 --- a/arduino/builder/internal/detector/detector_test.go +++ b/internal/arduino/builder/internal/detector/detector_test.go @@ -18,7 +18,7 @@ package detector_test import ( "testing" - "github.com/arduino/arduino-cli/arduino/builder/internal/detector" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/detector" "github.com/stretchr/testify/require" ) diff --git a/internal/arduino/builder/internal/diagnostics/compiler_detection.go b/internal/arduino/builder/internal/diagnostics/compiler_detection.go new file mode 100644 index 00000000000..e1355006ba2 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/compiler_detection.go @@ -0,0 +1,85 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "bytes" + "path/filepath" + "strings" + + "github.com/arduino/go-paths-helper" + semver "go.bug.st/relaxed-semver" +) + +// DetectedCompiler represents a compiler detected from a given command line +type DetectedCompiler struct { + Name string + Family string + Version *semver.Version + DetailedVersion []string +} + +// This function is overridden for mocking unit tests +var runProcess = func(args ...string) []string { + if cmd, err := paths.NewProcess(nil, args...); err == nil { + out := &bytes.Buffer{} + cmd.RedirectStdoutTo(out) + cmd.Run() + return splitLines(out.Bytes()) + } + return nil +} + +// DetectCompilerFromCommandLine tries to detect a compiler from a given command line. +// If probeCompiler is true, the compiler may be executed with different flags to +// infer the version or capabilities. +func DetectCompilerFromCommandLine(args []string, probeCompiler bool) *DetectedCompiler { + if len(args) == 0 { + return nil + } + basename := filepath.Base(args[0]) + family := "" + if strings.Contains(basename, "g++") || strings.Contains(basename, "gcc") { + family = "gcc" + } + res := &DetectedCompiler{ + Name: basename, + Family: family, + } + + if family == "gcc" && probeCompiler { + // Run "gcc --version" to obtain more info + res.DetailedVersion = runProcess(args[0], "--version") + + // Usually on the first line we get the compiler architecture and + // version (as last field), followed by the compiler license, for + // example: + // + // g++ (Ubuntu 12.2.0-3ubuntu1) 12.2.0 + // Copyright (C) 2022 Free Software Foundation, Inc. + // This is free software; see the source for copying conditions. There is NO + // warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + // + if len(res.DetailedVersion) > 0 { + split := strings.Split(res.DetailedVersion[0], " ") + if len(split) >= 3 { + res.Name = split[0] + res.Version, _ = semver.Parse(split[len(split)-1]) + } + } + } + return res +} diff --git a/internal/arduino/builder/internal/diagnostics/compiler_detection_test.go b/internal/arduino/builder/internal/diagnostics/compiler_detection_test.go new file mode 100644 index 00000000000..024c66868ed --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/compiler_detection_test.go @@ -0,0 +1,79 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/require" +) + +func init() { + runProcess = mockedRunProcessToGetCompilerVersion +} + +func mockedRunProcessToGetCompilerVersion(args ...string) []string { + if strings.HasSuffix(args[0], "7.3.0-atmel3.6.1-arduino7/bin/avr-g++") && args[1] == "--version" { + return []string{ + "avr-g++ (GCC) 7.3.0", + "Copyright (C) 2017 Free Software Foundation, Inc.", + "This is free software; see the source for copying conditions. There is NO", + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.", + "", + } + } + if strings.HasSuffix(args[0], "7.3.0-atmel3.6.1-arduino7/bin/avr-gcc") && args[1] == "--version" { + return []string{ + "avr-gcc (GCC) 7.3.0", + "Copyright (C) 2017 Free Software Foundation, Inc.", + "This is free software; see the source for copying conditions. There is NO", + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.", + "", + } + } + if strings.HasSuffix(args[0], "xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/bin/xtensa-esp32-elf-g++") && args[1] == "--version" { + return []string{ + "xtensa-esp32-elf-g++ (crosstool-NG esp-2021r2-patch3) 8.4.0", + "Copyright (C) 2018 Free Software Foundation, Inc.", + "This is free software; see the source for copying conditions. There is NO", + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.", + "", + } + } + + panic("missing mock for command line: " + strings.Join(args, " ")) +} + +func TestCompilerDetection(t *testing.T) { + comp := DetectCompilerFromCommandLine([]string{"~/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++"}, true) + require.NotNil(t, comp) + require.Equal(t, "gcc", comp.Family) + require.Equal(t, "avr-g++", comp.Name) + require.Equal(t, "7.3.0", comp.Version.String()) + + comp = DetectCompilerFromCommandLine([]string{"~/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-gcc"}, true) + require.NotNil(t, comp) + require.Equal(t, "gcc", comp.Family) + require.Equal(t, "avr-gcc", comp.Name) + require.Equal(t, "7.3.0", comp.Version.String()) + + comp = DetectCompilerFromCommandLine([]string{"/home/megabug/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/bin/xtensa-esp32-elf-g++"}, true) + require.NotNil(t, comp) + require.Equal(t, "gcc", comp.Family) + require.Equal(t, "xtensa-esp32-elf-g++", comp.Name) + require.Equal(t, "8.4.0", comp.Version.String()) +} diff --git a/internal/arduino/builder/internal/diagnostics/parser.go b/internal/arduino/builder/internal/diagnostics/parser.go new file mode 100644 index 00000000000..5aafaa5072d --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/parser.go @@ -0,0 +1,173 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "fmt" + "strings" + + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// CompilerOutputParserCB is a callback function that is called to feed a parser +// with the plain-text compiler output. +type CompilerOutputParserCB func(cmdline []string, out []byte) + +// Diagnostics represents a list of diagnostics +type Diagnostics []*Diagnostic + +// Diagnostic represents a diagnostic (a compiler error, warning, note, etc.) +type Diagnostic struct { + Severity Severity `json:"severity,omitempty"` + Message string `json:"message"` + File string `json:"file,omitempty"` + Line int `json:"line,omitempty"` + Column int `json:"col,omitempty"` + Context FullContext `json:"context,omitempty"` + Suggestions Notes `json:"suggestions,omitempty"` +} + +// Severity is a diagnostic severity +type Severity string + +const ( + // SeverityUnspecified is the undefined severity + SeverityUnspecified Severity = "" + // SeverityWarning is a warning + SeverityWarning = "WARNING" + // SeverityError is an error + SeverityError = "ERROR" + // SeverityFatal is a fatal error + SeverityFatal = "FATAL" +) + +// Notes represents a list of Note +type Notes []*Note + +// Note represents a compiler annotation or suggestion +type Note struct { + Message string `json:"message"` + File string `json:"file,omitempty"` + Line int `json:"line,omitempty"` + Column int `json:"col,omitempty"` +} + +// FullContext represents a list of Context +type FullContext []*Context + +// Context represents a context, i.e. a reference to a file, line and column +// or a part of the code that a Diagnostic refers to. +type Context struct { + Message string `json:"message"` + File string `json:"file,omitempty"` + Line int `json:"line,omitempty"` + Column int `json:"col,omitempty"` +} + +// ParseCompilerOutput parses the output of a compiler and returns a list of +// diagnostics. +func ParseCompilerOutput(compiler *DetectedCompiler, out []byte) ([]*Diagnostic, error) { + lines := splitLines(out) + switch compiler.Family { + case "gcc": + return parseGccOutput(lines) + default: + return nil, fmt.Errorf("unsupported compiler: %s", compiler) + } +} + +func splitLines(in []byte) []string { + res := strings.Split(string(in), "\n") + for i, line := range res { + res[i] = strings.TrimSuffix(line, "\r") + } + if l := len(res) - 1; res[l] == "" { + res = res[:l] + } + return res +} + +// ToRPC converts a Diagnostics to a slice of rpc.CompileDiagnostic +func (d Diagnostics) ToRPC() []*rpc.CompileDiagnostic { + if len(d) == 0 { + return nil + } + var res []*rpc.CompileDiagnostic + for _, diag := range d { + res = append(res, diag.ToRPC()) + } + return res +} + +// ToRPC converts a Diagnostic to a rpc.CompileDiagnostic +func (d *Diagnostic) ToRPC() *rpc.CompileDiagnostic { + if d == nil { + return nil + } + return &rpc.CompileDiagnostic{ + Severity: string(d.Severity), + Message: d.Message, + File: d.File, + Line: int64(d.Line), + Column: int64(d.Column), + Context: d.Context.ToRPC(), + Notes: d.Suggestions.ToRPC(), + } +} + +// ToRPC converts a Notes to a slice of rpc.CompileDiagnosticNote +func (s Notes) ToRPC() []*rpc.CompileDiagnosticNote { + var res []*rpc.CompileDiagnosticNote + for _, suggestion := range s { + res = append(res, suggestion.ToRPC()) + } + return res +} + +// ToRPC converts a Note to a rpc.CompileDiagnosticNote +func (s *Note) ToRPC() *rpc.CompileDiagnosticNote { + if s == nil { + return nil + } + return &rpc.CompileDiagnosticNote{ + File: s.File, + Line: int64(s.Line), + Column: int64(s.Column), + Message: s.Message, + } +} + +// ToRPC converts a FullContext to a slice of rpc.CompileDiagnosticContext +func (t FullContext) ToRPC() []*rpc.CompileDiagnosticContext { + var res []*rpc.CompileDiagnosticContext + for _, trace := range t { + res = append(res, trace.ToRPC()) + } + return res +} + +// ToRPC converts a Context to a rpc.CompileDiagnosticContext +func (d *Context) ToRPC() *rpc.CompileDiagnosticContext { + if d == nil { + return nil + } + return &rpc.CompileDiagnosticContext{ + File: d.File, + Line: int64(d.Line), + Column: int64(d.Column), + Message: d.Message, + } +} diff --git a/internal/arduino/builder/internal/diagnostics/parser_gcc.go b/internal/arduino/builder/internal/diagnostics/parser_gcc.go new file mode 100644 index 00000000000..afc9ef40c41 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/parser_gcc.go @@ -0,0 +1,193 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "strconv" + "strings" +) + +// Parse output from gcc compiler and extract diagnostics +func parseGccOutput(output []string) ([]*Diagnostic, error) { + // Output from gcc is a mix of diagnostics and other information. + // + // 1. include trace lines: + // + // In file included from /home/megabug/Arduino/libraries/Audio/src/Audio.h:16:0, + // ·················from /home/megabug/Arduino/Blink/Blink.ino:1: + // + // 2. in-file context lines: + // + // /home/megabug/Arduino/libraries/Audio/src/DAC.h: In member function 'void DACClass::enableInterrupts()': + // + // 3. actual diagnostic lines: + // + // /home/megabug/Arduino/libraries/Audio/src/DAC.h:31:44: fatal error: 'isrId' was not declared in this scope + // + // /home/megabug/Arduino/libraries/Audio/src/DAC.h:31:44: error: 'isrId' was not declared in this scope + // + // /home/megabug/Arduino/libraries/Audio/src/DAC.h:31:44: warning: 'isrId' was not declared in this scope + // + // 4. annotations or suggestions: + // + // /home/megabug/Arduino/Blink/Blink.ino:4:1: note: suggested alternative: 'rand' + // + // 5. extra context lines with an extract of the code that errors refers to: + // + // ·asd; + // ·^~~ + // ·rand + // + // ·void enableInterrupts() { NVIC_EnableIRQ(isrId); }; + // ···········································^~~~~ + + var fullContext FullContext + var fullContextRefersTo string + var inFileContext *Context + var currentDiagnostic *Diagnostic + var currentMessage *string + var res []*Diagnostic + + for _, in := range output { + isTrace := false + if strings.HasPrefix(in, "In file included from ") { + in = strings.TrimPrefix(in, "In file included from ") + // 1. include trace + isTrace = true + inFileContext = nil + fullContext = nil + fullContextRefersTo = "" + } else if strings.HasPrefix(in, " from ") { + in = strings.TrimPrefix(in, " from ") + // 1. include trace continuation + isTrace = true + } + if isTrace { + in = strings.TrimSuffix(in, ",") + file, line, col := extractFileLineAndColumn(in) + context := &Context{ + File: file, + Line: line, + Column: col, + Message: "included from here", + } + currentMessage = &context.Message + fullContext = append(fullContext, context) + continue + } + + if split := strings.SplitN(in, ": ", 2); len(split) == 2 { + file, line, column := extractFileLineAndColumn(split[0]) + msg := split[1] + + if line == 0 && column == 0 { + // 2. in-file context + inFileContext = &Context{ + Message: msg, + File: file, + } + currentMessage = &inFileContext.Message + continue + } + + if strings.HasPrefix(msg, "note: ") { + msg = strings.TrimPrefix(msg, "note: ") + // 4. annotations or suggestions + if currentDiagnostic != nil { + suggestion := &Note{ + Message: msg, + File: file, + Line: line, + Column: column, + } + currentDiagnostic.Suggestions = append(currentDiagnostic.Suggestions, suggestion) + currentMessage = &suggestion.Message + } + continue + } + + severity := SeverityUnspecified + if strings.HasPrefix(msg, "error: ") { + msg = strings.TrimPrefix(msg, "error: ") + severity = SeverityError + } else if strings.HasPrefix(msg, "warning: ") { + msg = strings.TrimPrefix(msg, "warning: ") + severity = SeverityWarning + } else if strings.HasPrefix(msg, "fatal error: ") { + msg = strings.TrimPrefix(msg, "fatal error: ") + severity = SeverityFatal + } + if severity != SeverityUnspecified { + // 3. actual diagnostic lines + currentDiagnostic = &Diagnostic{ + Severity: severity, + Message: msg, + File: file, + Line: line, + Column: column, + } + currentMessage = ¤tDiagnostic.Message + + if len(fullContext) > 0 { + if fullContextRefersTo == "" || fullContextRefersTo == file { + fullContextRefersTo = file + currentDiagnostic.Context = append(currentDiagnostic.Context, fullContext...) + } + } + if inFileContext != nil && inFileContext.File == file { + currentDiagnostic.Context = append(currentDiagnostic.Context, inFileContext) + } + + res = append(res, currentDiagnostic) + continue + } + } + + // 5. extra context lines + if strings.HasPrefix(in, " ") { + if currentMessage != nil { + *currentMessage += "\n" + in + } + continue + } + } + return res, nil +} + +func extractFileLineAndColumn(file string) (string, int, int) { + split := strings.Split(file, ":") + file = split[0] + if len(split) == 1 { + return file, 0, 0 + } + + // Special case: handle Windows drive letter `C:\...` + if len(split) > 1 && len(file) == 1 && strings.HasPrefix(split[1], `\`) { + file += ":" + split[1] + split = split[1:] + + if len(split) == 1 { + return file, 0, 0 + } + } + + line, err := strconv.Atoi(split[1]) + if err != nil || len(split) == 2 { + return file, line, 0 + } + column, _ := strconv.Atoi(split[2]) + return file, line, column +} diff --git a/internal/arduino/builder/internal/diagnostics/parser_test.go b/internal/arduino/builder/internal/diagnostics/parser_test.go new file mode 100644 index 00000000000..fe2b6cbed53 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/parser_test.go @@ -0,0 +1,57 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "bytes" + "encoding/json" + "strings" + "testing" + + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestParser(t *testing.T) { + t.Run("Generic001", func(t *testing.T) { runParserTest(t, "test001.txt") }) + t.Run("Generic002", func(t *testing.T) { runParserTest(t, "test002.txt") }) + t.Run("Generic003", func(t *testing.T) { runParserTest(t, "test003.txt") }) + t.Run("Generic004", func(t *testing.T) { runParserTest(t, "test004.txt") }) +} + +func runParserTest(t *testing.T, testFile string) { + testData, err := paths.New("testdata", "compiler_outputs", testFile).ReadFile() + require.NoError(t, err) + // The first line contains the compiler arguments + idx := bytes.Index(testData, []byte("\n")) + require.NotEqual(t, -1, idx) + args := strings.Split(string(testData[0:idx]), " ") + // The remainder of the file is the compiler output + data := testData[idx:] + + // Run compiler detection and parse compiler output + detectedCompiler := DetectCompilerFromCommandLine(args, true) + require.NotNil(t, detectedCompiler) + diags, err := ParseCompilerOutput(detectedCompiler, data) + require.NoError(t, err) + + // Check if the parsed data match the expected output + output, err := json.MarshalIndent(diags, "", " ") + require.NoError(t, err) + golden, err := paths.New("testdata", "compiler_outputs", testFile+".json").ReadFile() + require.NoError(t, err) + require.Equal(t, string(golden), string(output)) +} diff --git a/internal/arduino/builder/internal/diagnostics/store.go b/internal/arduino/builder/internal/diagnostics/store.go new file mode 100644 index 00000000000..dc8d9a8f882 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/store.go @@ -0,0 +1,51 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "github.com/sirupsen/logrus" +) + +type Store struct { + results Diagnostics +} + +func NewStore() *Store { + return &Store{} +} + +// Parse parses the output coming from a compiler. It then stores the parsed +// diagnostics in a slice of Diagnostic. +func (m *Store) Parse(cmdline []string, out []byte) { + compiler := DetectCompilerFromCommandLine( + cmdline, + false, // at the moment compiler-probing is not required + ) + if compiler == nil { + logrus.Warnf("Could not detect compiler from: %s", cmdline) + return + } + diags, err := ParseCompilerOutput(compiler, out) + if err != nil { + logrus.Warnf("Error parsing compiler output: %s", err) + return + } + m.results = append(m.results, diags...) +} + +func (m *Store) Diagnostics() Diagnostics { + return m.results +} diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt new file mode 100644 index 00000000000..a04874cd03c --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt @@ -0,0 +1,12 @@ +/home/megabug/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega32u4 -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_LEONARDO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x8036 "-DUSB_MANUFACTURER=\"Unknown\"" "-DUSB_PRODUCT=\"Arduino Leonardo\"" -I/home/megabug/.arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino -I/home/megabug/.arduino15/packages/arduino/hardware/avr/1.8.6/variants/leonardo /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp -o /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp.o +/home/megabug/Arduino/Blink/Blink.ino:1:14: error: expected initializer before 'asd' + void setup() asd { + ^~~ +/home/megabug/Arduino/Blink/Blink.ino: In function 'void loop()': +/home/megabug/Arduino/Blink/Blink.ino:6:1: error: 'asd' was not declared in this scope + asd + ^~~ +/home/megabug/Arduino/Blink/Blink.ino:6:1: note: suggested alternative: 'rand' + asd + ^~~ + rand \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt.json b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt.json new file mode 100644 index 00000000000..e1fd65d270d --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt.json @@ -0,0 +1,30 @@ +[ + { + "severity": "ERROR", + "message": "expected initializer before 'asd'\n void setup() asd {\n ^~~", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1, + "col": 14 + }, + { + "severity": "ERROR", + "message": "'asd' was not declared in this scope\n asd\n ^~~", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 6, + "col": 1, + "context": [ + { + "message": "In function 'void loop()':", + "file": "/home/megabug/Arduino/Blink/Blink.ino" + } + ], + "suggestions": [ + { + "message": "suggested alternative: 'rand'\n asd\n ^~~\n rand", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 6, + "col": 1 + } + ] + } +] \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt new file mode 100644 index 00000000000..c0add91431e --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt @@ -0,0 +1,34 @@ +/home/megabug/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/home/megabug/.arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino -I/home/megabug/.arduino15/packages/arduino/hardware/avr/1.8.6/variants/standard -I/home/megabug/Arduino/libraries/Audio/src /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp -o /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp.o +In file included from /home/megabug/Arduino/libraries/Audio/src/Audio.h:16:0, + from /home/megabug/Arduino/Blink/Blink.ino:1: +/home/megabug/Arduino/libraries/Audio/src/DAC.h:21:16: error: expected ')' before '*' token + DACClass(Dacc *_dac, uint32_t _dacId, IRQn_Type _isrId) : + ^ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:35:2: error: 'Dacc' does not name a type + Dacc *dac; + ^~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:37:2: error: 'IRQn_Type' does not name a type + IRQn_Type isrId; + ^~~~~~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h: In member function 'void DACClass::enableInterrupts()': +/home/megabug/Arduino/libraries/Audio/src/DAC.h:31:44: error: 'isrId' was not declared in this scope + void enableInterrupts() { NVIC_EnableIRQ(isrId); }; + ^~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:31:29: error: 'NVIC_EnableIRQ' was not declared in this scope + void enableInterrupts() { NVIC_EnableIRQ(isrId); }; + ^~~~~~~~~~~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h: In member function 'void DACClass::disableInterrupts()': +/home/megabug/Arduino/libraries/Audio/src/DAC.h:32:45: error: 'isrId' was not declared in this scope + void disableInterrupts() { NVIC_DisableIRQ(isrId); }; + ^~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:32:29: error: 'NVIC_DisableIRQ' was not declared in this scope + void disableInterrupts() { NVIC_DisableIRQ(isrId); }; + ^~~~~~~~~~~~~~~ +/home/megabug/Arduino/Blink/Blink.ino: In function 'void setup()': +/home/megabug/Arduino/Blink/Blink.ino:4:1: error: 'asd' was not declared in this scope + asd; + ^~~ +/home/megabug/Arduino/Blink/Blink.ino:4:1: note: suggested alternative: 'rand' + asd; + ^~~ + rand \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt.json b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt.json new file mode 100644 index 00000000000..cd1a4c402a5 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt.json @@ -0,0 +1,172 @@ +[ + { + "severity": "ERROR", + "message": "expected ')' before '*' token\n DACClass(Dacc *_dac, uint32_t _dacId, IRQn_Type _isrId) :\n ^", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 21, + "col": 16, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'Dacc' does not name a type\n Dacc *dac;\n ^~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 35, + "col": 2, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'IRQn_Type' does not name a type\n IRQn_Type isrId;\n ^~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 37, + "col": 2, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'isrId' was not declared in this scope\n void enableInterrupts() { NVIC_EnableIRQ(isrId); };\n ^~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 31, + "col": 44, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::enableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'NVIC_EnableIRQ' was not declared in this scope\n void enableInterrupts() { NVIC_EnableIRQ(isrId); };\n ^~~~~~~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 31, + "col": 29, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::enableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'isrId' was not declared in this scope\n void disableInterrupts() { NVIC_DisableIRQ(isrId); };\n ^~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 32, + "col": 45, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::disableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'NVIC_DisableIRQ' was not declared in this scope\n void disableInterrupts() { NVIC_DisableIRQ(isrId); };\n ^~~~~~~~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 32, + "col": 29, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::disableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'asd' was not declared in this scope\n asd;\n ^~~", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 4, + "col": 1, + "context": [ + { + "message": "In function 'void setup()':", + "file": "/home/megabug/Arduino/Blink/Blink.ino" + } + ], + "suggestions": [ + { + "message": "suggested alternative: 'rand'\n asd;\n ^~~\n rand", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 4, + "col": 1 + } + ] + } +] \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt new file mode 100644 index 00000000000..1b8af0f22d6 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt @@ -0,0 +1,40 @@ +/home/megabug/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/bin/xtensa-esp32-elf-g++ -DHAVE_CONFIG_H "-DMBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"" -DUNITY_INCLUDE_CONFIG_H -DWITH_POSIX -D_GNU_SOURCE "-DIDF_VER=\"v4.4.1-1-gb8050b365e\"" -DESP_PLATFORM -D_POSIX_READER_WRITER_LOCKS -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/config -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/newlib/platform_include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/include/esp_additions/freertos -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/port/xtensa/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/include/esp_additions -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/include/soc -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/port/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/heap/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/log/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/include/apps -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/include/apps/sntp -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/lwip/src/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/port/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/port/esp32/include/arch -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/soc/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/soc/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/soc/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/hal/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/hal/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/hal/platform_port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rom/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rom/include/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rom/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_common/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_system/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_system/port/soc -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_system/port/public_compat -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/xtensa/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/xtensa/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/driver/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/driver/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_pm/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_ringbuf/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/efuse/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/efuse/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/vfs/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_wifi/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_event/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_netif/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_eth/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/tcpip_adapter/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_phy/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_phy/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_ipc/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/app_trace/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_timer/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mbedtls/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mbedtls/mbedtls/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/app_update/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/spi_flash/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bootloader_support/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/nvs_flash/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/pthread/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_gdbstub/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_gdbstub/xtensa -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_gdbstub/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/espcoredump/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/espcoredump/include/port/xtensa -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wpa_supplicant/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wpa_supplicant/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/ieee802154/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/console -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/asio/asio/asio/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/asio/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/osi/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/include/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/api/include/api -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/btc/profile/esp/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/cbor/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/unity/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/unity/unity/src -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/cmock/CMock/src -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/coap/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/coap/libcoap/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/nghttp/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-tls -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-tls/esp-tls-crypto -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_adc_cal/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hid/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/tcp_transport/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_http_client/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_http_server/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_https_ota/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_lcd/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_lcd/interface -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protobuf-c/protobuf-c -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protocomm/include/common -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protocomm/include/security -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protocomm/include/transports -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mdns/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_local_ctrl/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/sdmmc/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_serial_slave_link/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_websocket_client/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/expat/expat/expat/lib -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/expat/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wear_levelling/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fatfs/diskio -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fatfs/vfs -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fatfs/src -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freemodbus/common/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/idf_test/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/idf_test/include/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/jsmn/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json/cJSON -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/libsodium/port_include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mqtt/esp-mqtt/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/openssl/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/perfmon/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/spiffs/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/ulp/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wifi_provisioning/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/button/button/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/rmaker_common/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json_parser/upstream/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json_parser/upstream -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json_generator/upstream -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_schedule/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rainmaker/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/qrcode/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/ws2812_led -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/dotprod/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/support/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/hann/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_harris/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_nuttall/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/nuttall/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/flat_top/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/iir/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/fir/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/add/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/sub/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/mul/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/addc/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/mulc/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/sqrt/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/matrix/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/fft/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/dct/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/conv/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/common/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf_imu13states/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_littlefs/src -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_littlefs/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/tool -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/typedef -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/image -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/math -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/nn -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/layer -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/detect -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/model_zoo -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-sr/esp-tts/esp_tts_chinese/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-sr/include/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp32-camera/driver/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp32-camera/conversions/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fb_gfx/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/qspi_qspi/include -mlongcalls -Wno-frame-address -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -Os -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -std=gnu++11 -fexceptions -fno-rtti -MMD -c -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_ESPino32 -DARDUINO_ARCH_ESP32 "-DARDUINO_BOARD=\"ESPino32\"" "-DARDUINO_VARIANT=\"espino32\"" -DARDUINO_PARTITION_default -DESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_USB_CDC_ON_BOOT=0 @/tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/build_opt.h -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/cores/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/variants/espino32 -I/home/megabug/Arduino/libraries/Audio/src /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp -o /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp.o +In file included from /home/megabug/Arduino/libraries/Audio/src/Audio.h:16, + from /home/megabug/Arduino/Blink/Blink.ino:1: +/home/megabug/Arduino/libraries/Audio/src/DAC.h:21:15: error: expected ')' before '*' token + DACClass(Dacc *_dac, uint32_t _dacId, IRQn_Type _isrId) : + ~ ^~ + ) +/home/megabug/Arduino/libraries/Audio/src/DAC.h:35:2: error: 'Dacc' does not name a type + Dacc *dac; + ^~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:37:2: error: 'IRQn_Type' does not name a type + IRQn_Type isrId; + ^~~~~~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h: In member function 'void DACClass::enableInterrupts()': +/home/megabug/Arduino/libraries/Audio/src/DAC.h:31:43: error: 'isrId' was not declared in this scope + void enableInterrupts() { NVIC_EnableIRQ(isrId); }; + ^~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:31:28: error: 'NVIC_EnableIRQ' was not declared in this scope + void enableInterrupts() { NVIC_EnableIRQ(isrId); }; + ^~~~~~~~~~~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h: In member function 'void DACClass::disableInterrupts()': +/home/megabug/Arduino/libraries/Audio/src/DAC.h:32:44: error: 'isrId' was not declared in this scope + void disableInterrupts() { NVIC_DisableIRQ(isrId); }; + ^~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:32:28: error: 'NVIC_DisableIRQ' was not declared in this scope + void disableInterrupts() { NVIC_DisableIRQ(isrId); }; + ^~~~~~~~~~~~~~~ +In file included from /home/megabug/Arduino/Blink/Blink.ino:1: +/home/megabug/Arduino/libraries/Audio/src/Audio.h: In member function 'virtual size_t AudioClass::write(uint8_t)': +/home/megabug/Arduino/libraries/Audio/src/Audio.h:25:82: warning: no return statement in function returning non-void [-Wreturn-type] + virtual size_t write(uint8_t c) { /* not implemented */ }; + ^ +/home/megabug/Arduino/Blink/Blink.ino: In function 'void setup()': +/home/megabug/Arduino/Blink/Blink.ino:4:1: error: 'asd' was not declared in this scope + asd; + ^~~ +/home/megabug/Arduino/Blink/Blink.ino:4:1: note: suggested alternative: 'rand' + asd; + ^~~ + rand \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt.json b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt.json new file mode 100644 index 00000000000..5f9b36e4309 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt.json @@ -0,0 +1,190 @@ +[ + { + "severity": "ERROR", + "message": "expected ')' before '*' token\n DACClass(Dacc *_dac, uint32_t _dacId, IRQn_Type _isrId) :\n ~ ^~\n )", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 21, + "col": 15, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'Dacc' does not name a type\n Dacc *dac;\n ^~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 35, + "col": 2, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'IRQn_Type' does not name a type\n IRQn_Type isrId;\n ^~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 37, + "col": 2, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'isrId' was not declared in this scope\n void enableInterrupts() { NVIC_EnableIRQ(isrId); };\n ^~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 31, + "col": 43, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::enableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'NVIC_EnableIRQ' was not declared in this scope\n void enableInterrupts() { NVIC_EnableIRQ(isrId); };\n ^~~~~~~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 31, + "col": 28, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::enableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'isrId' was not declared in this scope\n void disableInterrupts() { NVIC_DisableIRQ(isrId); };\n ^~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 32, + "col": 44, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::disableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'NVIC_DisableIRQ' was not declared in this scope\n void disableInterrupts() { NVIC_DisableIRQ(isrId); };\n ^~~~~~~~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 32, + "col": 28, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::disableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "WARNING", + "message": "no return statement in function returning non-void [-Wreturn-type]\n virtual size_t write(uint8_t c) { /* not implemented */ };\n ^", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 25, + "col": 82, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'virtual size_t AudioClass::write(uint8_t)':", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'asd' was not declared in this scope\n asd;\n ^~~", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 4, + "col": 1, + "context": [ + { + "message": "In function 'void setup()':", + "file": "/home/megabug/Arduino/Blink/Blink.ino" + } + ], + "suggestions": [ + { + "message": "suggested alternative: 'rand'\n asd;\n ^~~\n rand", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 4, + "col": 1 + } + ] + } +] \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt new file mode 100644 index 00000000000..958800f68f5 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt @@ -0,0 +1,5 @@ +C:\Users\runneradmin\AppData\Local\Temp\cli2123776893\A\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\runneradmin\AppData\Local\Temp\cli2123776893\A\packages\arduino\hardware\avr\1.8.5\cores\arduino -IC:\Users\runneradmin\AppData\Local\Temp\cli2123776893\A\packages\arduino\hardware\avr\1.8.5\variants\standard C:\Users\runneradmin\AppData\Local\Temp\arduino\sketches\BD9E9425D0ACEC4A9F5E44E2417C33A5\sketch\wrong.cpp -o C:\Users\runneradmin\AppData\Local\Temp\arduino\sketches\BD9E9425D0ACEC4A9F5E44E2417C33A5\sketch\wrong.cpp.o +D:\a\arduino-cli\arduino-cli\internal\integrationtest\compile_3\testdata\blink_with_wrong_cpp\wrong.cpp: In function 'void wrong()': +D:\a\arduino-cli\arduino-cli\internal\integrationtest\compile_3\testdata\blink_with_wrong_cpp\wrong.cpp:1:14: error: expected '}' at end of input + void wrong() { + ^ diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt.json b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt.json new file mode 100644 index 00000000000..e436025aee2 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt.json @@ -0,0 +1,15 @@ +[ + { + "severity": "ERROR", + "message": "expected '}' at end of input\n void wrong() {\n ^", + "file": "D:\\a\\arduino-cli\\arduino-cli\\internal\\integrationtest\\compile_3\\testdata\\blink_with_wrong_cpp\\wrong.cpp", + "line": 1, + "col": 14, + "context": [ + { + "message": "In function 'void wrong()':", + "file": "D:\\a\\arduino-cli\\arduino-cli\\internal\\integrationtest\\compile_3\\testdata\\blink_with_wrong_cpp\\wrong.cpp" + } + ] + } +] \ No newline at end of file diff --git a/arduino/builder/internal/logger/logger.go b/internal/arduino/builder/internal/logger/logger.go similarity index 100% rename from arduino/builder/internal/logger/logger.go rename to internal/arduino/builder/internal/logger/logger.go diff --git a/arduino/builder/internal/preprocessor/arduino_preprocessor.go b/internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go similarity index 72% rename from arduino/builder/internal/preprocessor/arduino_preprocessor.go rename to internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go index 630ec56400f..deabc04c4f0 100644 --- a/arduino/builder/internal/preprocessor/arduino_preprocessor.go +++ b/internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go @@ -18,33 +18,37 @@ package preprocessor import ( "bytes" "context" + "errors" "path/filepath" "runtime" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/executils" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) // PreprocessSketchWithArduinoPreprocessor performs preprocessing of the arduino sketch // using arduino-preprocessor (https://github.com/arduino/arduino-preprocessor). -func PreprocessSketchWithArduinoPreprocessor(sk *sketch.Sketch, buildPath *paths.Path, includeFolders paths.PathList, lineOffset int, buildProperties *properties.Map, onlyUpdateCompilationDatabase bool) ([]byte, []byte, error) { +func PreprocessSketchWithArduinoPreprocessor( + ctx context.Context, + sk *sketch.Sketch, buildPath *paths.Path, includeFolders paths.PathList, + lineOffset int, buildProperties *properties.Map, onlyUpdateCompilationDatabase bool, +) (*Result, error) { verboseOut := &bytes.Buffer{} normalOut := &bytes.Buffer{} if err := buildPath.Join("preproc").MkdirAll(); err != nil { - return nil, nil, err + return nil, err } sourceFile := buildPath.Join("sketch", sk.MainFile.Base()+".cpp") targetFile := buildPath.Join("preproc", "sketch_merged.cpp") - gccStdout, gccStderr, err := GCC(sourceFile, targetFile, includeFolders, buildProperties) - verboseOut.Write(gccStdout) - verboseOut.Write(gccStderr) + gccResult, err := GCC(ctx, sourceFile, targetFile, includeFolders, buildProperties) + verboseOut.Write(gccResult.Stdout()) + verboseOut.Write(gccResult.Stderr()) if err != nil { - return nil, nil, err + return nil, err } arduiniPreprocessorProperties := properties.NewMap() @@ -57,18 +61,18 @@ func PreprocessSketchWithArduinoPreprocessor(sk *sketch.Sketch, buildPath *paths arduiniPreprocessorProperties.SetPath("source_file", targetFile) pattern := arduiniPreprocessorProperties.Get("pattern") if pattern == "" { - return nil, nil, errors.New(tr("arduino-preprocessor pattern is missing")) + return nil, errors.New(i18n.Tr("arduino-preprocessor pattern is missing")) } commandLine := arduiniPreprocessorProperties.ExpandPropsInString(pattern) parts, err := properties.SplitQuotedString(commandLine, `"'`, false) if err != nil { - return nil, nil, errors.WithStack(err) + return nil, err } - command, err := executils.NewProcess(nil, parts...) + command, err := paths.NewProcess(nil, parts...) if err != nil { - return nil, nil, err + return nil, err } if runtime.GOOS == "windows" { // chdir in the uppermost directory to avoid UTF-8 bug in clang (https://github.com/arduino/arduino-preprocessor/issues/2) @@ -76,17 +80,16 @@ func PreprocessSketchWithArduinoPreprocessor(sk *sketch.Sketch, buildPath *paths } verboseOut.WriteString(commandLine) - commandStdOut, commandStdErr, err := command.RunAndCaptureOutput(context.Background()) + commandStdOut, commandStdErr, err := command.RunAndCaptureOutput(ctx) verboseOut.Write(commandStdErr) if err != nil { - return normalOut.Bytes(), verboseOut.Bytes(), err + return &Result{args: gccResult.Args(), stdout: verboseOut.Bytes(), stderr: normalOut.Bytes()}, err } result := utils.NormalizeUTF8(commandStdOut) destFile := buildPath.Join(sk.MainFile.Base() + ".cpp") if err := destFile.WriteFile(result); err != nil { - return normalOut.Bytes(), verboseOut.Bytes(), err + return &Result{args: gccResult.Args(), stdout: verboseOut.Bytes(), stderr: normalOut.Bytes()}, err } - - return normalOut.Bytes(), verboseOut.Bytes(), err + return &Result{args: gccResult.Args(), stdout: verboseOut.Bytes(), stderr: normalOut.Bytes()}, err } diff --git a/arduino/builder/internal/preprocessor/ctags.go b/internal/arduino/builder/internal/preprocessor/ctags.go similarity index 75% rename from arduino/builder/internal/preprocessor/ctags.go rename to internal/arduino/builder/internal/preprocessor/ctags.go index fb7134904a0..fe36cfc89e5 100644 --- a/arduino/builder/internal/preprocessor/ctags.go +++ b/internal/arduino/builder/internal/preprocessor/ctags.go @@ -19,74 +19,76 @@ import ( "bufio" "bytes" "context" + "errors" "fmt" "io" "strconv" "strings" - "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/arduino/builder/internal/preprocessor/internal/ctags" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/preprocessor/internal/ctags" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) -var tr = i18n.Tr - // DebugPreprocessor when set to true the CTags preprocessor will output debugging info to stdout // this is useful for unit-testing to provide more infos var DebugPreprocessor bool // PreprocessSketchWithCtags performs preprocessing of the arduino sketch using CTags. -func PreprocessSketchWithCtags(sketch *sketch.Sketch, buildPath *paths.Path, includes paths.PathList, lineOffset int, buildProperties *properties.Map, onlyUpdateCompilationDatabase bool) ([]byte, []byte, error) { +func PreprocessSketchWithCtags( + ctx context.Context, + sketch *sketch.Sketch, buildPath *paths.Path, includes paths.PathList, + lineOffset int, buildProperties *properties.Map, + onlyUpdateCompilationDatabase, verbose bool, +) (*Result, error) { // Create a temporary working directory tmpDir, err := paths.MkTempDir("", "") if err != nil { - return nil, nil, err + return nil, err } defer tmpDir.RemoveAll() ctagsTarget := tmpDir.Join("sketch_merged.cpp") - normalOutput := &bytes.Buffer{} - verboseOutput := &bytes.Buffer{} + stdout, stderr := &bytes.Buffer{}, &bytes.Buffer{} // Run GCC preprocessor sourceFile := buildPath.Join("sketch", sketch.MainFile.Base()+".cpp") - gccStdout, gccStderr, err := GCC(sourceFile, ctagsTarget, includes, buildProperties) - verboseOutput.Write(gccStdout) - verboseOutput.Write(gccStderr) - normalOutput.Write(gccStderr) + result, err := GCC(ctx, sourceFile, ctagsTarget, includes, buildProperties) + stdout.Write(result.Stdout()) + stderr.Write(result.Stderr()) if err != nil { if !onlyUpdateCompilationDatabase { - return normalOutput.Bytes(), verboseOutput.Bytes(), errors.WithStack(err) + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } // Do not bail out if we are generating the compile commands database - normalOutput.WriteString(fmt.Sprintf("%s: %s", - tr("An error occurred adding prototypes"), - tr("the compilation database may be incomplete or inaccurate"))) + stderr.WriteString(fmt.Sprintf("%s: %s", + i18n.Tr("An error occurred adding prototypes"), + i18n.Tr("the compilation database may be incomplete or inaccurate"))) if err := sourceFile.CopyTo(ctagsTarget); err != nil { - return normalOutput.Bytes(), verboseOutput.Bytes(), errors.WithStack(err) + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } } if src, err := ctagsTarget.ReadFile(); err == nil { filteredSource := filterSketchSource(sketch, bytes.NewReader(src), false) if err := ctagsTarget.WriteFile([]byte(filteredSource)); err != nil { - return normalOutput.Bytes(), verboseOutput.Bytes(), err + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } } else { - return normalOutput.Bytes(), verboseOutput.Bytes(), err + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } // Run CTags on gcc-preprocessed source - ctagsOutput, ctagsStdErr, err := RunCTags(ctagsTarget, buildProperties) - verboseOutput.Write(ctagsStdErr) + ctagsOutput, ctagsStdErr, err := RunCTags(ctx, ctagsTarget, buildProperties) + if verbose { + stderr.Write(ctagsStdErr) + } if err != nil { - return normalOutput.Bytes(), verboseOutput.Bytes(), err + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } // Parse CTags output @@ -101,13 +103,13 @@ func PreprocessSketchWithCtags(sketch *sketch.Sketch, buildPath *paths.Path, inc if sourceData, err := sourceFile.ReadFile(); err == nil { source = string(sourceData) } else { - return normalOutput.Bytes(), verboseOutput.Bytes(), err + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } source = strings.ReplaceAll(source, "\r\n", "\n") source = strings.ReplaceAll(source, "\r", "\n") sourceRows := strings.Split(source, "\n") if isFirstFunctionOutsideOfSource(firstFunctionLine, sourceRows) { - return normalOutput.Bytes(), verboseOutput.Bytes(), nil + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, nil } insertionLine := firstFunctionLine + lineOffset - 1 @@ -133,7 +135,7 @@ func PreprocessSketchWithCtags(sketch *sketch.Sketch, buildPath *paths.Path, inc // Write back arduino-preprocess output to the sourceFile err = sourceFile.WriteFile([]byte(preprocessedSource)) - return normalOutput.Bytes(), verboseOutput.Bytes(), err + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } func composePrototypeSection(line int, prototypes []*ctags.Prototype) string { @@ -176,7 +178,7 @@ func isFirstFunctionOutsideOfSource(firstFunctionLine int, sourceRows []string) } // RunCTags performs a run of ctags on the given source file. Returns the ctags output and the stderr contents. -func RunCTags(sourceFile *paths.Path, buildProperties *properties.Map) ([]byte, []byte, error) { +func RunCTags(ctx context.Context, sourceFile *paths.Path, buildProperties *properties.Map) ([]byte, []byte, error) { ctagsBuildProperties := properties.NewMap() ctagsBuildProperties.Set("tools.ctags.path", "{runtime.tools.ctags.path}") ctagsBuildProperties.Set("tools.ctags.cmd.path", "{path}/ctags") @@ -187,7 +189,7 @@ func RunCTags(sourceFile *paths.Path, buildProperties *properties.Map) ([]byte, pattern := ctagsBuildProperties.Get("pattern") if pattern == "" { - return nil, nil, errors.Errorf(tr("%s pattern is missing"), "ctags") + return nil, nil, errors.New(i18n.Tr("%s pattern is missing", "ctags")) } commandLine := ctagsBuildProperties.ExpandPropsInString(pattern) @@ -195,11 +197,11 @@ func RunCTags(sourceFile *paths.Path, buildProperties *properties.Map) ([]byte, if err != nil { return nil, nil, err } - proc, err := executils.NewProcess(nil, parts...) + proc, err := paths.NewProcess(nil, parts...) if err != nil { return nil, nil, err } - stdout, stderr, err := proc.RunAndCaptureOutput(context.Background()) + stdout, stderr, err := proc.RunAndCaptureOutput(ctx) // Append ctags arguments to stderr args := fmt.Sprintln(strings.Join(parts, " ")) diff --git a/arduino/builder/internal/preprocessor/gcc.go b/internal/arduino/builder/internal/preprocessor/gcc.go similarity index 82% rename from arduino/builder/internal/preprocessor/gcc.go rename to internal/arduino/builder/internal/preprocessor/gcc.go index 2029f08b972..bfcc9512e0c 100644 --- a/arduino/builder/internal/preprocessor/gcc.go +++ b/internal/arduino/builder/internal/preprocessor/gcc.go @@ -17,20 +17,24 @@ package preprocessor import ( "context" + "errors" "fmt" "strings" - "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/executils" f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) // GCC performs a run of the gcc preprocess (macro/includes expansion). The function outputs the result // to targetFilePath. Returns the stdout/stderr of gcc if any. -func GCC(sourceFilePath *paths.Path, targetFilePath *paths.Path, includes paths.PathList, buildProperties *properties.Map) ([]byte, []byte, error) { +func GCC( + ctx context.Context, + sourceFilePath, targetFilePath *paths.Path, + includes paths.PathList, buildProperties *properties.Map, +) (Result, error) { gccBuildProperties := properties.NewMap() gccBuildProperties.Set("preproc.macros.flags", "-w -x c++ -E -CC") gccBuildProperties.Merge(buildProperties) @@ -55,28 +59,28 @@ func GCC(sourceFilePath *paths.Path, targetFilePath *paths.Path, includes paths. pattern := gccBuildProperties.Get(gccPreprocRecipeProperty) if pattern == "" { - return nil, nil, errors.Errorf(tr("%s pattern is missing"), gccPreprocRecipeProperty) + return Result{}, errors.New(i18n.Tr("%s pattern is missing", gccPreprocRecipeProperty)) } commandLine := gccBuildProperties.ExpandPropsInString(pattern) commandLine = properties.DeleteUnexpandedPropsFromString(commandLine) args, err := properties.SplitQuotedString(commandLine, `"'`, false) if err != nil { - return nil, nil, err + return Result{}, err } // Remove -MMD argument if present. Leaving it will make gcc try // to create a /dev/null.d dependency file, which won't work. args = f.Filter(args, f.NotEquals("-MMD")) - proc, err := executils.NewProcess(nil, args...) + proc, err := paths.NewProcess(nil, args...) if err != nil { - return nil, nil, err + return Result{}, err } - stdout, stderr, err := proc.RunAndCaptureOutput(context.Background()) + stdout, stderr, err := proc.RunAndCaptureOutput(ctx) // Append gcc arguments to stdout stdout = append([]byte(fmt.Sprintln(strings.Join(args, " "))), stdout...) - return stdout, stderr, err + return Result{args: proc.GetArgs(), stdout: stdout, stderr: stderr}, err } diff --git a/arduino/builder/internal/preprocessor/internal/ctags/ctags_has_issues.go b/internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_has_issues.go similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/ctags_has_issues.go rename to internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_has_issues.go diff --git a/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser.go b/internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser.go similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/ctags_parser.go rename to internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser.go diff --git a/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser_test.go b/internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser_test.go similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/ctags_parser_test.go rename to internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser_test.go diff --git a/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes.go b/internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes.go similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes.go rename to internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes.go diff --git a/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes_test.go b/internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes_test.go similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes_test.go rename to internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes_test.go diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserClassMembersAreFilteredOut.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserClassMembersAreFilteredOut.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserClassMembersAreFilteredOut.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserClassMembersAreFilteredOut.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserDefaultArguments.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserDefaultArguments.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserDefaultArguments.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserDefaultArguments.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointer.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointer.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointer.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointer.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointers.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointers.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointers.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointers.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointersNoIndirect.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointersNoIndirect.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointersNoIndirect.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointersNoIndirect.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserNamespace.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserNamespace.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserNamespace.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserNamespace.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealFunctionWithDifferentSignatures.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealFunctionWithDifferentSignatures.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealFunctionWithDifferentSignatures.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealFunctionWithDifferentSignatures.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithClasses.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithClasses.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithClasses.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithClasses.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithMacros.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithMacros.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithMacros.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithMacros.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithStructs.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithStructs.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithStructs.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithStructs.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListPrototypes.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListPrototypes.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListPrototypes.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListPrototypes.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates2.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates2.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates2.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates2.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStatic.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStatic.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStatic.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStatic.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStructWithFunctions.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStructWithFunctions.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStructWithFunctions.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStructWithFunctions.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithClassFunction.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithClassFunction.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithClassFunction.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithClassFunction.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithMultifile.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithMultifile.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithMultifile.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithMultifile.txt diff --git a/arduino/discovery/testdata/cat/main.go b/internal/arduino/builder/internal/preprocessor/result.go similarity index 68% rename from arduino/discovery/testdata/cat/main.go rename to internal/arduino/builder/internal/preprocessor/result.go index 7f77910fe27..3fa45e40974 100644 --- a/arduino/discovery/testdata/cat/main.go +++ b/internal/arduino/builder/internal/preprocessor/result.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,16 +13,22 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -// Echo stdin to stdout. -// This program is used for testing purposes, to make it available on all -// OS a tool equivalent to UNIX "cat". -package main +package preprocessor -import ( - "io" - "os" -) +type Result struct { + args []string + stdout []byte + stderr []byte +} + +func (r Result) Args() []string { + return r.args +} + +func (r Result) Stdout() []byte { + return r.stdout +} -func main() { - io.Copy(os.Stdout, os.Stdin) +func (r Result) Stderr() []byte { + return r.stderr } diff --git a/arduino/builder/internal/progress/progress.go b/internal/arduino/builder/internal/progress/progress.go similarity index 100% rename from arduino/builder/internal/progress/progress.go rename to internal/arduino/builder/internal/progress/progress.go diff --git a/arduino/builder/internal/progress/progress_test.go b/internal/arduino/builder/internal/progress/progress_test.go similarity index 100% rename from arduino/builder/internal/progress/progress_test.go rename to internal/arduino/builder/internal/progress/progress_test.go diff --git a/arduino/builder/internal/utils/utils.go b/internal/arduino/builder/internal/utils/utils.go similarity index 92% rename from arduino/builder/internal/utils/utils.go rename to internal/arduino/builder/internal/utils/utils.go index efd40b307ea..630172e2410 100644 --- a/arduino/builder/internal/utils/utils.go +++ b/internal/arduino/builder/internal/utils/utils.go @@ -20,18 +20,14 @@ import ( "strings" "unicode" - "github.com/arduino/arduino-cli/i18n" f "github.com/arduino/arduino-cli/internal/algorithms" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" "github.com/sirupsen/logrus" "golang.org/x/text/runes" "golang.org/x/text/transform" "golang.org/x/text/unicode/norm" ) -var tr = i18n.Tr - // ObjFileIsUpToDate fixdoc func ObjFileIsUpToDate(sourceFile, objectFile, dependencyFile *paths.Path) (bool, error) { logrus.Debugf("Checking previous results for %v (result = %v, dep = %v)", sourceFile, objectFile, dependencyFile) @@ -43,7 +39,7 @@ func ObjFileIsUpToDate(sourceFile, objectFile, dependencyFile *paths.Path) (bool sourceFile = sourceFile.Clean() sourceFileStat, err := sourceFile.Stat() if err != nil { - return false, errors.WithStack(err) + return false, err } objectFile = objectFile.Clean() @@ -53,7 +49,7 @@ func ObjFileIsUpToDate(sourceFile, objectFile, dependencyFile *paths.Path) (bool logrus.Debugf("Not found: %v", objectFile) return false, nil } - return false, errors.WithStack(err) + return false, err } dependencyFile = dependencyFile.Clean() @@ -63,7 +59,7 @@ func ObjFileIsUpToDate(sourceFile, objectFile, dependencyFile *paths.Path) (bool logrus.Debugf("Not found: %v", dependencyFile) return false, nil } - return false, errors.WithStack(err) + return false, err } if sourceFileStat.ModTime().After(objectFileStat.ModTime()) { @@ -77,7 +73,7 @@ func ObjFileIsUpToDate(sourceFile, objectFile, dependencyFile *paths.Path) (bool rows, err := dependencyFile.ReadFileAsLines() if err != nil { - return false, errors.WithStack(err) + return false, err } rows = f.Map(rows, removeEndingBackSlash) @@ -160,17 +156,6 @@ func filterOutSCCS(file *paths.Path) bool { return !sourceControlFolders[file.Base()] } -// filterReadableFiles is a ReadDirFilter that accepts only readable files -func filterReadableFiles(file *paths.Path) bool { - // See if the file is readable by opening it - f, err := file.Open() - if err != nil { - return false - } - f.Close() - return true -} - // filterOutHiddenFiles is a ReadDirFilter that exclude files with a "." prefix in their name var filterOutHiddenFiles = paths.FilterOutPrefixes(".") @@ -180,7 +165,6 @@ func FindFilesInFolder(dir *paths.Path, recurse bool, extensions ...string) (pat filterOutHiddenFiles, filterOutSCCS, paths.FilterOutDirectories(), - filterReadableFiles, ) if len(extensions) > 0 { fileFilter = paths.AndFilter( diff --git a/arduino/builder/internal/utils/utils_test.go b/internal/arduino/builder/internal/utils/utils_test.go similarity index 100% rename from arduino/builder/internal/utils/utils_test.go rename to internal/arduino/builder/internal/utils/utils_test.go diff --git a/arduino/builder/libraries.go b/internal/arduino/builder/libraries.go similarity index 83% rename from arduino/builder/libraries.go rename to internal/arduino/builder/libraries.go index bbe4f514529..f5648a09596 100644 --- a/arduino/builder/libraries.go +++ b/internal/arduino/builder/libraries.go @@ -20,12 +20,12 @@ import ( "strings" "time" - "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/arduino/libraries" f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) // nolint @@ -40,12 +40,12 @@ func (b *Builder) buildLibraries(includesFolders paths.PathList, importedLibrari libs := importedLibraries if err := b.librariesBuildPath.MkdirAll(); err != nil { - return errors.WithStack(err) + return err } librariesObjectFiles, err := b.compileLibraries(libs, includes) if err != nil { - return errors.WithStack(err) + return err } b.buildArtifacts.librariesObjectFiles = librariesObjectFiles return nil @@ -88,25 +88,25 @@ func (b *Builder) findExpectedPrecompiledLibFolder( } } - b.logger.Info(tr("Library %[1]s has been declared precompiled:", library.Name)) + b.logger.Info(i18n.Tr("Library %[1]s has been declared precompiled:", library.Name)) // Try directory with full fpuSpecs first, if available if len(fpuSpecs) > 0 { fpuSpecs = strings.TrimRight(fpuSpecs, "-") fullPrecompDir := library.SourceDir.Join(mcu).Join(fpuSpecs) if fullPrecompDir.Exist() && directoryContainsFile(fullPrecompDir) { - b.logger.Info(tr("Using precompiled library in %[1]s", fullPrecompDir)) + b.logger.Info(i18n.Tr("Using precompiled library in %[1]s", fullPrecompDir)) return fullPrecompDir } - b.logger.Info(tr(`Precompiled library in "%[1]s" not found`, fullPrecompDir)) + b.logger.Info(i18n.Tr(`Precompiled library in "%[1]s" not found`, fullPrecompDir)) } precompDir := library.SourceDir.Join(mcu) if precompDir.Exist() && directoryContainsFile(precompDir) { - b.logger.Info(tr("Using precompiled library in %[1]s", precompDir)) + b.logger.Info(i18n.Tr("Using precompiled library in %[1]s", precompDir)) return precompDir } - b.logger.Info(tr(`Precompiled library in "%[1]s" not found`, precompDir)) + b.logger.Info(i18n.Tr(`Precompiled library in "%[1]s" not found`, precompDir)) return nil } @@ -118,7 +118,7 @@ func (b *Builder) compileLibraries(libraries libraries.List, includes []string) for _, library := range libraries { libraryObjectFiles, err := b.compileLibrary(library, includes) if err != nil { - return nil, errors.WithStack(err) + return nil, err } objectFiles.AddAll(libraryObjectFiles) @@ -130,12 +130,12 @@ func (b *Builder) compileLibraries(libraries libraries.List, includes []string) func (b *Builder) compileLibrary(library *libraries.Library, includes []string) (paths.PathList, error) { if b.logger.Verbose() { - b.logger.Info(tr(`Compiling library "%[1]s"`, library.Name)) + b.logger.Info(i18n.Tr(`Compiling library "%[1]s"`, library.Name)) } libraryBuildPath := b.librariesBuildPath.Join(library.DirName) if err := libraryBuildPath.MkdirAll(); err != nil { - return nil, errors.WithStack(err) + return nil, err } objectFiles := paths.NewPathList() @@ -148,12 +148,12 @@ func (b *Builder) compileLibrary(library *libraries.Library, includes []string) ) if !coreSupportPrecompiled { - b.logger.Info(tr("The platform does not support '%[1]s' for precompiled libraries.", "compiler.libraries.ldflags")) + b.logger.Info(i18n.Tr("The platform does not support '%[1]s' for precompiled libraries.", "compiler.libraries.ldflags")) } else if precompiledPath != nil { // Find all libraries in precompiledPath libs, err := precompiledPath.ReadDir() if err != nil { - return nil, errors.WithStack(err) + return nil, err } // Add required LD flags @@ -194,12 +194,12 @@ func (b *Builder) compileLibrary(library *libraries.Library, includes []string) includes, ) if err != nil { - return nil, errors.WithStack(err) + return nil, err } if library.DotALinkage { - archiveFile, err := b.archiveCompiledFiles(libraryBuildPath, paths.New(library.DirName+".a"), libObjectFiles) + archiveFile, err := b.archiveCompiledFiles(libraryBuildPath.Join(library.DirName+".a"), libObjectFiles) if err != nil { - return nil, errors.WithStack(err) + return nil, err } objectFiles.Add(archiveFile) } else { @@ -215,7 +215,7 @@ func (b *Builder) compileLibrary(library *libraries.Library, includes []string) includes, ) if err != nil { - return nil, errors.WithStack(err) + return nil, err } objectFiles.AddAll(libObjectFiles) @@ -227,7 +227,7 @@ func (b *Builder) compileLibrary(library *libraries.Library, includes []string) includes, ) if err != nil { - return nil, errors.WithStack(err) + return nil, err } objectFiles.AddAll(utilityObjectFiles) } @@ -245,14 +245,14 @@ func (b *Builder) removeUnusedCompiledLibraries(importedLibraries libraries.List toLibraryNames := func(libraries []*libraries.Library) []string { libraryNames := []string{} for _, library := range libraries { - libraryNames = append(libraryNames, library.Name) + libraryNames = append(libraryNames, library.DirName) } return libraryNames } files, err := b.librariesBuildPath.ReadDir() if err != nil { - return errors.WithStack(err) + return err } libraryNames := toLibraryNames(importedLibraries) @@ -260,7 +260,7 @@ func (b *Builder) removeUnusedCompiledLibraries(importedLibraries libraries.List if file.IsDir() { if !slices.Contains(libraryNames, file.Base()) { if err := file.RemoveAll(); err != nil { - return errors.WithStack(err) + return err } } } @@ -280,7 +280,7 @@ func (b *Builder) warnAboutArchIncompatibleLibraries(importedLibraries libraries for _, importedLibrary := range importedLibraries { if !importedLibrary.SupportsAnyArchitectureIn(archs...) { b.logger.Info( - tr("WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be incompatible with your current board which runs on %[3]s architecture(s).", + i18n.Tr("WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be incompatible with your current board which runs on %[3]s architecture(s).", importedLibrary.Name, strings.Join(importedLibrary.Architectures, ", "), strings.Join(archs, ", "))) @@ -299,17 +299,17 @@ func (b *Builder) printUsedLibraries(importedLibraries libraries.List) { for _, library := range importedLibraries { legacy := "" if library.IsLegacy { - legacy = tr("(legacy)") + legacy = i18n.Tr("(legacy)") } if library.Version.String() == "" { b.logger.Info( - tr("Using library %[1]s in folder: %[2]s %[3]s", + i18n.Tr("Using library %[1]s in folder: %[2]s %[3]s", library.Name, library.InstallDir, legacy)) } else { b.logger.Info( - tr("Using library %[1]s at version %[2]s in folder: %[3]s %[4]s", + i18n.Tr("Using library %[1]s at version %[2]s in folder: %[3]s %[4]s", library.Name, library.Version, library.InstallDir, diff --git a/arduino/builder/linker.go b/internal/arduino/builder/linker.go similarity index 72% rename from arduino/builder/linker.go rename to internal/arduino/builder/linker.go index caad00d02c9..e7d91811890 100644 --- a/arduino/builder/linker.go +++ b/internal/arduino/builder/linker.go @@ -19,15 +19,15 @@ import ( "strings" f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" ) // link fixdoc func (b *Builder) link() error { if b.onlyUpdateCompilationDatabase { if b.logger.Verbose() { - b.logger.Info(tr("Skip linking of final executable.")) + b.logger.Info(i18n.Tr("Skip linking of final executable.")) } return nil } @@ -39,7 +39,7 @@ func (b *Builder) link() error { coreDotARelPath, err := b.buildPath.RelTo(b.buildArtifacts.coreArchiveFilePath) if err != nil { - return errors.WithStack(err) + return err } wrapWithDoubleQuotes := func(value string) string { return "\"" + value + "\"" } @@ -54,34 +54,31 @@ func (b *Builder) link() error { // it may happen that a subdir/spi.o inside the archive may be overwritten by a anotherdir/spi.o // because thery are both named spi.o. - properties := b.buildProperties.Clone() - archives := paths.NewPathList() + // Put all the existing archives apart from the other object files + existingArchives := objectFiles.Clone() + existingArchives.FilterSuffix(".a") + objectFiles.FilterOutSuffix(".a") + + // Generate an archive for each directory from the remaining object files + newArchives := paths.NewPathList() for _, object := range objectFiles { - if object.HasSuffix(".a") { - archives.Add(object) - continue - } archive := object.Parent().Join("objs.a") - if !archives.Contains(archive) { - archives.Add(archive) - // Cleanup old archives - _ = archive.Remove() - } - properties.Set("archive_file", archive.Base()) - properties.SetPath("archive_file_path", archive) - properties.SetPath("object_file", object) - - command, err := b.prepareCommandForRecipe(properties, "recipe.ar.pattern", false) - if err != nil { - return errors.WithStack(err) - } - - if err := b.execCommand(command); err != nil { - return errors.WithStack(err) - } + newArchives.AddIfMissing(archive) + } + for _, archive := range newArchives { + archiveDir := archive.Parent() + relatedObjectFiles := objectFiles.Clone() + relatedObjectFiles.Filter(func(object *paths.Path) bool { + // extract all the object files that are in the same directory of the archive + return object.Parent().EquivalentTo(archiveDir) + }) + b.archiveCompiledFiles(archive, relatedObjectFiles) } - objectFileList = strings.Join(f.Map(archives.AsStrings(), wrapWithDoubleQuotes), " ") + // Put everything together + allArchives := existingArchives.Clone() + allArchives.AddAll(newArchives) + objectFileList = strings.Join(f.Map(allArchives.AsStrings(), wrapWithDoubleQuotes), " ") objectFileList = "-Wl,--whole-archive " + objectFileList + " -Wl,--no-whole-archive" } diff --git a/arduino/builder/preprocess_sketch.go b/internal/arduino/builder/preprocess_sketch.go similarity index 70% rename from arduino/builder/preprocess_sketch.go rename to internal/arduino/builder/preprocess_sketch.go index 8028d345fdf..86d7bd7e7e9 100644 --- a/arduino/builder/preprocess_sketch.go +++ b/internal/arduino/builder/preprocess_sketch.go @@ -16,21 +16,24 @@ package builder import ( - "github.com/arduino/arduino-cli/arduino/builder/internal/preprocessor" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/preprocessor" "github.com/arduino/go-paths-helper" ) // preprocessSketch fixdoc func (b *Builder) preprocessSketch(includes paths.PathList) error { // In the future we might change the preprocessor - normalOutput, verboseOutput, err := preprocessor.PreprocessSketchWithCtags( + result, err := preprocessor.PreprocessSketchWithCtags( + b.ctx, b.sketch, b.buildPath, includes, b.lineOffset, - b.buildProperties, b.onlyUpdateCompilationDatabase, + b.buildProperties, b.onlyUpdateCompilationDatabase, b.logger.Verbose(), ) - if b.logger.Verbose() { - b.logger.WriteStdout(verboseOutput) - } else { - b.logger.WriteStdout(normalOutput) + if result != nil { + if b.logger.Verbose() { + b.logger.WriteStdout(result.Stdout()) + } + b.logger.WriteStdout(result.Stderr()) + b.diagnosticStore.Parse(result.Args(), result.Stderr()) } return err diff --git a/arduino/builder/recipe.go b/internal/arduino/builder/recipe.go similarity index 92% rename from arduino/builder/recipe.go rename to internal/arduino/builder/recipe.go index 57b137176f1..5e71010c32c 100644 --- a/arduino/builder/recipe.go +++ b/internal/arduino/builder/recipe.go @@ -20,8 +20,8 @@ import ( "sort" "strings" + "github.com/arduino/arduino-cli/internal/i18n" properties "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" "github.com/sirupsen/logrus" ) @@ -40,18 +40,18 @@ func (b *Builder) RunRecipe(prefix, suffix string, skipIfOnlyUpdatingCompilation command, err := b.prepareCommandForRecipe(properties, recipe, false) if err != nil { - return errors.WithStack(err) + return err } if b.onlyUpdateCompilationDatabase && skipIfOnlyUpdatingCompilationDatabase { if b.logger.Verbose() { - b.logger.Info(tr("Skipping: %[1]s", strings.Join(command.GetArgs(), " "))) + b.logger.Info(i18n.Tr("Skipping: %[1]s", strings.Join(command.GetArgs(), " "))) } return nil } if err := b.execCommand(command); err != nil { - return errors.WithStack(err) + return err } } diff --git a/arduino/builder/sizer.go b/internal/arduino/builder/sizer.go similarity index 77% rename from arduino/builder/sizer.go rename to internal/arduino/builder/sizer.go index a4e362f7106..84cf8012a32 100644 --- a/arduino/builder/sizer.go +++ b/internal/arduino/builder/sizer.go @@ -18,14 +18,15 @@ package builder import ( "bytes" "encoding/json" + "errors" "fmt" "regexp" "strconv" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) // ExecutableSectionSize represents a section of the executable output file @@ -75,7 +76,7 @@ func (b *Builder) size() error { func (b *Builder) checkSizeAdvanced() (ExecutablesFileSections, error) { command, err := b.prepareCommandForRecipe(b.buildProperties, "recipe.advanced_size.pattern", false) if err != nil { - return nil, errors.New(tr("Error while determining sketch size: %s", err)) + return nil, errors.New(i18n.Tr("Error while determining sketch size: %s", err)) } if b.logger.Verbose() { b.logger.Info(utils.PrintableCommand(command.GetArgs())) @@ -84,10 +85,10 @@ func (b *Builder) checkSizeAdvanced() (ExecutablesFileSections, error) { command.RedirectStdoutTo(out) command.RedirectStderrTo(b.logger.Stderr()) if err := command.Start(); err != nil { - return nil, errors.New(tr("Error while determining sketch size: %s", err)) + return nil, errors.New(i18n.Tr("Error while determining sketch size: %s", err)) } if err := command.Wait(); err != nil { - return nil, errors.New(tr("Error while determining sketch size: %s", err)) + return nil, errors.New(i18n.Tr("Error while determining sketch size: %s", err)) } type AdvancedSizerResponse struct { @@ -106,7 +107,7 @@ func (b *Builder) checkSizeAdvanced() (ExecutablesFileSections, error) { var resp AdvancedSizerResponse if err := json.Unmarshal(out.Bytes(), &resp); err != nil { - return nil, errors.New(tr("Error while determining sketch size: %s", err)) + return nil, errors.New(i18n.Tr("Error while determining sketch size: %s", err)) } executableSectionsSize := resp.Sections @@ -150,23 +151,23 @@ func (b *Builder) checkSize() (ExecutablesFileSections, error) { textSize, dataSize, _, err := b.execSizeRecipe(properties) if err != nil { - b.logger.Warn(tr("Couldn't determine program size")) + b.logger.Warn(i18n.Tr("Couldn't determine program size")) return nil, nil } - b.logger.Info(tr("Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s bytes.", + b.logger.Info(i18n.Tr("Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s bytes.", strconv.Itoa(textSize), strconv.Itoa(maxTextSize), strconv.Itoa(textSize*100/maxTextSize))) if dataSize >= 0 { if maxDataSize > 0 { - b.logger.Info(tr("Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s bytes for local variables. Maximum is %[2]s bytes.", + b.logger.Info(i18n.Tr("Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s bytes for local variables. Maximum is %[2]s bytes.", strconv.Itoa(dataSize), strconv.Itoa(maxDataSize), strconv.Itoa(dataSize*100/maxDataSize), strconv.Itoa(maxDataSize-dataSize))) } else { - b.logger.Info(tr("Global variables use %[1]s bytes of dynamic memory.", strconv.Itoa(dataSize))) + b.logger.Info(i18n.Tr("Global variables use %[1]s bytes of dynamic memory.", strconv.Itoa(dataSize))) } } @@ -186,13 +187,13 @@ func (b *Builder) checkSize() (ExecutablesFileSections, error) { } if textSize > maxTextSize { - b.logger.Warn(tr("Sketch too big; see %[1]s for tips on reducing it.", "https://support.arduino.cc/hc/en-us/articles/360013825179")) - return executableSectionsSize, errors.New(tr("text section exceeds available space in board")) + b.logger.Warn(i18n.Tr("Sketch too big; see %[1]s for tips on reducing it.", "https://support.arduino.cc/hc/en-us/articles/360013825179")) + return executableSectionsSize, errors.New(i18n.Tr("text section exceeds available space in board")) } if maxDataSize > 0 && dataSize > maxDataSize { - b.logger.Warn(tr("Not enough memory; see %[1]s for tips on reducing your footprint.", "https://support.arduino.cc/hc/en-us/articles/360013825179")) - return executableSectionsSize, errors.New(tr("data section exceeds available space in board")) + b.logger.Warn(i18n.Tr("Not enough memory; see %[1]s for tips on reducing your footprint.", "https://support.arduino.cc/hc/en-us/articles/360013825179")) + return executableSectionsSize, errors.New(i18n.Tr("data section exceeds available space in board")) } if w := properties.Get("build.warn_data_percentage"); w != "" { @@ -201,7 +202,7 @@ func (b *Builder) checkSize() (ExecutablesFileSections, error) { return executableSectionsSize, err } if maxDataSize > 0 && dataSize > maxDataSize*warnDataPercentage/100 { - b.logger.Warn(tr("Low memory available, stability problems may occur.")) + b.logger.Warn(i18n.Tr("Low memory available, stability problems may occur.")) } } @@ -211,7 +212,7 @@ func (b *Builder) checkSize() (ExecutablesFileSections, error) { func (b *Builder) execSizeRecipe(properties *properties.Map) (textSize int, dataSize int, eepromSize int, resErr error) { command, err := b.prepareCommandForRecipe(properties, "recipe.size.pattern", false) if err != nil { - resErr = fmt.Errorf(tr("Error while determining sketch size: %s"), err) + resErr = errors.New(i18n.Tr("Error while determining sketch size: %s", err)) return } if b.logger.Verbose() { @@ -221,11 +222,11 @@ func (b *Builder) execSizeRecipe(properties *properties.Map) (textSize int, data command.RedirectStdoutTo(commandStdout) command.RedirectStderrTo(b.logger.Stderr()) if err := command.Start(); err != nil { - resErr = fmt.Errorf(tr("Error while determining sketch size: %s"), err) + resErr = errors.New(i18n.Tr("Error while determining sketch size: %s", err)) return } if err := command.Wait(); err != nil { - resErr = fmt.Errorf(tr("Error while determining sketch size: %s"), err) + resErr = errors.New(i18n.Tr("Error while determining sketch size: %s", err)) return } @@ -236,23 +237,23 @@ func (b *Builder) execSizeRecipe(properties *properties.Map) (textSize int, data textSize, err = computeSize(properties.Get("recipe.size.regex"), out) if err != nil { - resErr = fmt.Errorf(tr("Invalid size regexp: %s"), err) + resErr = errors.New(i18n.Tr("Invalid size regexp: %s", err)) return } if textSize == -1 { - resErr = errors.New(tr("Missing size regexp")) + resErr = errors.New(i18n.Tr("Missing size regexp")) return } dataSize, err = computeSize(properties.Get("recipe.size.regex.data"), out) if err != nil { - resErr = fmt.Errorf(tr("Invalid data size regexp: %s"), err) + resErr = errors.New(i18n.Tr("Invalid data size regexp: %s", err)) return } eepromSize, err = computeSize(properties.Get("recipe.size.regex.eeprom"), out) if err != nil { - resErr = fmt.Errorf(tr("Invalid eeprom size regexp: %s"), err) + resErr = errors.New(i18n.Tr("Invalid eeprom size regexp: %s", err)) return } diff --git a/arduino/builder/sizer_test.go b/internal/arduino/builder/sizer_test.go similarity index 100% rename from arduino/builder/sizer_test.go rename to internal/arduino/builder/sizer_test.go diff --git a/arduino/builder/sketch.go b/internal/arduino/builder/sketch.go similarity index 89% rename from arduino/builder/sketch.go rename to internal/arduino/builder/sketch.go index 3a7c21f3ded..1dda735138f 100644 --- a/arduino/builder/sketch.go +++ b/internal/arduino/builder/sketch.go @@ -17,24 +17,22 @@ package builder import ( "bytes" + "errors" "fmt" "math" "regexp" "strconv" "strings" - "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/i18n" f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/marcinbor85/gohex" - - "github.com/pkg/errors" ) var ( includesArduinoH = regexp.MustCompile(`(?m)^\s*#\s*include\s*[<\"]Arduino\.h[>\"]`) - tr = i18n.Tr ) // prepareSketchBuildPath copies the sketch source files in the build path. @@ -42,7 +40,7 @@ var ( // .cpp file still needs to be Arduino-preprocessed to compile). func (b *Builder) prepareSketchBuildPath() error { if err := b.sketchBuildPath.MkdirAll(); err != nil { - return errors.Wrap(err, tr("unable to create a folder to save the sketch")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to create a folder to save the sketch"), err) } offset, mergedSource, err := b.sketchMergeSources(b.sourceOverrides) @@ -73,14 +71,14 @@ func (b *Builder) sketchMergeSources(overrides map[string]string) (int, string, getSource := func(f *paths.Path) (string, error) { path, err := b.sketch.FullPath.RelTo(f) if err != nil { - return "", errors.Wrap(err, tr("unable to compute relative path to the sketch for the item")) + return "", fmt.Errorf("%s: %w", i18n.Tr("unable to compute relative path to the sketch for the item"), err) } if override, ok := overrides[path.String()]; ok { return override, nil } data, err := f.ReadFile() if err != nil { - return "", fmt.Errorf(tr("reading file %[1]s: %[2]s"), f, err) + return "", errors.New(i18n.Tr("reading file %[1]s: %[2]s", f, err)) } return string(data), nil } @@ -117,13 +115,13 @@ func (b *Builder) sketchCopyAdditionalFiles(buildPath *paths.Path, overrides map for _, file := range b.sketch.AdditionalFiles { relpath, err := b.sketch.FullPath.RelTo(file) if err != nil { - return errors.Wrap(err, tr("unable to compute relative path to the sketch for the item")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to compute relative path to the sketch for the item"), err) } targetPath := buildPath.JoinPath(relpath) // create the directory containing the target if err = targetPath.Parent().MkdirAll(); err != nil { - return errors.Wrap(err, tr("unable to create the folder containing the item")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to create the folder containing the item"), err) } var sourceBytes []byte @@ -134,7 +132,7 @@ func (b *Builder) sketchCopyAdditionalFiles(buildPath *paths.Path, overrides map // read the source file s, err := file.ReadFile() if err != nil { - return errors.Wrap(err, tr("unable to read contents of the source item")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to read contents of the source item"), err) } sourceBytes = s } @@ -144,7 +142,7 @@ func (b *Builder) sketchCopyAdditionalFiles(buildPath *paths.Path, overrides map err = writeIfDifferent(sourceBytes, targetPath) if err != nil { - return errors.Wrap(err, tr("unable to write to destination file")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to write to destination file"), err) } } @@ -161,7 +159,7 @@ func writeIfDifferent(source []byte, destPath *paths.Path) error { // Read the destination file if it exists existingBytes, err := destPath.ReadFile() if err != nil { - return errors.Wrap(err, tr("unable to read contents of the destination item")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to read contents of the destination item"), err) } // Overwrite if contents are different @@ -178,7 +176,7 @@ func (b *Builder) buildSketch(includesFolders paths.PathList) error { includes := f.Map(includesFolders.AsStrings(), cpp.WrapWithHyphenI) if err := b.sketchBuildPath.MkdirAll(); err != nil { - return errors.WithStack(err) + return err } sketchObjectFiles, err := b.compileFiles( @@ -187,7 +185,7 @@ func (b *Builder) buildSketch(includesFolders paths.PathList) error { includes, ) if err != nil { - return errors.WithStack(err) + return err } // The "src/" subdirectory of a sketch is compiled recursively @@ -199,7 +197,7 @@ func (b *Builder) buildSketch(includesFolders paths.PathList) error { includes, ) if err != nil { - return errors.WithStack(err) + return err } sketchObjectFiles.AddAll(srcObjectFiles) } @@ -242,7 +240,7 @@ func (b *Builder) mergeSketchWithBootloader() error { bootloaderPath := b.buildProperties.GetPath("runtime.platform.path").Join("bootloaders", bootloader) if bootloaderPath.NotExist() { if b.logger.Verbose() { - b.logger.Warn(tr("Bootloader file specified but missing: %[1]s", bootloaderPath)) + b.logger.Warn(i18n.Tr("Bootloader file specified but missing: %[1]s", bootloaderPath)) } return nil } diff --git a/arduino/builder/sketch_test.go b/internal/arduino/builder/sketch_test.go similarity index 98% rename from arduino/builder/sketch_test.go rename to internal/arduino/builder/sketch_test.go index 1ae684e12ed..208efc468b0 100644 --- a/arduino/builder/sketch_test.go +++ b/internal/arduino/builder/sketch_test.go @@ -21,7 +21,7 @@ import ( "strings" "testing" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/internal/arduino/sketch" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" ) diff --git a/arduino/builder/testdata/TestCopyAdditionalFiles/TestCopyAdditionalFiles.ino b/internal/arduino/builder/testdata/TestCopyAdditionalFiles/TestCopyAdditionalFiles.ino similarity index 100% rename from arduino/builder/testdata/TestCopyAdditionalFiles/TestCopyAdditionalFiles.ino rename to internal/arduino/builder/testdata/TestCopyAdditionalFiles/TestCopyAdditionalFiles.ino diff --git a/arduino/builder/testdata/TestCopyAdditionalFiles/include/foo.h b/internal/arduino/builder/testdata/TestCopyAdditionalFiles/include/foo.h similarity index 100% rename from arduino/builder/testdata/TestCopyAdditionalFiles/include/foo.h rename to internal/arduino/builder/testdata/TestCopyAdditionalFiles/include/foo.h diff --git a/arduino/builder/testdata/TestLoadSketchCaseMismatch/testloadsketchcasemismatch.ino b/internal/arduino/builder/testdata/TestLoadSketchCaseMismatch/testloadsketchcasemismatch.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchCaseMismatch/testloadsketchcasemismatch.ino rename to internal/arduino/builder/testdata/TestLoadSketchCaseMismatch/testloadsketchcasemismatch.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolder/.#sketch.ino b/internal/arduino/builder/testdata/TestLoadSketchFolder/.#sketch.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/.#sketch.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolder/.#sketch.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolder/TestLoadSketchFolder.ino b/internal/arduino/builder/testdata/TestLoadSketchFolder/TestLoadSketchFolder.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/TestLoadSketchFolder.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolder/TestLoadSketchFolder.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolder/doc.txt b/internal/arduino/builder/testdata/TestLoadSketchFolder/doc.txt similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/doc.txt rename to internal/arduino/builder/testdata/TestLoadSketchFolder/doc.txt diff --git a/arduino/builder/testdata/TestLoadSketchFolder/header.h b/internal/arduino/builder/testdata/TestLoadSketchFolder/header.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/header.h rename to internal/arduino/builder/testdata/TestLoadSketchFolder/header.h diff --git a/arduino/builder/testdata/TestLoadSketchFolder/old.pde b/internal/arduino/builder/testdata/TestLoadSketchFolder/old.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/old.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolder/old.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolder/other.ino b/internal/arduino/builder/testdata/TestLoadSketchFolder/other.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/other.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolder/other.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolder/s_file.S b/internal/arduino/builder/testdata/TestLoadSketchFolder/s_file.S similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/s_file.S rename to internal/arduino/builder/testdata/TestLoadSketchFolder/s_file.S diff --git a/arduino/builder/testdata/TestLoadSketchFolder/src/dont_load_me.ino b/internal/arduino/builder/testdata/TestLoadSketchFolder/src/dont_load_me.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/src/dont_load_me.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolder/src/dont_load_me.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolder/src/helper.h b/internal/arduino/builder/testdata/TestLoadSketchFolder/src/helper.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/src/helper.h rename to internal/arduino/builder/testdata/TestLoadSketchFolder/src/helper.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/.#sketch.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/.#sketch.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/.#sketch.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/.#sketch.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.pde b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/doc.txt b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/doc.txt similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/doc.txt rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/doc.txt diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/header.h b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/header.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/header.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/header.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/old.pde b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/old.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/old.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/old.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/other.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/other.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/other.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/other.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/s_file.S b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/s_file.S similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/s_file.S rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/s_file.S diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/dont_load_me.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/dont_load_me.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/dont_load_me.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/dont_load_me.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/helper.h b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/helper.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/helper.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/helper.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderIno/TestLoadSketchFolderIno.ino/TestLoadSketchFolder.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderIno/TestLoadSketchFolderIno.ino/TestLoadSketchFolder.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderIno/TestLoadSketchFolderIno.ino/TestLoadSketchFolder.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderIno/TestLoadSketchFolderIno.ino/TestLoadSketchFolder.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/.#sketch.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/.#sketch.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/.#sketch.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/.#sketch.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/TestLoadSketchFolderPde.pde b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/TestLoadSketchFolderPde.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/TestLoadSketchFolderPde.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/TestLoadSketchFolderPde.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/doc.txt b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/doc.txt similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/doc.txt rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/doc.txt diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/header.h b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/header.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/header.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/header.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/old.pde b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/old.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/old.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/old.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/other.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/other.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/other.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/other.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/s_file.S b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/s_file.S similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/s_file.S rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/s_file.S diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/src/dont_load_me.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/src/dont_load_me.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/src/dont_load_me.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/src/dont_load_me.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/src/helper.h b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/src/helper.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/src/helper.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/src/helper.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/.#sketch.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/.#sketch.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/.#sketch.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/.#sketch.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/TestLoadSketchFolderSymlink.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/TestLoadSketchFolderSymlink.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/TestLoadSketchFolderSymlink.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/TestLoadSketchFolderSymlink.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/doc.txt b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/doc.txt similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/doc.txt rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/doc.txt diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/header.h b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/header.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/header.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/header.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/old.pde b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/old.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/old.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/old.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/other.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/other.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/other.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/other.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/s_file.S b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/s_file.S similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/s_file.S rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/s_file.S diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/dont_load_me.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/dont_load_me.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/dont_load_me.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/dont_load_me.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/helper.h b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/helper.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/helper.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/helper.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderWrongMain/main.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderWrongMain/main.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderWrongMain/main.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderWrongMain/main.ino diff --git a/arduino/builder/testdata/TestMergeSketchSources.txt b/internal/arduino/builder/testdata/TestMergeSketchSources.txt similarity index 100% rename from arduino/builder/testdata/TestMergeSketchSources.txt rename to internal/arduino/builder/testdata/TestMergeSketchSources.txt diff --git a/arduino/builder/testdata/TestMergeSketchSourcesArduinoIncluded/TestMergeSketchSourcesArduinoIncluded.ino b/internal/arduino/builder/testdata/TestMergeSketchSourcesArduinoIncluded/TestMergeSketchSourcesArduinoIncluded.ino similarity index 100% rename from arduino/builder/testdata/TestMergeSketchSourcesArduinoIncluded/TestMergeSketchSourcesArduinoIncluded.ino rename to internal/arduino/builder/testdata/TestMergeSketchSourcesArduinoIncluded/TestMergeSketchSourcesArduinoIncluded.ino diff --git a/arduino/builder/testdata/TestMergeSketchSources_win.txt b/internal/arduino/builder/testdata/TestMergeSketchSources_win.txt similarity index 100% rename from arduino/builder/testdata/TestMergeSketchSources_win.txt rename to internal/arduino/builder/testdata/TestMergeSketchSources_win.txt diff --git a/arduino/builder/testdata/TestSaveSketch.ino b/internal/arduino/builder/testdata/TestSaveSketch.ino similarity index 100% rename from arduino/builder/testdata/TestSaveSketch.ino rename to internal/arduino/builder/testdata/TestSaveSketch.ino diff --git a/arduino/builder/testdata/TestSketchWithIppFile/TestSketchWithIppFile.ino b/internal/arduino/builder/testdata/TestSketchWithIppFile/TestSketchWithIppFile.ino similarity index 100% rename from arduino/builder/testdata/TestSketchWithIppFile/TestSketchWithIppFile.ino rename to internal/arduino/builder/testdata/TestSketchWithIppFile/TestSketchWithIppFile.ino diff --git a/arduino/builder/testdata/TestSketchWithIppFile/template.ipp b/internal/arduino/builder/testdata/TestSketchWithIppFile/template.ipp similarity index 100% rename from arduino/builder/testdata/TestSketchWithIppFile/template.ipp rename to internal/arduino/builder/testdata/TestSketchWithIppFile/template.ipp diff --git a/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/TestSketchWithMarkdownAsciidocJson.ino b/internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/TestSketchWithMarkdownAsciidocJson.ino similarity index 100% rename from arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/TestSketchWithMarkdownAsciidocJson.ino rename to internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/TestSketchWithMarkdownAsciidocJson.ino diff --git a/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.adoc b/internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.adoc similarity index 100% rename from arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.adoc rename to internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.adoc diff --git a/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.json b/internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.json similarity index 100% rename from arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.json rename to internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.json diff --git a/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.md b/internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.md similarity index 100% rename from arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.md rename to internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.md diff --git a/arduino/builder/testdata/TestSketchWithTppFile/TestSketchWithTppFile.ino b/internal/arduino/builder/testdata/TestSketchWithTppFile/TestSketchWithTppFile.ino similarity index 100% rename from arduino/builder/testdata/TestSketchWithTppFile/TestSketchWithTppFile.ino rename to internal/arduino/builder/testdata/TestSketchWithTppFile/TestSketchWithTppFile.ino diff --git a/arduino/builder/testdata/TestSketchWithTppFile/template.tpp b/internal/arduino/builder/testdata/TestSketchWithTppFile/template.tpp similarity index 100% rename from arduino/builder/testdata/TestSketchWithTppFile/template.tpp rename to internal/arduino/builder/testdata/TestSketchWithTppFile/template.tpp diff --git a/arduino/cores/board.go b/internal/arduino/cores/board.go similarity index 92% rename from arduino/cores/board.go rename to internal/arduino/cores/board.go index 8a41a8fb198..ed1aa9c68b5 100644 --- a/arduino/cores/board.go +++ b/internal/arduino/cores/board.go @@ -16,10 +16,11 @@ package cores import ( - "fmt" + "errors" "strings" "sync" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-properties-orderedmap" ) @@ -139,14 +140,14 @@ func (b *Board) GetBuildProperties(fqbn *FQBN) (*properties.Map, error) { // Check for residual invalid options... for option, value := range config.AsMap() { if option == "" { - return nil, fmt.Errorf(tr("invalid empty option found")) + return nil, errors.New(i18n.Tr("invalid empty option found")) } if _, ok := b.configOptions.GetOk(option); !ok { - return nil, fmt.Errorf(tr("invalid option '%s'"), option) + return nil, errors.New(i18n.Tr("invalid option '%s'", option)) } optionsConf, ok := b.configOptionProperties[option+"="+value] if !ok { - return nil, fmt.Errorf(tr("invalid value '%[1]s' for option '%[2]s'"), value, option) + return nil, errors.New(i18n.Tr("invalid value '%[1]s' for option '%[2]s'", value, option)) } buildProperties.Merge(optionsConf) } @@ -162,7 +163,7 @@ func (b *Board) GetBuildProperties(fqbn *FQBN) (*properties.Map, error) { func (b *Board) GeneratePropertiesForConfiguration(config string) (*properties.Map, error) { fqbn, err := ParseFQBN(b.String() + ":" + config) if err != nil { - return nil, fmt.Errorf(tr("parsing fqbn: %s"), err) + return nil, errors.New(i18n.Tr("parsing fqbn: %s", err)) } return b.GetBuildProperties(fqbn) } @@ -241,3 +242,10 @@ func (b *Board) IdentifyBoardConfiguration(query *properties.Map) *properties.Ma } return res } + +// GetDefaultProgrammerID returns the board's default programmer as +// defined in 'programmer.default' property of the board. If the board +// has no default programmer the empty string is returned. +func (b *Board) GetDefaultProgrammerID() string { + return b.Properties.Get("programmer.default") +} diff --git a/arduino/cores/board_test.go b/internal/arduino/cores/board_test.go similarity index 100% rename from arduino/cores/board_test.go rename to internal/arduino/cores/board_test.go diff --git a/arduino/cores/cores.go b/internal/arduino/cores/cores.go similarity index 80% rename from arduino/cores/cores.go rename to internal/arduino/cores/cores.go index 19ba9eeaf76..79464ed9b46 100644 --- a/arduino/cores/cores.go +++ b/internal/arduino/cores/cores.go @@ -24,11 +24,11 @@ import ( "path/filepath" "sort" "strings" + "time" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/resources" - "github.com/arduino/arduino-cli/arduino/utils" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/utils" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" @@ -37,14 +37,13 @@ import ( // Platform represents a platform package. type Platform struct { - Architecture string // The name of the architecture of this package. - Name string - Category string + Architecture string // The name of the architecture of this package. Releases map[semver.NormalizedString]*PlatformRelease // The Releases of this platform, labeled by version. Package *Package `json:"-"` ManuallyInstalled bool // true if the Platform has been installed without the CLI - Deprecated bool // true if the Platform has been deprecated + Deprecated bool // true if the latest PlatformRelease of this Platform has been deprecated Indexed bool // true if the Platform has been indexed from additional-urls + Latest *semver.Version `json:"-"` } // PlatformReleaseHelp represents the help URL for this Platform release @@ -54,12 +53,15 @@ type PlatformReleaseHelp struct { // PlatformRelease represents a release of a plaform package. type PlatformRelease struct { + Name string + Category string Resource *resources.DownloadResource Version *semver.Version BoardsManifest []*BoardManifest ToolDependencies ToolDependencies DiscoveryDependencies DiscoveryDependencies MonitorDependencies MonitorDependencies + Deprecated bool Help PlatformReleaseHelp `json:"-"` Platform *Platform `json:"-"` Properties *properties.Map `json:"-"` @@ -68,11 +70,57 @@ type PlatformRelease struct { Programmers map[string]*Programmer `json:"-"` Menus *properties.Map `json:"-"` InstallDir *paths.Path `json:"-"` - IsIDEBundled bool `json:"-"` + Timestamps *TimestampsStore // Contains the timestamps of the files used to build this PlatformRelease IsTrusted bool `json:"-"` PluggableDiscoveryAware bool `json:"-"` // true if the Platform supports pluggable discovery (no compatibility layer required) Monitors map[string]*MonitorDependency `json:"-"` MonitorsDevRecipes map[string]string `json:"-"` + Compatible bool `json:"-"` // true if at all ToolDependencies are available for the current OS/ARCH. +} + +// TimestampsStore is a generic structure to store timestamps +type TimestampsStore struct { + timestamps map[*paths.Path]*time.Time +} + +// NewTimestampsStore creates a new TimestampsStore +func NewTimestampsStore() *TimestampsStore { + return &TimestampsStore{ + timestamps: map[*paths.Path]*time.Time{}, + } +} + +// AddFile adds a file to the TimestampsStore +func (t *TimestampsStore) AddFile(path *paths.Path) { + if info, err := path.Stat(); err != nil { + t.timestamps[path] = nil // Save a missing file with a nil timestamp + } else { + modtime := info.ModTime() + t.timestamps[path] = &modtime + } +} + +// Dirty returns true if one of the files stored in the TimestampsStore has been +// changed after being added to the store. +func (t *TimestampsStore) Dirty() bool { + for path, timestamp := range t.timestamps { + if info, err := path.Stat(); err != nil { + if timestamp != nil { + return true + } + } else { + if timestamp == nil || info.ModTime() != *timestamp { + return true + } + } + } + return false +} + +// Dirty returns true if one of the files of this PlatformRelease has been changed +// (it means that the PlatformRelease should be rebuilt to be used correctly). +func (release *PlatformRelease) Dirty() bool { + return release.Timestamps.Dirty() } // BoardManifest contains information about a board. These metadata are usually @@ -88,8 +136,6 @@ type BoardManifestID struct { USB string `json:"-"` } -var tr = i18n.Tr - // HasUsbID returns true if the BoardManifes contains the specified USB id as // identification for this board. usbID should be in the format "0000:0000" func (bm *BoardManifest) HasUsbID(vid, pid string) bool { @@ -205,6 +251,7 @@ func (platform *Platform) GetOrCreateRelease(version *semver.Version) *PlatformR Properties: properties.NewMap(), Programmers: map[string]*Programmer{}, Platform: platform, + Timestamps: NewTimestampsStore(), } platform.Releases[tag] = release return release @@ -227,6 +274,21 @@ func (platform *Platform) GetLatestRelease() *PlatformRelease { return platform.FindReleaseWithVersion(latestVersion) } +// GetLatestCompatibleRelease returns the latest compatible release of this platform, or nil if no +// compatible releases are available. +func (platform *Platform) GetLatestCompatibleRelease() *PlatformRelease { + var maximum *PlatformRelease + for _, release := range platform.Releases { + if !release.IsCompatible() { + continue + } + if maximum == nil || release.Version.GreaterThan(maximum.Version) { + maximum = release + } + } + return maximum +} + // GetAllReleases returns all the releases of this platform, or an empty // slice if no releases are available func (platform *Platform) GetAllReleases() []*PlatformRelease { @@ -247,6 +309,18 @@ func (platform *Platform) GetAllReleasesVersions() []*semver.Version { return versions } +// GetAllCompatibleReleasesVersions returns all the version numbers in this Platform Package that contains compatible tools. +func (platform *Platform) GetAllCompatibleReleasesVersions() []*semver.Version { + versions := []*semver.Version{} + for _, release := range platform.Releases { + if !release.IsCompatible() { + continue + } + versions = append(versions, release.Version) + } + return versions +} + // latestReleaseVersion obtains latest version number, or nil if no release available func (platform *Platform) latestReleaseVersion() *semver.Version { // TODO: Cache latest version using a field in Platform @@ -407,7 +481,7 @@ func (release *PlatformRelease) MarshalJSON() ([]byte, error) { ID: release.Platform.String(), Installed: release.Version.String(), Latest: latestStr, - Name: release.Platform.Name, + Name: release.Name, }) } @@ -420,3 +494,9 @@ func (release *PlatformRelease) HasMetadata() bool { installedJSONPath := release.InstallDir.Join("installed.json") return installedJSONPath.Exist() } + +// IsCompatible returns true if all the tools dependencies of a PlatformRelease +// are available in the current OS/ARCH. +func (release *PlatformRelease) IsCompatible() bool { + return release.Compatible +} diff --git a/arduino/cores/cores_test.go b/internal/arduino/cores/cores_test.go similarity index 100% rename from arduino/cores/cores_test.go rename to internal/arduino/cores/cores_test.go diff --git a/arduino/cores/fqbn.go b/internal/arduino/cores/fqbn.go similarity index 70% rename from arduino/cores/fqbn.go rename to internal/arduino/cores/fqbn.go index 35f48c2207e..0db32f45cb0 100644 --- a/arduino/cores/fqbn.go +++ b/internal/arduino/cores/fqbn.go @@ -16,9 +16,11 @@ package cores import ( - "fmt" + "errors" + "regexp" "strings" + "github.com/arduino/arduino-cli/internal/i18n" properties "github.com/arduino/go-properties-orderedmap" ) @@ -30,12 +32,22 @@ type FQBN struct { Configs *properties.Map } +// MustParseFQBN extract an FQBN object from the input string +// or panics if the input is not a valid FQBN. +func MustParseFQBN(fqbnIn string) *FQBN { + res, err := ParseFQBN(fqbnIn) + if err != nil { + panic(err) + } + return res +} + // ParseFQBN extract an FQBN object from the input string func ParseFQBN(fqbnIn string) (*FQBN, error) { // Split fqbn fqbnParts := strings.Split(fqbnIn, ":") if len(fqbnParts) < 3 || len(fqbnParts) > 4 { - return nil, fmt.Errorf("not an FQBN: %s", fqbnIn) + return nil, errors.New(i18n.Tr("not an FQBN: %s", fqbnIn)) } fqbn := &FQBN{ @@ -45,18 +57,33 @@ func ParseFQBN(fqbnIn string) (*FQBN, error) { Configs: properties.NewMap(), } if fqbn.BoardID == "" { - return nil, fmt.Errorf(tr("empty board identifier")) + return nil, errors.New(i18n.Tr("empty board identifier")) + } + // Check if the fqbn contains invalid characters + fqbnValidationRegex := regexp.MustCompile(`^[a-zA-Z0-9_.-]*$`) + for i := 0; i < 3; i++ { + if !fqbnValidationRegex.MatchString(fqbnParts[i]) { + return nil, errors.New(i18n.Tr("fqbn's field %s contains an invalid character", fqbnParts[i])) + } } if len(fqbnParts) > 3 { for _, pair := range strings.Split(fqbnParts[3], ",") { parts := strings.SplitN(pair, "=", 2) if len(parts) != 2 { - return nil, fmt.Errorf(tr("invalid config option: %s"), pair) + return nil, errors.New(i18n.Tr("invalid config option: %s", pair)) } k := strings.TrimSpace(parts[0]) v := strings.TrimSpace(parts[1]) if k == "" { - return nil, fmt.Errorf(tr("invalid config option: %s"), pair) + return nil, errors.New(i18n.Tr("invalid config option: %s", pair)) + } + if !fqbnValidationRegex.MatchString(k) { + return nil, errors.New(i18n.Tr("config key %s contains an invalid character", k)) + } + // The config value can also contain the = symbol + valueValidationRegex := regexp.MustCompile(`^[a-zA-Z0-9=_.-]*$`) + if !valueValidationRegex.MatchString(v) { + return nil, errors.New(i18n.Tr("config value %s contains an invalid character", v)) } fqbn.Configs.Set(k, v) } diff --git a/arduino/cores/fqbn_test.go b/internal/arduino/cores/fqbn_test.go similarity index 78% rename from arduino/cores/fqbn_test.go rename to internal/arduino/cores/fqbn_test.go index 5c4cd9836f8..c7165af064a 100644 --- a/arduino/cores/fqbn_test.go +++ b/internal/arduino/cores/fqbn_test.go @@ -30,7 +30,7 @@ func TestFQBN(t *testing.T) { require.Equal(t, a.BoardID, "uno") require.Zero(t, a.Configs.Size()) - // Allow empty plaforms or packages + // Allow empty platforms or packages (aka. vendors + architectures) b1, err := ParseFQBN("arduino::uno") require.Equal(t, "arduino::uno", b1.String()) require.NoError(t, err) @@ -65,10 +65,24 @@ func TestFQBN(t *testing.T) { _, err = ParseFQBN("arduino:avr") require.Error(t, err) - // Sort keys in fbqn config - s, err := ParseFQBN("arduino:avr:uno:d=x,b=x,a=x,e=x,c=x") + // Keeps the config keys order + s1, err := ParseFQBN("arduino:avr:uno:d=x,b=x,a=x,e=x,c=x") require.NoError(t, err) - require.Equal(t, "arduino:avr:uno:d=x,b=x,a=x,e=x,c=x", s.String()) + require.Equal(t, "arduino:avr:uno:d=x,b=x,a=x,e=x,c=x", s1.String()) + require.Equal(t, + "properties.Map{\n \"d\": \"x\",\n \"b\": \"x\",\n \"a\": \"x\",\n \"e\": \"x\",\n \"c\": \"x\",\n}", + s1.Configs.Dump()) + + s2, err := ParseFQBN("arduino:avr:uno:a=x,b=x,c=x,d=x,e=x") + require.NoError(t, err) + require.Equal(t, "arduino:avr:uno:a=x,b=x,c=x,d=x,e=x", s2.String()) + require.Equal(t, + "properties.Map{\n \"a\": \"x\",\n \"b\": \"x\",\n \"c\": \"x\",\n \"d\": \"x\",\n \"e\": \"x\",\n}", + s2.Configs.Dump()) + + // The config keys order is insignificant when comparing two FQBNs + require.True(t, s1.Match(s2)) + require.NotEqual(t, s1.String(), s2.String()) // Test configs c, err := ParseFQBN("arduino:avr:uno:cpu=atmega") @@ -90,6 +104,8 @@ func TestFQBN(t *testing.T) { // Do not allow empty keys or missing values in config _, err = ParseFQBN("arduino:avr:uno:") require.Error(t, err) + _, err = ParseFQBN("arduino:avr:uno,") + require.Error(t, err) _, err = ParseFQBN("arduino:avr:uno:cpu") require.Error(t, err) _, err = ParseFQBN("arduino:avr:uno:=atmega") @@ -155,3 +171,18 @@ func TestMatch(t *testing.T) { require.False(t, b.Match(a)) } } + +func TestValidCharacters(t *testing.T) { + // These FQBNs contain valid characters + validFqbns := []string{"ardui_no:av_r:un_o", "arduin.o:av.r:un.o", "arduin-o:av-r:un-o", "arduin-o:av-r:un-o:a=b=c=d"} + for _, fqbn := range validFqbns { + _, err := ParseFQBN(fqbn) + require.NoError(t, err) + } + // These FQBNs contain invalid characters + invalidFqbns := []string{"arduin-o:av-r:un=o", "arduin?o:av-r:uno", "arduino:av*r:uno"} + for _, fqbn := range invalidFqbns { + _, err := ParseFQBN(fqbn) + require.Error(t, err) + } +} diff --git a/arduino/cores/packageindex/index.go b/internal/arduino/cores/packageindex/index.go similarity index 93% rename from arduino/cores/packageindex/index.go rename to internal/arduino/cores/packageindex/index.go index 61621ed4cca..18e70ce524b 100644 --- a/arduino/cores/packageindex/index.go +++ b/internal/arduino/cores/packageindex/index.go @@ -17,12 +17,13 @@ package packageindex import ( "encoding/json" + "errors" "fmt" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/resources" - "github.com/arduino/arduino-cli/arduino/security" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/security" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" easyjson "github.com/mailru/easyjson" "github.com/sirupsen/logrus" @@ -139,8 +140,6 @@ type indexHelp struct { Online string `json:"online,omitempty"` } -var tr = i18n.Tr - // MergeIntoPackages converts the Index data into a cores.Packages and merge them // with the existing contents of the cores.Packages passed as parameter. func (index Index) MergeIntoPackages(outPackages cores.Packages) { @@ -222,11 +221,11 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index { URL: pr.Platform.Package.URL, Email: pr.Platform.Package.Email, Platforms: []*indexPlatformRelease{{ - Name: pr.Platform.Name, + Name: pr.Name, Architecture: pr.Platform.Architecture, Version: pr.Version, - Deprecated: pr.Platform.Deprecated, - Category: pr.Platform.Category, + Deprecated: pr.Deprecated, + Category: pr.Category, URL: pr.Resource.URL, ArchiveFileName: pr.Resource.ArchiveFileName, Checksum: pr.Resource.Checksum, @@ -263,26 +262,23 @@ func (inPackage indexPackage) extractPackageIn(outPackages cores.Packages, trust func (inPlatformRelease indexPlatformRelease) extractPlatformIn(outPackage *cores.Package, trusted bool, isInstallJSON bool) error { outPlatform := outPackage.GetOrCreatePlatform(inPlatformRelease.Architecture) - // FIXME: shall we use the Name and Category of the latest release? or maybe move Name and Category in PlatformRelease? - outPlatform.Name = inPlatformRelease.Name - outPlatform.Category = inPlatformRelease.Category // If the variable `isInstallJSON` is false it means that the index we're reading is coming from the additional-urls. // Therefore, the `outPlatform.Indexed` will be set at `true`. outPlatform.Indexed = outPlatform.Indexed || !isInstallJSON - // If the Platform is installed before deprecation installed.json file does not include "deprecated" field. - // The installed.json is read during loading phase of an installed Platform, if the deprecated field is not found - // the package_index.json field would be overwritten and the deprecation info would be lost. - // This check prevents that behaviour. - if !outPlatform.Deprecated { + // If the latest platform release is deprecated, then deprecate the whole platform. + if outPlatform.Latest == nil || outPlatform.Latest.LessThan(inPlatformRelease.Version) { + outPlatform.Latest = inPlatformRelease.Version outPlatform.Deprecated = inPlatformRelease.Deprecated } size, err := inPlatformRelease.Size.Int64() if err != nil { - return fmt.Errorf(tr("invalid platform archive size: %s"), err) + return errors.New(i18n.Tr("invalid platform archive size: %s", err)) } outPlatformRelease := outPlatform.GetOrCreateRelease(inPlatformRelease.Version) + outPlatformRelease.Name = inPlatformRelease.Name + outPlatformRelease.Category = inPlatformRelease.Category outPlatformRelease.IsTrusted = trusted outPlatformRelease.Resource = &resources.DownloadResource{ ArchiveFileName: inPlatformRelease.ArchiveFileName, @@ -296,6 +292,7 @@ func (inPlatformRelease indexPlatformRelease) extractPlatformIn(outPackage *core outPlatformRelease.ToolDependencies = inPlatformRelease.extractToolDependencies() outPlatformRelease.DiscoveryDependencies = inPlatformRelease.extractDiscoveryDependencies() outPlatformRelease.MonitorDependencies = inPlatformRelease.extractMonitorDependencies() + outPlatformRelease.Deprecated = inPlatformRelease.Deprecated return nil } diff --git a/arduino/cores/packageindex/index_easyjson.go b/internal/arduino/cores/packageindex/index_easyjson.go similarity index 83% rename from arduino/cores/packageindex/index_easyjson.go rename to internal/arduino/cores/packageindex/index_easyjson.go index 7f47a9b62e2..e151cf9ede7 100644 --- a/arduino/cores/packageindex/index_easyjson.go +++ b/internal/arduino/cores/packageindex/index_easyjson.go @@ -19,7 +19,7 @@ var ( _ easyjson.Marshaler ) -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex(in *jlexer.Lexer, out *indexToolReleaseFlavour) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(in *jlexer.Lexer, out *indexToolReleaseFlavour) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -71,7 +71,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex(in in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex(out *jwriter.Writer, in indexToolReleaseFlavour) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(out *jwriter.Writer, in indexToolReleaseFlavour) { out.RawByte('{') first := true _ = first @@ -106,27 +106,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex(ou // MarshalJSON supports json.Marshaler interface func (v indexToolReleaseFlavour) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexToolReleaseFlavour) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexToolReleaseFlavour) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexToolReleaseFlavour) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(in *jlexer.Lexer, out *indexToolRelease) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(in *jlexer.Lexer, out *indexToolRelease) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -232,7 +232,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(out *jwriter.Writer, in indexToolRelease) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(out *jwriter.Writer, in indexToolRelease) { out.RawByte('{') first := true _ = first @@ -272,27 +272,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(o // MarshalJSON supports json.Marshaler interface func (v indexToolRelease) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexToolRelease) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexToolRelease) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexToolRelease) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(in *jlexer.Lexer, out *indexToolDependency) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(in *jlexer.Lexer, out *indexToolDependency) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -356,7 +356,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(out *jwriter.Writer, in indexToolDependency) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(out *jwriter.Writer, in indexToolDependency) { out.RawByte('{') first := true _ = first @@ -385,27 +385,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(o // MarshalJSON supports json.Marshaler interface func (v indexToolDependency) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexToolDependency) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexToolDependency) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexToolDependency) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(in *jlexer.Lexer, out *indexPlatformRelease) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(in *jlexer.Lexer, out *indexPlatformRelease) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -681,7 +681,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(out *jwriter.Writer, in indexPlatformRelease) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(out *jwriter.Writer, in indexPlatformRelease) { out.RawByte('{') first := true _ = first @@ -809,27 +809,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(o // MarshalJSON supports json.Marshaler interface func (v indexPlatformRelease) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexPlatformRelease) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexPlatformRelease) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexPlatformRelease) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(in *jlexer.Lexer, out *indexPackage) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(in *jlexer.Lexer, out *indexPackage) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1009,7 +1009,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(out *jwriter.Writer, in indexPackage) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(out *jwriter.Writer, in indexPackage) { out.RawByte('{') first := true _ = first @@ -1089,27 +1089,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(o // MarshalJSON supports json.Marshaler interface func (v indexPackage) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexPackage) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexPackage) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexPackage) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(in *jlexer.Lexer, out *indexMonitorDependency) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(in *jlexer.Lexer, out *indexMonitorDependency) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1149,7 +1149,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(out *jwriter.Writer, in indexMonitorDependency) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(out *jwriter.Writer, in indexMonitorDependency) { out.RawByte('{') first := true _ = first @@ -1169,27 +1169,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(o // MarshalJSON supports json.Marshaler interface func (v indexMonitorDependency) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexMonitorDependency) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexMonitorDependency) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexMonitorDependency) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(in *jlexer.Lexer, out *indexHelp) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(in *jlexer.Lexer, out *indexHelp) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1225,7 +1225,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(out *jwriter.Writer, in indexHelp) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(out *jwriter.Writer, in indexHelp) { out.RawByte('{') first := true _ = first @@ -1241,27 +1241,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(o // MarshalJSON supports json.Marshaler interface func (v indexHelp) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexHelp) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexHelp) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexHelp) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(in *jlexer.Lexer, out *indexDiscoveryDependency) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(in *jlexer.Lexer, out *indexDiscoveryDependency) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1301,7 +1301,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(out *jwriter.Writer, in indexDiscoveryDependency) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(out *jwriter.Writer, in indexDiscoveryDependency) { out.RawByte('{') first := true _ = first @@ -1321,27 +1321,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(o // MarshalJSON supports json.Marshaler interface func (v indexDiscoveryDependency) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexDiscoveryDependency) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexDiscoveryDependency) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexDiscoveryDependency) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(in *jlexer.Lexer, out *indexBoardID) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(in *jlexer.Lexer, out *indexBoardID) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1377,7 +1377,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(out *jwriter.Writer, in indexBoardID) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(out *jwriter.Writer, in indexBoardID) { out.RawByte('{') first := true _ = first @@ -1392,27 +1392,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(o // MarshalJSON supports json.Marshaler interface func (v indexBoardID) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexBoardID) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexBoardID) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexBoardID) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(in *jlexer.Lexer, out *indexBoard) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(in *jlexer.Lexer, out *indexBoard) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1494,7 +1494,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(out *jwriter.Writer, in indexBoard) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(out *jwriter.Writer, in indexBoard) { out.RawByte('{') first := true _ = first @@ -1523,27 +1523,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(o // MarshalJSON supports json.Marshaler interface func (v indexBoard) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexBoard) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexBoard) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexBoard) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(in *jlexer.Lexer, out *Index) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(in *jlexer.Lexer, out *Index) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1641,7 +1641,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex10( in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(out *jwriter.Writer, in Index) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(out *jwriter.Writer, in Index) { out.RawByte('{') first := true _ = first @@ -1676,23 +1676,23 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex10( // MarshalJSON supports json.Marshaler interface func (v Index) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v Index) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *Index) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *Index) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(l, v) } diff --git a/arduino/cores/packageindex/index_test.go b/internal/arduino/cores/packageindex/index_test.go similarity index 99% rename from arduino/cores/packageindex/index_test.go rename to internal/arduino/cores/packageindex/index_test.go index efb05c16aa0..cdc38022f21 100644 --- a/arduino/cores/packageindex/index_test.go +++ b/internal/arduino/cores/packageindex/index_test.go @@ -18,8 +18,8 @@ package packageindex import ( "testing" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/resources" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" semver "go.bug.st/relaxed-semver" @@ -91,11 +91,10 @@ func TestIndexFromPlatformRelease(t *testing.T) { Name: "serial-monitor", }, }, + Name: "Arduino AVR Boards", + Category: "Arduino", Platform: &cores.Platform{ - Name: "Arduino AVR Boards", Architecture: "avr", - Category: "Arduino", - Package: &cores.Package{ Name: "arduino", Maintainer: "Arduino", diff --git a/arduino/cores/packageindex/testdata/links b/internal/arduino/cores/packageindex/testdata/links similarity index 100% rename from arduino/cores/packageindex/testdata/links rename to internal/arduino/cores/packageindex/testdata/links diff --git a/arduino/cores/packageindex/testdata/package_LowPowerLab_index.json b/internal/arduino/cores/packageindex/testdata/package_LowPowerLab_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_LowPowerLab_index.json rename to internal/arduino/cores/packageindex/testdata/package_LowPowerLab_index.json diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json.1 b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json.1 similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json.1 rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json.1 diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MicroCore_index.json b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MicroCore_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MicroCore_index.json rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MicroCore_index.json diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json.1 b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json.1 similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json.1 rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json.1 diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MiniCore_index.json b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MiniCore_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MiniCore_index.json rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MiniCore_index.json diff --git a/arduino/cores/packageindex/testdata/package_MattairTech_index.json b/internal/arduino/cores/packageindex/testdata/package_MattairTech_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_MattairTech_index.json rename to internal/arduino/cores/packageindex/testdata/package_MattairTech_index.json diff --git a/arduino/cores/packageindex/testdata/package_NicoHood_HoodLoader2_index.json b/internal/arduino/cores/packageindex/testdata/package_NicoHood_HoodLoader2_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_NicoHood_HoodLoader2_index.json rename to internal/arduino/cores/packageindex/testdata/package_NicoHood_HoodLoader2_index.json diff --git a/arduino/cores/packageindex/testdata/package_XMegaForArduino_index.json b/internal/arduino/cores/packageindex/testdata/package_XMegaForArduino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_XMegaForArduino_index.json rename to internal/arduino/cores/packageindex/testdata/package_XMegaForArduino_index.json diff --git a/arduino/cores/packageindex/testdata/package_Zoubworld_index.json b/internal/arduino/cores/packageindex/testdata/package_Zoubworld_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_Zoubworld_index.json rename to internal/arduino/cores/packageindex/testdata/package_Zoubworld_index.json diff --git a/arduino/cores/packageindex/testdata/package_adafruit_index.json b/internal/arduino/cores/packageindex/testdata/package_adafruit_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_adafruit_index.json rename to internal/arduino/cores/packageindex/testdata/package_adafruit_index.json diff --git a/arduino/cores/packageindex/testdata/package_akafugu_index.json b/internal/arduino/cores/packageindex/testdata/package_akafugu_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_akafugu_index.json rename to internal/arduino/cores/packageindex/testdata/package_akafugu_index.json diff --git a/arduino/cores/packageindex/testdata/package_aloriumtech_index.json b/internal/arduino/cores/packageindex/testdata/package_aloriumtech_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_aloriumtech_index.json rename to internal/arduino/cores/packageindex/testdata/package_aloriumtech_index.json diff --git a/arduino/cores/packageindex/testdata/package_arachnidlabs.com_boards_index.json b/internal/arduino/cores/packageindex/testdata/package_arachnidlabs.com_boards_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_arachnidlabs.com_boards_index.json rename to internal/arduino/cores/packageindex/testdata/package_arachnidlabs.com_boards_index.json diff --git a/arduino/cores/packageindex/testdata/package_ardhat_index.json b/internal/arduino/cores/packageindex/testdata/package_ardhat_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_ardhat_index.json rename to internal/arduino/cores/packageindex/testdata/package_ardhat_index.json diff --git a/arduino/cores/packageindex/testdata/package_arduboy_index.json b/internal/arduino/cores/packageindex/testdata/package_arduboy_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_arduboy_index.json rename to internal/arduino/cores/packageindex/testdata/package_arduboy_index.json diff --git a/arduino/cores/packageindex/testdata/package_arrow_index.json b/internal/arduino/cores/packageindex/testdata/package_arrow_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_arrow_index.json rename to internal/arduino/cores/packageindex/testdata/package_arrow_index.json diff --git a/arduino/cores/packageindex/testdata/package_atflash_index.json b/internal/arduino/cores/packageindex/testdata/package_atflash_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_atflash_index.json rename to internal/arduino/cores/packageindex/testdata/package_atflash_index.json diff --git a/arduino/cores/packageindex/testdata/package_avdweb_nl_index.json b/internal/arduino/cores/packageindex/testdata/package_avdweb_nl_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_avdweb_nl_index.json rename to internal/arduino/cores/packageindex/testdata/package_avdweb_nl_index.json diff --git a/arduino/cores/packageindex/testdata/package_canique_index.json b/internal/arduino/cores/packageindex/testdata/package_canique_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_canique_index.json rename to internal/arduino/cores/packageindex/testdata/package_canique_index.json diff --git a/arduino/cores/packageindex/testdata/package_carlosefr_atmega_index.json b/internal/arduino/cores/packageindex/testdata/package_carlosefr_atmega_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_carlosefr_atmega_index.json rename to internal/arduino/cores/packageindex/testdata/package_carlosefr_atmega_index.json diff --git a/arduino/cores/packageindex/testdata/package_chipkit_index.json b/internal/arduino/cores/packageindex/testdata/package_chipkit_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_chipkit_index.json rename to internal/arduino/cores/packageindex/testdata/package_chipkit_index.json diff --git a/arduino/cores/packageindex/testdata/package_chipkit_index.json.1 b/internal/arduino/cores/packageindex/testdata/package_chipkit_index.json.1 similarity index 100% rename from arduino/cores/packageindex/testdata/package_chipkit_index.json.1 rename to internal/arduino/cores/packageindex/testdata/package_chipkit_index.json.1 diff --git a/arduino/cores/packageindex/testdata/package_clkdiv8_index.json b/internal/arduino/cores/packageindex/testdata/package_clkdiv8_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_clkdiv8_index.json rename to internal/arduino/cores/packageindex/testdata/package_clkdiv8_index.json diff --git a/arduino/cores/packageindex/testdata/package_codebendercc_ariadne-bootloader_index.json b/internal/arduino/cores/packageindex/testdata/package_codebendercc_ariadne-bootloader_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_codebendercc_ariadne-bootloader_index.json rename to internal/arduino/cores/packageindex/testdata/package_codebendercc_ariadne-bootloader_index.json diff --git a/arduino/cores/packageindex/testdata/package_cosa_index.json b/internal/arduino/cores/packageindex/testdata/package_cosa_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_cosa_index.json rename to internal/arduino/cores/packageindex/testdata/package_cosa_index.json diff --git a/arduino/cores/packageindex/testdata/package_cytron_index.json b/internal/arduino/cores/packageindex/testdata/package_cytron_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_cytron_index.json rename to internal/arduino/cores/packageindex/testdata/package_cytron_index.json diff --git a/arduino/cores/packageindex/testdata/package_damellis_attiny_index.json b/internal/arduino/cores/packageindex/testdata/package_damellis_attiny_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_damellis_attiny_index.json rename to internal/arduino/cores/packageindex/testdata/package_damellis_attiny_index.json diff --git a/arduino/cores/packageindex/testdata/package_dfrobot_index.json.invalid b/internal/arduino/cores/packageindex/testdata/package_dfrobot_index.json.invalid similarity index 100% rename from arduino/cores/packageindex/testdata/package_dfrobot_index.json.invalid rename to internal/arduino/cores/packageindex/testdata/package_dfrobot_index.json.invalid diff --git a/arduino/cores/packageindex/testdata/package_dfrobot_iot_mainboard.json.invalid b/internal/arduino/cores/packageindex/testdata/package_dfrobot_iot_mainboard.json.invalid similarity index 100% rename from arduino/cores/packageindex/testdata/package_dfrobot_iot_mainboard.json.invalid rename to internal/arduino/cores/packageindex/testdata/package_dfrobot_iot_mainboard.json.invalid diff --git a/arduino/cores/packageindex/testdata/package_digistump_index.json b/internal/arduino/cores/packageindex/testdata/package_digistump_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_digistump_index.json rename to internal/arduino/cores/packageindex/testdata/package_digistump_index.json diff --git a/arduino/cores/packageindex/testdata/package_drazzy.com_index.json b/internal/arduino/cores/packageindex/testdata/package_drazzy.com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_drazzy.com_index.json rename to internal/arduino/cores/packageindex/testdata/package_drazzy.com_index.json diff --git a/arduino/cores/packageindex/testdata/package_dwengo.org_dwenguino_index.json b/internal/arduino/cores/packageindex/testdata/package_dwengo.org_dwenguino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_dwengo.org_dwenguino_index.json rename to internal/arduino/cores/packageindex/testdata/package_dwengo.org_dwenguino_index.json diff --git a/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.5_index.json b/internal/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.5_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.5_index.json rename to internal/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.5_index.json diff --git a/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.6_index.json b/internal/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.6_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.6_index.json rename to internal/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.6_index.json diff --git a/arduino/cores/packageindex/testdata/package_engimusing_modules_index.json b/internal/arduino/cores/packageindex/testdata/package_engimusing_modules_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_engimusing_modules_index.json rename to internal/arduino/cores/packageindex/testdata/package_engimusing_modules_index.json diff --git a/arduino/cores/packageindex/testdata/package_esp32_index.json b/internal/arduino/cores/packageindex/testdata/package_esp32_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_esp32_index.json rename to internal/arduino/cores/packageindex/testdata/package_esp32_index.json diff --git a/arduino/cores/packageindex/testdata/package_esp32_index.json.1 b/internal/arduino/cores/packageindex/testdata/package_esp32_index.json.1 similarity index 100% rename from arduino/cores/packageindex/testdata/package_esp32_index.json.1 rename to internal/arduino/cores/packageindex/testdata/package_esp32_index.json.1 diff --git a/arduino/cores/packageindex/testdata/package_esp32_index.json.2 b/internal/arduino/cores/packageindex/testdata/package_esp32_index.json.2 similarity index 100% rename from arduino/cores/packageindex/testdata/package_esp32_index.json.2 rename to internal/arduino/cores/packageindex/testdata/package_esp32_index.json.2 diff --git a/arduino/cores/packageindex/testdata/package_esp8266com_index.json b/internal/arduino/cores/packageindex/testdata/package_esp8266com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_esp8266com_index.json rename to internal/arduino/cores/packageindex/testdata/package_esp8266com_index.json diff --git a/arduino/cores/packageindex/testdata/package_femtocow_attiny_index.json b/internal/arduino/cores/packageindex/testdata/package_femtocow_attiny_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_femtocow_attiny_index.json rename to internal/arduino/cores/packageindex/testdata/package_femtocow_attiny_index.json diff --git a/arduino/cores/packageindex/testdata/package_ftduino_index.json b/internal/arduino/cores/packageindex/testdata/package_ftduino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_ftduino_index.json rename to internal/arduino/cores/packageindex/testdata/package_ftduino_index.json diff --git a/arduino/cores/packageindex/testdata/package_goldilocks_index.json b/internal/arduino/cores/packageindex/testdata/package_goldilocks_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_goldilocks_index.json rename to internal/arduino/cores/packageindex/testdata/package_goldilocks_index.json diff --git a/arduino/cores/packageindex/testdata/package_hidnseek_boot_index.json b/internal/arduino/cores/packageindex/testdata/package_hidnseek_boot_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_hidnseek_boot_index.json rename to internal/arduino/cores/packageindex/testdata/package_hidnseek_boot_index.json diff --git a/arduino/cores/packageindex/testdata/package_infineon_index.json b/internal/arduino/cores/packageindex/testdata/package_infineon_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_infineon_index.json rename to internal/arduino/cores/packageindex/testdata/package_infineon_index.json diff --git a/arduino/cores/packageindex/testdata/package_intorobot_index.json b/internal/arduino/cores/packageindex/testdata/package_intorobot_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_intorobot_index.json rename to internal/arduino/cores/packageindex/testdata/package_intorobot_index.json diff --git a/arduino/cores/packageindex/testdata/package_iot2000_index.json b/internal/arduino/cores/packageindex/testdata/package_iot2000_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_iot2000_index.json rename to internal/arduino/cores/packageindex/testdata/package_iot2000_index.json diff --git a/arduino/cores/packageindex/testdata/package_iotcore_ide-1.6.6_index.json b/internal/arduino/cores/packageindex/testdata/package_iotcore_ide-1.6.6_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_iotcore_ide-1.6.6_index.json rename to internal/arduino/cores/packageindex/testdata/package_iotcore_ide-1.6.6_index.json diff --git a/arduino/cores/packageindex/testdata/package_ioteam_index.json b/internal/arduino/cores/packageindex/testdata/package_ioteam_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_ioteam_index.json rename to internal/arduino/cores/packageindex/testdata/package_ioteam_index.json diff --git a/arduino/cores/packageindex/testdata/package_iteaduino_lite_index.json b/internal/arduino/cores/packageindex/testdata/package_iteaduino_lite_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_iteaduino_lite_index.json rename to internal/arduino/cores/packageindex/testdata/package_iteaduino_lite_index.json diff --git a/arduino/cores/packageindex/testdata/package_konekt_index.json b/internal/arduino/cores/packageindex/testdata/package_konekt_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_konekt_index.json rename to internal/arduino/cores/packageindex/testdata/package_konekt_index.json diff --git a/arduino/cores/packageindex/testdata/package_lattuino_index.json b/internal/arduino/cores/packageindex/testdata/package_lattuino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_lattuino_index.json rename to internal/arduino/cores/packageindex/testdata/package_lattuino_index.json diff --git a/arduino/cores/packageindex/testdata/package_lauszus_sanguino_index.json b/internal/arduino/cores/packageindex/testdata/package_lauszus_sanguino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_lauszus_sanguino_index.json rename to internal/arduino/cores/packageindex/testdata/package_lauszus_sanguino_index.json diff --git a/arduino/cores/packageindex/testdata/package_leonardomiliani.com_index.json b/internal/arduino/cores/packageindex/testdata/package_leonardomiliani.com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_leonardomiliani.com_index.json rename to internal/arduino/cores/packageindex/testdata/package_leonardomiliani.com_index.json diff --git a/arduino/cores/packageindex/testdata/package_macchina_index.json b/internal/arduino/cores/packageindex/testdata/package_macchina_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_macchina_index.json rename to internal/arduino/cores/packageindex/testdata/package_macchina_index.json diff --git a/arduino/cores/packageindex/testdata/package_maxim_index.json b/internal/arduino/cores/packageindex/testdata/package_maxim_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_maxim_index.json rename to internal/arduino/cores/packageindex/testdata/package_maxim_index.json diff --git a/arduino/cores/packageindex/testdata/package_mkr1000_index.json b/internal/arduino/cores/packageindex/testdata/package_mkr1000_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_mkr1000_index.json rename to internal/arduino/cores/packageindex/testdata/package_mkr1000_index.json diff --git a/arduino/cores/packageindex/testdata/package_mtk_linkit_index.json b/internal/arduino/cores/packageindex/testdata/package_mtk_linkit_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_mtk_linkit_index.json rename to internal/arduino/cores/packageindex/testdata/package_mtk_linkit_index.json diff --git a/arduino/cores/packageindex/testdata/package_mtk_linkit_smart_7688_index.json b/internal/arduino/cores/packageindex/testdata/package_mtk_linkit_smart_7688_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_mtk_linkit_smart_7688_index.json rename to internal/arduino/cores/packageindex/testdata/package_mtk_linkit_smart_7688_index.json diff --git a/arduino/cores/packageindex/testdata/package_nRF5_boards_index.json b/internal/arduino/cores/packageindex/testdata/package_nRF5_boards_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_nRF5_boards_index.json rename to internal/arduino/cores/packageindex/testdata/package_nRF5_boards_index.json diff --git a/arduino/cores/packageindex/testdata/package_navspark_index.json b/internal/arduino/cores/packageindex/testdata/package_navspark_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_navspark_index.json rename to internal/arduino/cores/packageindex/testdata/package_navspark_index.json diff --git a/arduino/cores/packageindex/testdata/package_olimex_avr_index.json b/internal/arduino/cores/packageindex/testdata/package_olimex_avr_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_olimex_avr_index.json rename to internal/arduino/cores/packageindex/testdata/package_olimex_avr_index.json diff --git a/arduino/cores/packageindex/testdata/package_olimex_pic_index.json b/internal/arduino/cores/packageindex/testdata/package_olimex_pic_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_olimex_pic_index.json rename to internal/arduino/cores/packageindex/testdata/package_olimex_pic_index.json diff --git a/arduino/cores/packageindex/testdata/package_olimex_stm_index.json b/internal/arduino/cores/packageindex/testdata/package_olimex_stm_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_olimex_stm_index.json rename to internal/arduino/cores/packageindex/testdata/package_olimex_stm_index.json diff --git a/arduino/cores/packageindex/testdata/package_omc_index.json b/internal/arduino/cores/packageindex/testdata/package_omc_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_omc_index.json rename to internal/arduino/cores/packageindex/testdata/package_omc_index.json diff --git a/arduino/cores/packageindex/testdata/package_openpanzer_index.json b/internal/arduino/cores/packageindex/testdata/package_openpanzer_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_openpanzer_index.json rename to internal/arduino/cores/packageindex/testdata/package_openpanzer_index.json diff --git a/arduino/cores/packageindex/testdata/package_opentracker_index.json b/internal/arduino/cores/packageindex/testdata/package_opentracker_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_opentracker_index.json rename to internal/arduino/cores/packageindex/testdata/package_opentracker_index.json diff --git a/arduino/cores/packageindex/testdata/package_oshlab_breadboard_index.json b/internal/arduino/cores/packageindex/testdata/package_oshlab_breadboard_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_oshlab_breadboard_index.json rename to internal/arduino/cores/packageindex/testdata/package_oshlab_breadboard_index.json diff --git a/arduino/cores/packageindex/testdata/package_panstamp_index.json b/internal/arduino/cores/packageindex/testdata/package_panstamp_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_panstamp_index.json rename to internal/arduino/cores/packageindex/testdata/package_panstamp_index.json diff --git a/arduino/cores/packageindex/testdata/package_per1234_wirino_index.json b/internal/arduino/cores/packageindex/testdata/package_per1234_wirino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_per1234_wirino_index.json rename to internal/arduino/cores/packageindex/testdata/package_per1234_wirino_index.json diff --git a/arduino/cores/packageindex/testdata/package_project_laika.com_index.json b/internal/arduino/cores/packageindex/testdata/package_project_laika.com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_project_laika.com_index.json rename to internal/arduino/cores/packageindex/testdata/package_project_laika.com_index.json diff --git a/arduino/cores/packageindex/testdata/package_quirkbot.com_index.json b/internal/arduino/cores/packageindex/testdata/package_quirkbot.com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_quirkbot.com_index.json rename to internal/arduino/cores/packageindex/testdata/package_quirkbot.com_index.json diff --git a/arduino/cores/packageindex/testdata/package_radino_radino32_index.json b/internal/arduino/cores/packageindex/testdata/package_radino_radino32_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_radino_radino32_index.json rename to internal/arduino/cores/packageindex/testdata/package_radino_radino32_index.json diff --git a/arduino/cores/packageindex/testdata/package_realtek.com_ameba_index.json b/internal/arduino/cores/packageindex/testdata/package_realtek.com_ameba_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_realtek.com_ameba_index.json rename to internal/arduino/cores/packageindex/testdata/package_realtek.com_ameba_index.json diff --git a/arduino/cores/packageindex/testdata/package_redbear_index.json.tobefixed b/internal/arduino/cores/packageindex/testdata/package_redbear_index.json.tobefixed similarity index 100% rename from arduino/cores/packageindex/testdata/package_redbear_index.json.tobefixed rename to internal/arduino/cores/packageindex/testdata/package_redbear_index.json.tobefixed diff --git a/arduino/cores/packageindex/testdata/package_redbearlab_index.json b/internal/arduino/cores/packageindex/testdata/package_redbearlab_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_redbearlab_index.json rename to internal/arduino/cores/packageindex/testdata/package_redbearlab_index.json diff --git a/arduino/cores/packageindex/testdata/package_rfduino_index.json b/internal/arduino/cores/packageindex/testdata/package_rfduino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_rfduino_index.json rename to internal/arduino/cores/packageindex/testdata/package_rfduino_index.json diff --git a/arduino/cores/packageindex/testdata/package_rig_index.json b/internal/arduino/cores/packageindex/testdata/package_rig_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_rig_index.json rename to internal/arduino/cores/packageindex/testdata/package_rig_index.json diff --git a/arduino/cores/packageindex/testdata/package_rnc_index.json b/internal/arduino/cores/packageindex/testdata/package_rnc_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_rnc_index.json rename to internal/arduino/cores/packageindex/testdata/package_rnc_index.json diff --git a/arduino/cores/packageindex/testdata/package_seeeduino_index.json b/internal/arduino/cores/packageindex/testdata/package_seeeduino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_seeeduino_index.json rename to internal/arduino/cores/packageindex/testdata/package_seeeduino_index.json diff --git a/arduino/cores/packageindex/testdata/package_simba_avr_index.json b/internal/arduino/cores/packageindex/testdata/package_simba_avr_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_simba_avr_index.json rename to internal/arduino/cores/packageindex/testdata/package_simba_avr_index.json diff --git a/arduino/cores/packageindex/testdata/package_simba_esp_index.json b/internal/arduino/cores/packageindex/testdata/package_simba_esp_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_simba_esp_index.json rename to internal/arduino/cores/packageindex/testdata/package_simba_esp_index.json diff --git a/arduino/cores/packageindex/testdata/package_simba_sam_index.json b/internal/arduino/cores/packageindex/testdata/package_simba_sam_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_simba_sam_index.json rename to internal/arduino/cores/packageindex/testdata/package_simba_sam_index.json diff --git a/arduino/cores/packageindex/testdata/package_sodaq_index.json b/internal/arduino/cores/packageindex/testdata/package_sodaq_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_sodaq_index.json rename to internal/arduino/cores/packageindex/testdata/package_sodaq_index.json diff --git a/arduino/cores/packageindex/testdata/package_sodaq_samd_index.json b/internal/arduino/cores/packageindex/testdata/package_sodaq_samd_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_sodaq_samd_index.json rename to internal/arduino/cores/packageindex/testdata/package_sodaq_samd_index.json diff --git a/arduino/cores/packageindex/testdata/package_sparkfun_index.json b/internal/arduino/cores/packageindex/testdata/package_sparkfun_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_sparkfun_index.json rename to internal/arduino/cores/packageindex/testdata/package_sparkfun_index.json diff --git a/arduino/cores/packageindex/testdata/package_stm_index.json b/internal/arduino/cores/packageindex/testdata/package_stm_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_stm_index.json rename to internal/arduino/cores/packageindex/testdata/package_stm_index.json diff --git a/arduino/cores/packageindex/testdata/package_talk2.wisen.com_index.json b/internal/arduino/cores/packageindex/testdata/package_talk2.wisen.com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_talk2.wisen.com_index.json rename to internal/arduino/cores/packageindex/testdata/package_talk2.wisen.com_index.json diff --git a/arduino/cores/packageindex/testdata/package_thomasonw_ATmegaxxM1-C1_index.json b/internal/arduino/cores/packageindex/testdata/package_thomasonw_ATmegaxxM1-C1_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_thomasonw_ATmegaxxM1-C1_index.json rename to internal/arduino/cores/packageindex/testdata/package_thomasonw_ATmegaxxM1-C1_index.json diff --git a/arduino/cores/packageindex/testdata/package_tkj_balanduino_index.json b/internal/arduino/cores/packageindex/testdata/package_tkj_balanduino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_tkj_balanduino_index.json rename to internal/arduino/cores/packageindex/testdata/package_tkj_balanduino_index.json diff --git a/arduino/cores/packageindex/testdata/package_tl7788_index.json b/internal/arduino/cores/packageindex/testdata/package_tl7788_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_tl7788_index.json rename to internal/arduino/cores/packageindex/testdata/package_tl7788_index.json diff --git a/arduino/cores/packageindex/testdata/package_udoo_index.json b/internal/arduino/cores/packageindex/testdata/package_udoo_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_udoo_index.json rename to internal/arduino/cores/packageindex/testdata/package_udoo_index.json diff --git a/arduino/cores/packageindex/testdata/package_zevero_avr_boot_index.json b/internal/arduino/cores/packageindex/testdata/package_zevero_avr_boot_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_zevero_avr_boot_index.json rename to internal/arduino/cores/packageindex/testdata/package_zevero_avr_boot_index.json diff --git a/arduino/cores/packagemanager/download.go b/internal/arduino/cores/packagemanager/download.go similarity index 69% rename from arduino/cores/packagemanager/download.go rename to internal/arduino/cores/packagemanager/download.go index f3a5877c8a6..05cc0f70047 100644 --- a/arduino/cores/packagemanager/download.go +++ b/internal/arduino/cores/packagemanager/download.go @@ -16,13 +16,13 @@ package packagemanager import ( - "fmt" + "context" + "errors" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/pkg/errors" - "go.bug.st/downloader/v2" semver "go.bug.st/relaxed-semver" ) @@ -73,37 +73,37 @@ func (pme *Explorer) FindPlatformRelease(ref *PlatformReference) *cores.Platform func (pme *Explorer) FindPlatformReleaseDependencies(item *PlatformReference) (*cores.PlatformRelease, []*cores.ToolRelease, error) { targetPackage, exists := pme.packages[item.Package] if !exists { - return nil, nil, fmt.Errorf(tr("package %s not found"), item.Package) + return nil, nil, errors.New(i18n.Tr("package %s not found", item.Package)) } platform, exists := targetPackage.Platforms[item.PlatformArchitecture] if !exists { - return nil, nil, fmt.Errorf(tr("platform %[1]s not found in package %[2]s"), item.PlatformArchitecture, targetPackage.String()) + return nil, nil, errors.New(i18n.Tr("platform %[1]s not found in package %[2]s", item.PlatformArchitecture, targetPackage)) } var release *cores.PlatformRelease if item.PlatformVersion != nil { release = platform.FindReleaseWithVersion(item.PlatformVersion) if release == nil { - return nil, nil, fmt.Errorf(tr("required version %[1]s not found for platform %[2]s"), item.PlatformVersion, platform.String()) + return nil, nil, errors.New(i18n.Tr("required version %[1]s not found for platform %[2]s", item.PlatformVersion, platform)) } } else { - release = platform.GetLatestRelease() + release = platform.GetLatestCompatibleRelease() if release == nil { - return nil, nil, fmt.Errorf(tr("platform %s has no available releases"), platform.String()) + return nil, nil, errors.New(i18n.Tr("platform is not available for your OS")) } } // replaces "latest" with latest version too toolDeps, err := pme.packages.GetPlatformReleaseToolDependencies(release) if err != nil { - return nil, nil, fmt.Errorf(tr("getting tool dependencies for platform %[1]s: %[2]s"), release.String(), err) + return nil, nil, errors.New(i18n.Tr("getting tool dependencies for platform %[1]s: %[2]s", release, err)) } // discovery dependencies differ from normal tool since we always want to use the latest // available version for the platform package discoveryDependencies, err := pme.packages.GetPlatformReleaseDiscoveryDependencies(release) if err != nil { - return nil, nil, fmt.Errorf(tr("getting discovery dependencies for platform %[1]s: %[2]s"), release.String(), err) + return nil, nil, errors.New(i18n.Tr("getting discovery dependencies for platform %[1]s: %[2]s", release, err)) } toolDeps = append(toolDeps, discoveryDependencies...) @@ -111,7 +111,7 @@ func (pme *Explorer) FindPlatformReleaseDependencies(item *PlatformReference) (* // available version for the platform package monitorDependencies, err := pme.packages.GetPlatformReleaseMonitorDependencies(release) if err != nil { - return nil, nil, fmt.Errorf(tr("getting monitor dependencies for platform %[1]s: %[2]s"), release.String(), err) + return nil, nil, errors.New(i18n.Tr("getting monitor dependencies for platform %[1]s: %[2]s", release, err)) } toolDeps = append(toolDeps, monitorDependencies...) @@ -120,21 +120,21 @@ func (pme *Explorer) FindPlatformReleaseDependencies(item *PlatformReference) (* // DownloadToolRelease downloads a ToolRelease. If the tool is already downloaded a nil Downloader // is returned. Uses the given downloader configuration for download, or the default config if nil. -func (pme *Explorer) DownloadToolRelease(tool *cores.ToolRelease, config *downloader.Config, progressCB rpc.DownloadProgressCB) error { +func (pme *Explorer) DownloadToolRelease(ctx context.Context, tool *cores.ToolRelease, progressCB rpc.DownloadProgressCB) error { resource := tool.GetCompatibleFlavour() if resource == nil { - return &arduino.FailedDownloadError{ - Message: tr("Error downloading tool %s", tool), - Cause: errors.New(tr("no versions available for the current OS, try contacting %s", tool.Tool.Package.Email))} + return &cmderrors.FailedDownloadError{ + Message: i18n.Tr("Error downloading tool %s", tool), + Cause: errors.New(i18n.Tr("no versions available for the current OS, try contacting %s", tool.Tool.Package.Email))} } - return resource.Download(pme.DownloadDir, config, tool.String(), progressCB, "") + return resource.Download(ctx, pme.DownloadDir, pme.downloaderConfig, tool.String(), progressCB, "") } // DownloadPlatformRelease downloads a PlatformRelease. If the platform is already downloaded a // nil Downloader is returned. -func (pme *Explorer) DownloadPlatformRelease(platform *cores.PlatformRelease, config *downloader.Config, progressCB rpc.DownloadProgressCB) error { +func (pme *Explorer) DownloadPlatformRelease(ctx context.Context, platform *cores.PlatformRelease, progressCB rpc.DownloadProgressCB) error { if platform.Resource == nil { - return &arduino.PlatformNotFoundError{Platform: platform.String()} + return &cmderrors.PlatformNotFoundError{Platform: platform.String()} } - return platform.Resource.Download(pme.DownloadDir, config, platform.String(), progressCB, "") + return platform.Resource.Download(ctx, pme.DownloadDir, pme.downloaderConfig, platform.String(), progressCB, "") } diff --git a/arduino/cores/packagemanager/identify.go b/internal/arduino/cores/packagemanager/identify.go similarity index 96% rename from arduino/cores/packagemanager/identify.go rename to internal/arduino/cores/packagemanager/identify.go index 22d8382cd67..6b84495dc58 100644 --- a/arduino/cores/packagemanager/identify.go +++ b/internal/arduino/cores/packagemanager/identify.go @@ -16,7 +16,7 @@ package packagemanager import ( - "github.com/arduino/arduino-cli/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores" properties "github.com/arduino/go-properties-orderedmap" ) diff --git a/arduino/cores/packagemanager/install_uninstall.go b/internal/arduino/cores/packagemanager/install_uninstall.go similarity index 71% rename from arduino/cores/packagemanager/install_uninstall.go rename to internal/arduino/cores/packagemanager/install_uninstall.go index 0d8332cb2be..7fb9b44dc02 100644 --- a/arduino/cores/packagemanager/install_uninstall.go +++ b/internal/arduino/cores/packagemanager/install_uninstall.go @@ -17,23 +17,24 @@ package packagemanager import ( "bytes" + "context" "encoding/json" - "fmt" + "errors" "runtime" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packageindex" - "github.com/arduino/arduino-cli/executils" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packageindex" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" ) // DownloadAndInstallPlatformUpgrades runs a full installation process to upgrade the given platform. // This method takes care of downloading missing archives, upgrading platforms and tools, and // removing the previously installed platform/tools that are no longer needed after the upgrade. func (pme *Explorer) DownloadAndInstallPlatformUpgrades( + ctx context.Context, platformRef *PlatformReference, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, @@ -41,29 +42,29 @@ func (pme *Explorer) DownloadAndInstallPlatformUpgrades( skipPreUninstall bool, ) (*cores.PlatformRelease, error) { if platformRef.PlatformVersion != nil { - return nil, &arduino.InvalidArgumentError{Message: tr("Upgrade doesn't accept parameters with version")} + return nil, &cmderrors.InvalidArgumentError{Message: i18n.Tr("Upgrade doesn't accept parameters with version")} } // Search the latest version for all specified platforms platform := pme.FindPlatform(platformRef) if platform == nil { - return nil, &arduino.PlatformNotFoundError{Platform: platformRef.String()} + return nil, &cmderrors.PlatformNotFoundError{Platform: platformRef.String()} } installed := pme.GetInstalledPlatformRelease(platform) if installed == nil { - return nil, &arduino.PlatformNotFoundError{Platform: platformRef.String()} + return nil, &cmderrors.PlatformNotFoundError{Platform: platformRef.String()} } - latest := platform.GetLatestRelease() + latest := platform.GetLatestCompatibleRelease() if !latest.Version.GreaterThan(installed.Version) { - return installed, &arduino.PlatformAlreadyAtTheLatestVersionError{Platform: platformRef.String()} + return installed, &cmderrors.PlatformAlreadyAtTheLatestVersionError{Platform: platformRef.String()} } platformRef.PlatformVersion = latest.Version platformRelease, tools, err := pme.FindPlatformReleaseDependencies(platformRef) if err != nil { - return nil, &arduino.PlatformNotFoundError{Platform: platformRef.String()} + return nil, &cmderrors.PlatformNotFoundError{Platform: platformRef.String()} } - if err := pme.DownloadAndInstallPlatformAndTools(platformRelease, tools, downloadCB, taskCB, skipPostInstall, skipPreUninstall); err != nil { + if err := pme.DownloadAndInstallPlatformAndTools(ctx, platformRelease, tools, downloadCB, taskCB, skipPostInstall, skipPreUninstall); err != nil { return nil, err } @@ -74,6 +75,7 @@ func (pme *Explorer) DownloadAndInstallPlatformUpgrades( // This method takes care of downloading missing archives, installing/upgrading platforms and tools, and // removing the previously installed platform/tools that are no longer needed after the upgrade. func (pme *Explorer) DownloadAndInstallPlatformAndTools( + ctx context.Context, platformRelease *cores.PlatformRelease, requiredTools []*cores.ToolRelease, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, skipPostInstall bool, skipPreUninstall bool) error { @@ -84,20 +86,20 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools( for _, tool := range requiredTools { if tool.IsInstalled() { log.WithField("tool", tool).Warn("Tool already installed") - taskCB(&rpc.TaskProgress{Name: tr("Tool %s already installed", tool), Completed: true}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Tool %s already installed", tool), Completed: true}) } else { toolsToInstall = append(toolsToInstall, tool) } } // Package download - taskCB(&rpc.TaskProgress{Name: tr("Downloading packages")}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Downloading packages")}) for _, tool := range toolsToInstall { - if err := pme.DownloadToolRelease(tool, nil, downloadCB); err != nil { + if err := pme.DownloadToolRelease(ctx, tool, downloadCB); err != nil { return err } } - if err := pme.DownloadPlatformRelease(platformRelease, nil, downloadCB); err != nil { + if err := pme.DownloadPlatformRelease(ctx, platformRelease, downloadCB); err != nil { return err } taskCB(&rpc.TaskProgress{Completed: true}) @@ -114,11 +116,11 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools( if installed == nil { // No version of this platform is installed log.Info("Installing platform") - taskCB(&rpc.TaskProgress{Name: tr("Installing platform %s", platformRelease)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Installing platform %s", platformRelease)}) } else { // A platform with a different version is already installed log.Info("Replacing platform " + installed.String()) - taskCB(&rpc.TaskProgress{Name: tr("Replacing platform %[1]s with %[2]s", installed, platformRelease)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Replacing platform %[1]s with %[2]s", installed, platformRelease)}) platformRef := &PlatformReference{ Package: platformRelease.Platform.Package.Name, PlatformArchitecture: platformRelease.Platform.Architecture, @@ -131,14 +133,14 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools( var err error _, installedTools, err = pme.FindPlatformReleaseDependencies(platformRef) if err != nil { - return &arduino.NotFoundError{Message: tr("Can't find dependencies for platform %s", platformRef), Cause: err} + return &cmderrors.NotFoundError{Message: i18n.Tr("Can't find dependencies for platform %s", platformRef), Cause: err} } } // Install if err := pme.InstallPlatform(platformRelease); err != nil { log.WithError(err).Error("Cannot install platform") - return &arduino.FailedInstallError{Message: tr("Cannot install platform"), Cause: err} + return &cmderrors.FailedInstallError{Message: i18n.Tr("Cannot install platform"), Cause: err} } // If upgrading remove previous release @@ -148,20 +150,20 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools( // In case of error try to rollback if uninstallErr != nil { log.WithError(uninstallErr).Error("Error upgrading platform.") - taskCB(&rpc.TaskProgress{Message: tr("Error upgrading platform: %s", uninstallErr)}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Error upgrading platform: %s", uninstallErr)}) // Rollback if err := pme.UninstallPlatform(platformRelease, taskCB, skipPreUninstall); err != nil { log.WithError(err).Error("Error rolling-back changes.") - taskCB(&rpc.TaskProgress{Message: tr("Error rolling-back changes: %s", err)}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Error rolling-back changes: %s", err)}) } - return &arduino.FailedInstallError{Message: tr("Cannot upgrade platform"), Cause: uninstallErr} + return &cmderrors.FailedInstallError{Message: i18n.Tr("Cannot upgrade platform"), Cause: uninstallErr} } // Uninstall unused tools for _, tool := range installedTools { - taskCB(&rpc.TaskProgress{Name: tr("Uninstalling %s, tool is no more required", tool)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Uninstalling %s, tool is no more required", tool)}) if !pme.IsToolRequired(tool) { pme.UninstallTool(tool, taskCB, skipPreUninstall) } @@ -172,24 +174,24 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools( // Perform post install if !skipPostInstall { log.Info("Running post_install script") - taskCB(&rpc.TaskProgress{Message: tr("Configuring platform.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Configuring platform.")}) if !platformRelease.IsInstalled() { - return errors.New(tr("platform not installed")) + return errors.New(i18n.Tr("platform not installed")) } stdout, stderr, err := pme.RunPreOrPostScript(platformRelease.InstallDir, "post_install") skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stdout), Completed: true}) skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stderr), Completed: true}) if err != nil { - taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot configure platform: %s", err), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("WARNING cannot configure platform: %s", err), Completed: true}) } } else { log.Info("Skipping platform configuration.") - taskCB(&rpc.TaskProgress{Message: tr("Skipping platform configuration.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Skipping platform configuration.")}) } log.Info("Platform installed") - taskCB(&rpc.TaskProgress{Message: tr("Platform %s installed", platformRelease), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Platform %s installed", platformRelease), Completed: true}) return nil } @@ -206,7 +208,7 @@ func (pme *Explorer) InstallPlatform(platformRelease *cores.PlatformRelease) err // InstallPlatformInDirectory installs a specific release of a platform in a specific directory. func (pme *Explorer) InstallPlatformInDirectory(platformRelease *cores.PlatformRelease, destDir *paths.Path) error { if err := platformRelease.Resource.Install(pme.DownloadDir, pme.tempDir, destDir); err != nil { - return errors.Errorf(tr("installing platform %[1]s: %[2]s"), platformRelease, err) + return errors.New(i18n.Tr("installing platform %[1]s: %[2]s", platformRelease, err)) } if d, err := destDir.Abs(); err == nil { platformRelease.InstallDir = d @@ -214,7 +216,7 @@ func (pme *Explorer) InstallPlatformInDirectory(platformRelease *cores.PlatformR return err } if err := pme.cacheInstalledJSON(platformRelease); err != nil { - return errors.Errorf(tr("creating installed.json in %[1]s: %[2]s"), platformRelease.InstallDir, err) + return errors.New(i18n.Tr("creating installed.json in %[1]s: %[2]s", platformRelease.InstallDir, err)) } return nil } @@ -239,7 +241,7 @@ func (pme *Explorer) RunPreOrPostScript(installDir *paths.Path, prefix string) ( } script := installDir.Join(scriptFilename) if script.Exist() && script.IsNotDir() { - cmd, err := executils.NewProcessFromPath(pme.GetEnvVarsForSpawnedProcess(), script) + cmd, err := paths.NewProcessFromPath(pme.GetEnvVarsForSpawnedProcess(), script) if err != nil { return []byte{}, []byte{}, err } @@ -275,45 +277,45 @@ func (pme *Explorer) UninstallPlatform(platformRelease *cores.PlatformRelease, t log := pme.log.WithField("platform", platformRelease) log.Info("Uninstalling platform") - taskCB(&rpc.TaskProgress{Name: tr("Uninstalling %s", platformRelease)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Uninstalling %s", platformRelease)}) if platformRelease.InstallDir == nil { - err := fmt.Errorf(tr("platform not installed")) + err := errors.New(i18n.Tr("platform not installed")) log.WithError(err).Error("Error uninstalling") - return &arduino.FailedUninstallError{Message: err.Error()} + return &cmderrors.FailedUninstallError{Message: err.Error()} } // Safety measure if !pme.IsManagedPlatformRelease(platformRelease) { - err := fmt.Errorf(tr("%s is not managed by package manager"), platformRelease) + err := errors.New(i18n.Tr("%s is not managed by package manager", platformRelease)) log.WithError(err).Error("Error uninstalling") - return &arduino.FailedUninstallError{Message: err.Error()} + return &cmderrors.FailedUninstallError{Message: err.Error()} } if !skipPreUninstall { log.Info("Running pre_uninstall script") - taskCB(&rpc.TaskProgress{Message: tr("Running pre_uninstall script.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Running pre_uninstall script.")}) stdout, stderr, err := pme.RunPreOrPostScript(platformRelease.InstallDir, "pre_uninstall") skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stdout), Completed: true}) skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stderr), Completed: true}) if err != nil { - taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot run pre_uninstall script: %s", err), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("WARNING cannot run pre_uninstall script: %s", err), Completed: true}) } } else { log.Info("Skipping pre_uninstall script.") - taskCB(&rpc.TaskProgress{Message: tr("Skipping pre_uninstall script.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Skipping pre_uninstall script.")}) } if err := platformRelease.InstallDir.RemoveAll(); err != nil { - err = fmt.Errorf(tr("removing platform files: %s"), err) + err = errors.New(i18n.Tr("removing platform files: %s", err)) log.WithError(err).Error("Error uninstalling") - return &arduino.FailedUninstallError{Message: err.Error()} + return &cmderrors.FailedUninstallError{Message: err.Error()} } platformRelease.InstallDir = nil log.Info("Platform uninstalled") - taskCB(&rpc.TaskProgress{Message: tr("Platform %s uninstalled", platformRelease), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Platform %s uninstalled", platformRelease), Completed: true}) return nil } @@ -323,17 +325,18 @@ func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Task if toolRelease.IsInstalled() { log.Warn("Tool already installed") - taskCB(&rpc.TaskProgress{Name: tr("Tool %s already installed", toolRelease), Completed: true}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Tool %s already installed", toolRelease), Completed: true}) return nil } log.Info("Installing tool") - taskCB(&rpc.TaskProgress{Name: tr("Installing %s", toolRelease)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Installing %s", toolRelease)}) toolResource := toolRelease.GetCompatibleFlavour() if toolResource == nil { - return fmt.Errorf(tr("no compatible version of %[1]s tools found for the current os, try contacting %[2]s"), - toolRelease.Tool.Name, toolRelease.Tool.Package.Email) + return errors.New( + i18n.Tr("no compatible version of %[1]s tools found for the current os, try contacting %[2]s", + toolRelease.Tool.Name, toolRelease.Tool.Package.Email)) } destDir := pme.PackagesDir.Join( toolRelease.Tool.Package.Name, @@ -343,7 +346,7 @@ func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Task err := toolResource.Install(pme.DownloadDir, pme.tempDir, destDir) if err != nil { log.WithError(err).Warn("Cannot install tool") - return &arduino.FailedInstallError{Message: tr("Cannot install tool %s", toolRelease), Cause: err} + return &cmderrors.FailedInstallError{Message: i18n.Tr("Cannot install tool %s", toolRelease), Cause: err} } if d, err := destDir.Abs(); err == nil { toolRelease.InstallDir = d @@ -353,19 +356,19 @@ func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Task // Perform post install if !skipPostInstall { log.Info("Running tool post_install script") - taskCB(&rpc.TaskProgress{Message: tr("Configuring tool.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Configuring tool.")}) stdout, stderr, err := pme.RunPreOrPostScript(toolRelease.InstallDir, "post_install") skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stdout)}) skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stderr)}) if err != nil { - taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot configure tool: %s", err)}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("WARNING cannot configure tool: %s", err)}) } } else { log.Info("Skipping tool configuration.") - taskCB(&rpc.TaskProgress{Message: tr("Skipping tool configuration.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Skipping tool configuration.")}) } log.Info("Tool installed") - taskCB(&rpc.TaskProgress{Message: tr("%s installed", toolRelease), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("%s installed", toolRelease), Completed: true}) return nil } @@ -393,32 +396,32 @@ func (pme *Explorer) UninstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Ta log.Info("Uninstalling tool") if toolRelease.InstallDir == nil { - return fmt.Errorf(tr("tool not installed")) + return errors.New(i18n.Tr("tool not installed")) } // Safety measure if !pme.IsManagedToolRelease(toolRelease) { - err := &arduino.FailedUninstallError{Message: tr("tool %s is not managed by package manager", toolRelease)} + err := &cmderrors.FailedUninstallError{Message: i18n.Tr("tool %s is not managed by package manager", toolRelease)} log.WithError(err).Error("Error uninstalling") return err } if !skipPreUninstall { log.Info("Running pre_uninstall script") - taskCB(&rpc.TaskProgress{Message: tr("Running pre_uninstall script.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Running pre_uninstall script.")}) stdout, stderr, err := pme.RunPreOrPostScript(toolRelease.InstallDir, "pre_uninstall") skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stdout), Completed: true}) skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stderr), Completed: true}) if err != nil { - taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot run pre_uninstall script: %s", err), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("WARNING cannot run pre_uninstall script: %s", err), Completed: true}) } } else { log.Info("Skipping pre_uninstall script.") - taskCB(&rpc.TaskProgress{Message: tr("Skipping pre_uninstall script.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Skipping pre_uninstall script.")}) } if err := toolRelease.InstallDir.RemoveAll(); err != nil { - err = &arduino.FailedUninstallError{Message: err.Error()} + err = &cmderrors.FailedUninstallError{Message: err.Error()} log.WithError(err).Error("Error uninstalling") return err } @@ -426,7 +429,7 @@ func (pme *Explorer) UninstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Ta toolRelease.InstallDir = nil log.Info("Tool uninstalled") - taskCB(&rpc.TaskProgress{Message: tr("Tool %s uninstalled", toolRelease), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Tool %s uninstalled", toolRelease), Completed: true}) return nil } @@ -448,7 +451,7 @@ func (pme *Explorer) IsToolRequired(toolRelease *cores.ToolRelease) bool { func skipEmptyMessageTaskProgressCB(taskCB rpc.TaskProgressCB) rpc.TaskProgressCB { return func(msg *rpc.TaskProgress) { - if msg != nil && len(msg.Message) == 0 { + if msg != nil && len(msg.GetMessage()) == 0 { return } taskCB(msg) diff --git a/arduino/cores/packagemanager/loader.go b/internal/arduino/cores/packagemanager/loader.go similarity index 74% rename from arduino/cores/packagemanager/loader.go rename to internal/arduino/cores/packagemanager/loader.go index 2644a9f22e2..14e1d6df912 100644 --- a/arduino/cores/packagemanager/loader.go +++ b/internal/arduino/cores/packagemanager/loader.go @@ -16,32 +16,30 @@ package packagemanager import ( + "errors" "fmt" - "os" - "path/filepath" "regexp" "strconv" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" semver "go.bug.st/relaxed-semver" ) // LoadHardware read all plaforms from the configured paths func (pm *Builder) LoadHardware() []error { - hardwareDirs := configuration.HardwareDirectories(configuration.Settings) - merr := pm.LoadHardwareFromDirectories(hardwareDirs) - - bundleToolDirs := configuration.BuiltinToolsDirectories(configuration.Settings) - merr = append(merr, pm.LoadToolsFromBundleDirectories(bundleToolDirs)...) - - return merr + hardwareDirs := paths.NewPathList() + if pm.PackagesDir.IsDir() { + hardwareDirs.Add(pm.PackagesDir) + } + if pm.userPackagesDir != nil && pm.userPackagesDir.IsDir() { + hardwareDirs.Add(pm.userPackagesDir) + } + return pm.LoadHardwareFromDirectories(hardwareDirs) } // LoadHardwareFromDirectories load plaforms from a set of directories @@ -58,17 +56,17 @@ func (pm *Builder) LoadHardwareFromDirectory(path *paths.Path) []error { var merr []error pm.log.Infof("Loading hardware from: %s", path) if err := path.ToAbs(); err != nil { - return append(merr, fmt.Errorf("%s: %w", tr("finding absolute path of %s", path), err)) + return append(merr, fmt.Errorf("%s: %w", i18n.Tr("finding absolute path of %s", path), err)) } if path.IsNotDir() { - return append(merr, errors.New(tr("%s is not a directory", path))) + return append(merr, errors.New(i18n.Tr("%s is not a directory", path))) } // Scan subdirs packagersPaths, err := path.ReadDir() if err != nil { - return append(merr, fmt.Errorf("%s: %w", tr("reading directory %s", path), err)) + return append(merr, fmt.Errorf("%s: %w", i18n.Tr("reading directory %s", path), err)) } packagersPaths.FilterOutHiddenFiles() packagersPaths.FilterDirs() @@ -97,7 +95,7 @@ func (pm *Builder) LoadHardwareFromDirectory(path *paths.Path) []error { // Follow symlinks err := packagerPath.FollowSymLink() // ex: .arduino15/packages/arduino/ if err != nil { - merr = append(merr, fmt.Errorf("%s: %w", tr("following symlink %s", path), err)) + merr = append(merr, fmt.Errorf("%s: %w", i18n.Tr("following symlink %s", path), err)) continue } @@ -150,7 +148,7 @@ func (pm *Builder) loadPlatforms(targetPackage *cores.Package, packageDir *paths platformsDirs, err := packageDir.ReadDir() if err != nil { - return append(merr, fmt.Errorf("%s: %w", tr("reading directory %s", packageDir), err)) + return append(merr, fmt.Errorf("%s: %w", i18n.Tr("reading directory %s", packageDir), err)) } // A platform can only be inside a directory, thus we skip everything else. @@ -178,7 +176,7 @@ func (pm *Builder) loadPlatforms(targetPackage *cores.Package, packageDir *paths func (pm *Builder) loadPlatform(targetPackage *cores.Package, architecture string, platformPath *paths.Path) error { // This is not a platform if platformPath.IsNotDir() { - return errors.New(tr("path is not a platform directory: %s", platformPath)) + return errors.New(i18n.Tr("path is not a platform directory: %s", platformPath)) } // There are two possible platform directory structures: @@ -187,67 +185,27 @@ func (pm *Builder) loadPlatform(targetPackage *cores.Package, architecture strin // We identify them by checking where is the bords.txt file possibleBoardTxtPath := platformPath.Join("boards.txt") if exist, err := possibleBoardTxtPath.ExistCheck(); err != nil { - return fmt.Errorf("%s: %w", tr("looking for boards.txt in %s", possibleBoardTxtPath), err) + return fmt.Errorf("%s: %w", i18n.Tr("looking for boards.txt in %s", possibleBoardTxtPath), err) } else if exist { // case: ARCHITECTURE/boards.txt platformTxtPath := platformPath.Join("platform.txt") platformProperties, err := properties.SafeLoad(platformTxtPath.String()) if err != nil { - return fmt.Errorf("%s: %w", tr("loading platform.txt"), err) + return fmt.Errorf("%s: %w", i18n.Tr("loading platform.txt"), err) } versionString := platformProperties.ExpandPropsInString(platformProperties.Get("version")) version, err := semver.Parse(versionString) if err != nil { - return &arduino.InvalidVersionError{Cause: fmt.Errorf("%s: %s", platformTxtPath, err)} - } - - // Check if package_bundled_index.json exists. - // This is used indirectly by the Java IDE since it's necessary for the arduino-builder - // to find cores bundled with that version of the IDE. - // TODO: This piece of logic MUST be removed as soon as the Java IDE stops using the arduino-builder. - isIDEBundled := false - packageBundledIndexPath := platformPath.Parent().Parent().Join("package_index_bundled.json") - if packageBundledIndexPath.Exist() { - // particular case: ARCHITECTURE/boards.txt with package_bundled_index.json - - // this is an unversioned Platform with a package_index_bundled.json that - // gives information about the version and tools needed - - // Parse the bundled index and merge to the general index - index, err := pm.LoadPackageIndexFromFile(packageBundledIndexPath) - if err != nil { - return fmt.Errorf("%s: %w", tr("parsing IDE bundled index"), err) - } - - // Now export the bundled index in a temporary core.Packages to retrieve the bundled package version - tmp := cores.NewPackages() - index.MergeIntoPackages(tmp) - if tmpPackage := tmp.GetOrCreatePackage(targetPackage.Name); tmpPackage == nil { - pm.log.Warnf("Can't determine bundle platform version for %s", targetPackage.Name) - } else if tmpPlatform := tmpPackage.GetOrCreatePlatform(architecture); tmpPlatform == nil { - pm.log.Warnf("Can't determine bundle platform version for %s:%s", targetPackage.Name, architecture) - } else if tmpPlatformRelease := tmpPlatform.GetLatestRelease(); tmpPlatformRelease == nil { - pm.log.Warnf("Can't determine bundle platform version for %s:%s, no valid release found", targetPackage.Name, architecture) - } else { - version = tmpPlatformRelease.Version - } - - isIDEBundled = true + return &cmderrors.InvalidVersionError{Cause: fmt.Errorf("%s: %s", platformTxtPath, err)} } platform := targetPackage.GetOrCreatePlatform(architecture) - if !isIDEBundled { - platform.ManuallyInstalled = true - } + platform.ManuallyInstalled = true release := platform.GetOrCreateRelease(version) - release.IsIDEBundled = isIDEBundled - if isIDEBundled { - pm.log.Infof("Package is built-in") - } if err := pm.loadPlatformRelease(release, platformPath); err != nil { - return fmt.Errorf("%s: %w", tr("loading platform release %s", release), err) + return fmt.Errorf("%s: %w", i18n.Tr("loading platform release %s", release), err) } pm.log.WithField("platform", release).Infof("Loaded platform") @@ -257,25 +215,25 @@ func (pm *Builder) loadPlatform(targetPackage *cores.Package, architecture strin versionDirs, err := platformPath.ReadDir() if err != nil { - return fmt.Errorf("%s: %w", tr("reading directory %s", platformPath), err) + return fmt.Errorf("%s: %w", i18n.Tr("reading directory %s", platformPath), err) } versionDirs.FilterDirs() versionDirs.FilterOutHiddenFiles() for _, versionDir := range versionDirs { if exist, err := versionDir.Join("boards.txt").ExistCheck(); err != nil { - return fmt.Errorf("%s: %w", tr("opening boards.txt"), err) + return fmt.Errorf("%s: %w", i18n.Tr("opening boards.txt"), err) } else if !exist { continue } version, err := semver.Parse(versionDir.Base()) if err != nil { - return fmt.Errorf("%s: %w", tr("invalid version directory %s", versionDir), err) + return fmt.Errorf("%s: %w", i18n.Tr("invalid version directory %s", versionDir), err) } platform := targetPackage.GetOrCreatePlatform(architecture) release := platform.GetOrCreateRelease(version) if err := pm.loadPlatformRelease(release, versionDir); err != nil { - return fmt.Errorf("%s: %w", tr("loading platform release %s", release), err) + return fmt.Errorf("%s: %w", i18n.Tr("loading platform release %s", release), err) } pm.log.WithField("platform", release).Infof("Loaded platform") } @@ -287,32 +245,35 @@ func (pm *Builder) loadPlatform(targetPackage *cores.Package, architecture strin func (pm *Builder) loadPlatformRelease(platform *cores.PlatformRelease, path *paths.Path) error { platform.InstallDir = path - // Some useful paths - installedJSONPath := path.Join("installed.json") - platformTxtPath := path.Join("platform.txt") - platformTxtLocalPath := path.Join("platform.local.txt") - programmersTxtPath := path.Join("programmers.txt") - // If the installed.json file is found load it, this is done to handle the // case in which the platform's index and its url have been deleted locally, // if we don't load it some information about the platform is lost + installedJSONPath := path.Join("installed.json") + platform.Timestamps.AddFile(installedJSONPath) if installedJSONPath.Exist() { if _, err := pm.LoadPackageIndexFromFile(installedJSONPath); err != nil { - return fmt.Errorf(tr("loading %[1]s: %[2]s"), installedJSONPath, err) + return errors.New(i18n.Tr("loading %[1]s: %[2]s", installedJSONPath, err)) } } + // TODO: why CLONE? + platform.Properties = platform.Properties.Clone() + // Create platform properties - platform.Properties = platform.Properties.Clone() // TODO: why CLONE? - if p, err := properties.SafeLoad(platformTxtPath.String()); err == nil { + platformTxtPath := path.Join("platform.txt") + platform.Timestamps.AddFile(platformTxtPath) + if p, err := properties.SafeLoadFromPath(platformTxtPath); err == nil { platform.Properties.Merge(p) } else { - return fmt.Errorf(tr("loading %[1]s: %[2]s"), platformTxtPath, err) + return errors.New(i18n.Tr("loading %[1]s: %[2]s", platformTxtPath, err)) } - if p, err := properties.SafeLoad(platformTxtLocalPath.String()); err == nil { + + platformTxtLocalPath := path.Join("platform.local.txt") + platform.Timestamps.AddFile(platformTxtLocalPath) + if p, err := properties.SafeLoadFromPath(platformTxtLocalPath); err == nil { platform.Properties.Merge(p) } else { - return fmt.Errorf(tr("loading %[1]s: %[2]s"), platformTxtLocalPath, err) + return errors.New(i18n.Tr("loading %[1]s: %[2]s", platformTxtLocalPath, err)) } if platform.Properties.SubTree("pluggable_discovery").Size() > 0 || platform.Properties.SubTree("pluggable_monitor").Size() > 0 { @@ -323,19 +284,21 @@ func (pm *Builder) loadPlatformRelease(platform *cores.PlatformRelease, path *pa platform.Properties.Set("pluggable_monitor.required.serial", "builtin:serial-monitor") } - if platform.Platform.Name == "" { + if platform.Name == "" { if name, ok := platform.Properties.GetOk("name"); ok { - platform.Platform.Name = name + platform.Name = name } else { // If the platform.txt file doesn't exist for this platform and it's not in any // package index there is no way of retrieving its name, so we build one using // the available information, that is the packager name and the architecture. - platform.Platform.Name = fmt.Sprintf("%s-%s", platform.Platform.Package.Name, platform.Platform.Architecture) + platform.Name = fmt.Sprintf("%s-%s", platform.Platform.Package.Name, platform.Platform.Architecture) } } // Create programmers properties - if programmersProperties, err := properties.SafeLoad(programmersTxtPath.String()); err == nil { + programmersTxtPath := path.Join("programmers.txt") + platform.Timestamps.AddFile(programmersTxtPath) + if programmersProperties, err := properties.SafeLoadFromPath(programmersTxtPath); err == nil { for programmerID, programmerProps := range programmersProperties.FirstLevelOf() { if !platform.PluggableDiscoveryAware { convertUploadToolsToPluggableDiscovery(programmerProps) @@ -348,7 +311,7 @@ func (pm *Builder) loadPlatformRelease(platform *cores.PlatformRelease, path *pa } if err := pm.loadBoards(platform); err != nil { - return fmt.Errorf(tr("loading boards: %s"), err) + return errors.New(i18n.Tr("loading boards: %s", err)) } if !platform.PluggableDiscoveryAware { @@ -360,7 +323,7 @@ func (pm *Builder) loadPlatformRelease(platform *cores.PlatformRelease, path *pa for protocol, ref := range platform.Properties.SubTree("pluggable_monitor.required").AsMap() { split := strings.Split(ref, ":") if len(split) != 2 { - return fmt.Errorf(tr("invalid pluggable monitor reference: %s"), ref) + return errors.New(i18n.Tr("invalid pluggable monitor reference: %s", ref)) } pm.log.WithField("protocol", protocol).WithField("tool", ref).Info("Adding monitor tool") platform.Monitors[protocol] = &cores.MonitorDependency{ @@ -454,16 +417,18 @@ func (pm *Builder) loadProgrammer(programmerProperties *properties.Map) *cores.P func (pm *Builder) loadBoards(platform *cores.PlatformRelease) error { if platform.InstallDir == nil { - return fmt.Errorf(tr("platform not installed")) + return errors.New(i18n.Tr("platform not installed")) } boardsTxtPath := platform.InstallDir.Join("boards.txt") + platform.Timestamps.AddFile(boardsTxtPath) allBoardsProperties, err := properties.LoadFromPath(boardsTxtPath) if err != nil { return err } boardsLocalTxtPath := platform.InstallDir.Join("boards.local.txt") + platform.Timestamps.AddFile(boardsLocalTxtPath) if boardsLocalProperties, err := properties.SafeLoadFromPath(boardsLocalTxtPath); err == nil { allBoardsProperties.Merge(boardsLocalProperties) } else { @@ -614,7 +579,7 @@ func (pm *Builder) LoadToolsFromPackageDir(targetPackage *cores.Package, toolsPa toolsPaths, err := toolsPath.ReadDir() if err != nil { - return append(merr, fmt.Errorf("%s: %w", tr("reading directory %s", toolsPath), err)) + return append(merr, fmt.Errorf("%s: %w", i18n.Tr("reading directory %s", toolsPath), err)) } toolsPaths.FilterDirs() toolsPaths.FilterOutHiddenFiles() @@ -622,7 +587,7 @@ func (pm *Builder) LoadToolsFromPackageDir(targetPackage *cores.Package, toolsPa name := toolPath.Base() tool := targetPackage.GetOrCreateTool(name) if err = pm.loadToolReleasesFromTool(tool, toolPath); err != nil { - merr = append(merr, fmt.Errorf("%s: %w", tr("loading tool release in %s", toolPath), err)) + merr = append(merr, fmt.Errorf("%s: %w", i18n.Tr("loading tool release in %s", toolPath), err)) } } return merr @@ -647,9 +612,9 @@ func (pm *Builder) loadToolReleasesFromTool(tool *cores.Tool, toolPath *paths.Pa func (pm *Builder) loadToolReleaseFromDirectory(tool *cores.Tool, version *semver.RelaxedVersion, toolReleasePath *paths.Path) error { if absToolReleasePath, err := toolReleasePath.Abs(); err != nil { - return errors.New(tr("error opening %s", absToolReleasePath)) + return errors.New(i18n.Tr("error opening %s", absToolReleasePath)) } else if !absToolReleasePath.IsDir() { - return errors.New(tr("%s is not a directory", absToolReleasePath)) + return errors.New(i18n.Tr("%s is not a directory", absToolReleasePath)) } else { toolRelease := tool.GetOrCreateRelease(version) toolRelease.InstallDir = absToolReleasePath @@ -658,83 +623,6 @@ func (pm *Builder) loadToolReleaseFromDirectory(tool *cores.Tool, version *semve } } -// LoadToolsFromBundleDirectories FIXMEDOC -func (pm *Builder) LoadToolsFromBundleDirectories(dirs paths.PathList) []error { - var merr []error - for _, dir := range dirs { - if err := pm.LoadToolsFromBundleDirectory(dir); err != nil { - merr = append(merr, fmt.Errorf("%s: %w", tr("loading bundled tools from %s", dir), err)) - } - } - return merr -} - -// LoadToolsFromBundleDirectory FIXMEDOC -func (pm *Builder) LoadToolsFromBundleDirectory(toolsPath *paths.Path) error { - pm.log.Infof("Loading tools from bundle dir: %s", toolsPath) - - // We scan toolsPath content to find a "builtin_tools_versions.txt", if such file exists - // then the all the tools are available in the same directory, mixed together, and their - // name and version are written in the "builtin_tools_versions.txt" file. - // If no "builtin_tools_versions.txt" is found, then the directory structure is the classic - // TOOLSPATH/TOOL-NAME/TOOL-VERSION and it will be parsed as such and associated to an - // "unnamed" packager. - - // TODO: get rid of "builtin_tools_versions.txt" - - // Search for builtin_tools_versions.txt - builtinToolsVersionsTxtPath := "" - findBuiltInToolsVersionsTxt := func(currentPath string, info os.FileInfo, err error) error { - if err != nil { - // Ignore errors - return nil - } - if builtinToolsVersionsTxtPath != "" { - return filepath.SkipDir - } - if info.Name() == "builtin_tools_versions.txt" { - builtinToolsVersionsTxtPath = currentPath - return filepath.SkipDir - } - return nil - } - if err := filepath.Walk(toolsPath.String(), findBuiltInToolsVersionsTxt); err != nil { - return fmt.Errorf(tr("searching for builtin_tools_versions.txt in %[1]s: %[2]s"), toolsPath, err) - } - - if builtinToolsVersionsTxtPath != "" { - // If builtin_tools_versions.txt is found create tools based on the info - // contained in that file - pm.log.Infof("Found builtin_tools_versions.txt") - toolPath, err := paths.New(builtinToolsVersionsTxtPath).Parent().Abs() - if err != nil { - return fmt.Errorf(tr("getting parent dir of %[1]s: %[2]s"), builtinToolsVersionsTxtPath, err) - } - - all, err := properties.Load(builtinToolsVersionsTxtPath) - if err != nil { - return fmt.Errorf(tr("reading %[1]s: %[2]s"), builtinToolsVersionsTxtPath, err) - } - - for packager, toolsData := range all.FirstLevelOf() { - targetPackage := pm.packages.GetOrCreatePackage(packager) - - for toolName, toolVersion := range toolsData.AsMap() { - tool := targetPackage.GetOrCreateTool(toolName) - version := semver.ParseRelaxed(toolVersion) - release := tool.GetOrCreateRelease(version) - release.InstallDir = toolPath - pm.log.WithField("tool", release).Infof("Loaded tool") - } - } - } else { - // otherwise load the tools inside the unnamed package - unnamedPackage := pm.packages.GetOrCreatePackage("") - pm.LoadToolsFromPackageDir(unnamedPackage, toolsPath) - } - return nil -} - // LoadDiscoveries load all discoveries for all loaded platforms // Returns error if: // * A PluggableDiscovery instance can't be created @@ -753,15 +641,14 @@ func (pme *Explorer) LoadDiscoveries() []error { func (pme *Explorer) loadDiscovery(id string) error { tool := pme.GetTool(id) if tool == nil { - return errors.New(tr("discovery %s not found", id)) + return errors.New(i18n.Tr("discovery %s not found", id)) } toolRelease := tool.GetLatestInstalled() if toolRelease == nil { - return errors.New(tr("discovery %s not installed", id)) + return errors.New(i18n.Tr("discovery %s not installed", id)) } discoveryPath := toolRelease.InstallDir.Join(tool.Name).String() - d := discovery.New(id, discoveryPath) - pme.discoveryManager.Add(d) + pme.discoveryManager.Add(id, discoveryPath) return nil } @@ -822,7 +709,7 @@ func (pme *Explorer) loadDiscoveries(release *cores.PlatformRelease) []error { for discoveryID, props := range discoveryIDs { pattern, ok := props.GetOk("pattern") if !ok { - merr = append(merr, errors.New(tr("can't find pattern for discovery with id %s", discoveryID))) + merr = append(merr, errors.New(i18n.Tr("can't find pattern for discovery with id %s", discoveryID))) continue } configuration := release.Properties.Clone() @@ -837,8 +724,7 @@ func (pme *Explorer) loadDiscoveries(release *cores.PlatformRelease) []error { if cmdArgs, err := properties.SplitQuotedString(cmd, `"'`, true); err != nil { merr = append(merr, err) } else { - d := discovery.New(discoveryID, cmdArgs...) - pme.discoveryManager.Add(d) + pme.discoveryManager.Add(discoveryID, cmdArgs...) } } diff --git a/arduino/cores/packagemanager/loader_test.go b/internal/arduino/cores/packagemanager/loader_test.go similarity index 99% rename from arduino/cores/packagemanager/loader_test.go rename to internal/arduino/cores/packagemanager/loader_test.go index d0d41992179..5d394280aa8 100644 --- a/arduino/cores/packagemanager/loader_test.go +++ b/internal/arduino/cores/packagemanager/loader_test.go @@ -21,6 +21,7 @@ import ( "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" "github.com/stretchr/testify/require" + "go.bug.st/downloader/v2" semver "go.bug.st/relaxed-semver" ) @@ -174,7 +175,7 @@ func TestLoadDiscoveries(t *testing.T) { defer fakePath.RemoveAll() createTestPackageManager := func() *PackageManager { - pmb := NewBuilder(fakePath, fakePath, fakePath, fakePath, "test") + pmb := NewBuilder(fakePath, fakePath, nil, fakePath, fakePath, "test", downloader.GetDefaultConfig()) pack := pmb.packages.GetOrCreatePackage("arduino") // ble-discovery tool tool := pack.GetOrCreateTool("ble-discovery") diff --git a/arduino/cores/packagemanager/package_manager.go b/internal/arduino/cores/packagemanager/package_manager.go similarity index 86% rename from arduino/cores/packagemanager/package_manager.go rename to internal/arduino/cores/packagemanager/package_manager.go index 7773b407109..2821b23ddb4 100644 --- a/arduino/cores/packagemanager/package_manager.go +++ b/internal/arduino/cores/packagemanager/package_manager.go @@ -16,27 +16,28 @@ package packagemanager import ( - "fmt" + "errors" "net/url" "os" "path" "path/filepath" + "slices" "strconv" "strings" "sync" "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packageindex" - "github.com/arduino/arduino-cli/arduino/discovery/discoverymanager" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packageindex" + "github.com/arduino/arduino-cli/internal/arduino/discovery/discoverymanager" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" paths "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" "github.com/arduino/go-timeutils" - "github.com/pkg/errors" "github.com/sirupsen/logrus" + "go.bug.st/downloader/v2" semver "go.bug.st/relaxed-semver" ) @@ -53,11 +54,13 @@ type PackageManager struct { log logrus.FieldLogger IndexDir *paths.Path PackagesDir *paths.Path + userPackagesDir *paths.Path DownloadDir *paths.Path tempDir *paths.Path profile *sketch.Profile discoveryManager *discoverymanager.DiscoveryManager userAgent string + downloaderConfig downloader.Config } // Builder is used to create a new PackageManager. The builder @@ -70,20 +73,20 @@ type Builder PackageManager // job is completed. type Explorer PackageManager -var tr = i18n.Tr - // NewBuilder returns a new Builder -func NewBuilder(indexDir, packagesDir, downloadDir, tempDir *paths.Path, userAgent string) *Builder { +func NewBuilder(indexDir, packagesDir, userPackagesDir, downloadDir, tempDir *paths.Path, userAgent string, downloaderConfig downloader.Config) *Builder { return &Builder{ log: logrus.StandardLogger(), packages: cores.NewPackages(), IndexDir: indexDir, PackagesDir: packagesDir, + userPackagesDir: userPackagesDir, DownloadDir: downloadDir, tempDir: tempDir, packagesCustomGlobalProperties: properties.NewMap(), - discoveryManager: discoverymanager.New(), + discoveryManager: discoverymanager.New(userAgent), userAgent: userAgent, + downloaderConfig: downloaderConfig, } } @@ -96,6 +99,7 @@ func (pmb *Builder) BuildIntoExistingPackageManager(target *PackageManager) { target.packages = pmb.packages target.IndexDir = pmb.IndexDir target.PackagesDir = pmb.PackagesDir + target.userPackagesDir = pmb.userPackagesDir target.DownloadDir = pmb.DownloadDir target.tempDir = pmb.tempDir target.packagesCustomGlobalProperties = pmb.packagesCustomGlobalProperties @@ -112,6 +116,7 @@ func (pmb *Builder) Build() *PackageManager { packages: pmb.packages, IndexDir: pmb.IndexDir, PackagesDir: pmb.PackagesDir, + userPackagesDir: pmb.userPackagesDir, DownloadDir: pmb.DownloadDir, tempDir: pmb.tempDir, packagesCustomGlobalProperties: pmb.packagesCustomGlobalProperties, @@ -121,13 +126,50 @@ func (pmb *Builder) Build() *PackageManager { } } +// calculate Compatible PlatformRelease +func (pmb *Builder) calculateCompatibleReleases() { + for _, op := range pmb.packages { + for _, p := range op.Platforms { + for _, pr := range p.Releases { + platformHasAllCompatibleTools := func() bool { + for _, td := range pr.ToolDependencies { + if td == nil { + return false + } + + _, ok := pmb.packages[td.ToolPackager] + if !ok { + return false + } + tool := pmb.packages[td.ToolPackager].Tools[td.ToolName] + if tool == nil { + return false + } + tr := tool.Releases[td.ToolVersion.NormalizedString()] + if tr == nil { + return false + } + + if tr.GetCompatibleFlavour() == nil { + return false + } + } + return true + } + pr.Compatible = platformHasAllCompatibleTools() + } + } + } +} + // NewBuilder creates a Builder with the same configuration // of this PackageManager. A "commit" function callback is returned: calling // this function will make the builder write the new configuration into this // PackageManager. func (pm *PackageManager) NewBuilder() (builder *Builder, commit func()) { - pmb := NewBuilder(pm.IndexDir, pm.PackagesDir, pm.DownloadDir, pm.tempDir, pm.userAgent) + pmb := NewBuilder(pm.IndexDir, pm.PackagesDir, pm.userPackagesDir, pm.DownloadDir, pm.tempDir, pm.userAgent, pm.downloaderConfig) return pmb, func() { + pmb.calculateCompatibleReleases() pmb.BuildIntoExistingPackageManager(pm) } } @@ -149,6 +191,7 @@ func (pm *PackageManager) NewExplorer() (explorer *Explorer, release func()) { profile: pm.profile, discoveryManager: pm.discoveryManager, userAgent: pm.userAgent, + downloaderConfig: pm.downloaderConfig, }, pm.packagesLock.RUnlock } @@ -192,8 +235,8 @@ func (pme *Explorer) GetCustomGlobalProperties() *properties.Map { } // FindPlatformReleaseProvidingBoardsWithVidPid FIXMEDOC -func (pme *Explorer) FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid string) []*cores.PlatformRelease { - res := []*cores.PlatformRelease{} +func (pme *Explorer) FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid string) []*cores.Platform { + res := []*cores.Platform{} for _, targetPackage := range pme.packages { for _, targetPlatform := range targetPackage.Platforms { platformRelease := targetPlatform.GetLatestRelease() @@ -202,7 +245,7 @@ func (pme *Explorer) FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid strin } for _, boardManifest := range platformRelease.BoardsManifest { if boardManifest.HasUsbID(vid, pid) { - res = append(res, platformRelease) + res = append(res, targetPlatform) break } } @@ -249,7 +292,7 @@ func (pme *Explorer) FindBoardsWithID(id string) []*cores.Board { func (pme *Explorer) FindBoardWithFQBN(fqbnIn string) (*cores.Board, error) { fqbn, err := cores.ParseFQBN(fqbnIn) if err != nil { - return nil, fmt.Errorf(tr("parsing fqbn: %s"), err) + return nil, errors.New(i18n.Tr("parsing fqbn: %s", err)) } _, _, board, _, _, err := pme.ResolveFQBN(fqbn) @@ -283,32 +326,32 @@ func (pme *Explorer) ResolveFQBN(fqbn *cores.FQBN) ( targetPackage := pme.packages[fqbn.Package] if targetPackage == nil { return nil, nil, nil, nil, nil, - fmt.Errorf(tr("unknown package %s"), fqbn.Package) + errors.New(i18n.Tr("unknown package %s", fqbn.Package)) } // Find platform platform := targetPackage.Platforms[fqbn.PlatformArch] if platform == nil { return targetPackage, nil, nil, nil, nil, - fmt.Errorf(tr("unknown platform %s:%s"), targetPackage, fqbn.PlatformArch) + errors.New(i18n.Tr("unknown platform %s:%s", targetPackage, fqbn.PlatformArch)) } boardPlatformRelease := pme.GetInstalledPlatformRelease(platform) if boardPlatformRelease == nil { return targetPackage, nil, nil, nil, nil, - fmt.Errorf(tr("platform %s is not installed"), platform) + errors.New(i18n.Tr("platform %s is not installed", platform)) } // Find board board := boardPlatformRelease.Boards[fqbn.BoardID] if board == nil { return targetPackage, boardPlatformRelease, nil, nil, nil, - fmt.Errorf(tr("board %s not found"), fqbn.StringWithoutConfig()) + errors.New(i18n.Tr("board %s not found", fqbn.StringWithoutConfig())) } boardBuildProperties, err := board.GetBuildProperties(fqbn) if err != nil { return targetPackage, boardPlatformRelease, board, nil, nil, - fmt.Errorf(tr("getting build properties for board %[1]s: %[2]s"), board, err) + errors.New(i18n.Tr("getting build properties for board %[1]s: %[2]s", board, err)) } // Determine the platform used for the build and the variant (in case the board refers @@ -397,7 +440,8 @@ func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *pr // core and variant cannot refer to two different platforms if referredCore != "" && referredVariant != "" && referredCore != referredVariant { return "", nil, "", nil, - fmt.Errorf(tr("'build.core' and 'build.variant' refer to different platforms: %[1]s and %[2]s"), referredCore+":"+core, referredVariant+":"+variant) + errors.New(i18n.Tr("'build.core' and 'build.variant' refer to different platforms: %[1]s and %[2]s", + referredCore+":"+core, referredVariant+":"+variant)) } // extract the referred platform @@ -410,17 +454,17 @@ func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *pr referredPackage := pme.packages[referredPackageName] if referredPackage == nil { return "", nil, "", nil, - fmt.Errorf(tr("missing package %[1]s referenced by board %[2]s"), referredPackageName, fqbn) + errors.New(i18n.Tr("missing package %[1]s referenced by board %[2]s", referredPackageName, fqbn)) } referredPlatform := referredPackage.Platforms[fqbn.PlatformArch] if referredPlatform == nil { return "", nil, "", nil, - fmt.Errorf(tr("missing platform %[1]s:%[2]s referenced by board %[3]s"), referredPackageName, fqbn.PlatformArch, fqbn) + errors.New(i18n.Tr("missing platform %[1]s:%[2]s referenced by board %[3]s", referredPackageName, fqbn.PlatformArch, fqbn)) } referredPlatformRelease = pme.GetInstalledPlatformRelease(referredPlatform) if referredPlatformRelease == nil { return "", nil, "", nil, - fmt.Errorf(tr("missing platform release %[1]s:%[2]s referenced by board %[3]s"), referredPackageName, fqbn.PlatformArch, fqbn) + errors.New(i18n.Tr("missing platform release %[1]s:%[2]s referenced by board %[3]s", referredPackageName, fqbn.PlatformArch, fqbn)) } } @@ -441,7 +485,7 @@ func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *pr func (pmb *Builder) LoadPackageIndex(URL *url.URL) error { indexFileName := path.Base(URL.Path) if indexFileName == "." || indexFileName == "" { - return &arduino.InvalidURLError{Cause: errors.New(URL.String())} + return &cmderrors.InvalidURLError{Cause: errors.New(URL.String())} } if strings.HasSuffix(indexFileName, ".tar.bz2") { indexFileName = strings.TrimSuffix(indexFileName, ".tar.bz2") + ".json" @@ -449,7 +493,7 @@ func (pmb *Builder) LoadPackageIndex(URL *url.URL) error { indexPath := pmb.IndexDir.Join(indexFileName) index, err := packageindex.LoadIndex(indexPath) if err != nil { - return fmt.Errorf(tr("loading json index file %[1]s: %[2]s"), indexPath, err) + return errors.New(i18n.Tr("loading json index file %[1]s: %[2]s", indexPath, err)) } for _, p := range index.Packages { @@ -464,7 +508,7 @@ func (pmb *Builder) LoadPackageIndex(URL *url.URL) error { func (pmb *Builder) LoadPackageIndexFromFile(indexPath *paths.Path) (*packageindex.Index, error) { index, err := packageindex.LoadIndex(indexPath) if err != nil { - return nil, fmt.Errorf(tr("loading json index file %[1]s: %[2]s"), indexPath, err) + return nil, errors.New(i18n.Tr("loading json index file %[1]s: %[2]s", indexPath, err)) } index.MergeIntoPackages(pmb.packages) @@ -478,7 +522,7 @@ func (pme *Explorer) Package(name string) *PackageActions { var err error thePackage := pme.packages[name] if thePackage == nil { - err = fmt.Errorf(tr("package '%s' not found"), name) + err = errors.New(i18n.Tr("package '%s' not found", name)) } return &PackageActions{ aPackage: thePackage, @@ -504,7 +548,7 @@ func (pa *PackageActions) Tool(name string) *ToolActions { tool = pa.aPackage.Tools[name] if tool == nil { - err = fmt.Errorf(tr("tool '%[1]s' not found in package '%[2]s'"), name, pa.aPackage.Name) + err = errors.New(i18n.Tr("tool '%[1]s' not found in package '%[2]s'", name, pa.aPackage.Name)) } } return &ToolActions{ @@ -554,7 +598,7 @@ func (ta *ToolActions) Release(version *semver.RelaxedVersion) *ToolReleaseActio } release := ta.tool.FindReleaseWithRelaxedVersion(version) if release == nil { - return &ToolReleaseActions{forwardError: fmt.Errorf(tr("release %[1]s not found for tool %[2]s"), version, ta.tool.String())} + return &ToolReleaseActions{forwardError: errors.New(i18n.Tr("release %[1]s not found for tool %[2]s", version, ta.tool))} } return &ToolReleaseActions{release: release} } @@ -584,8 +628,7 @@ func (pme *Explorer) GetInstalledPlatformRelease(platform *cores.Platform) *core } debug := func(msg string, pl *cores.PlatformRelease) { - pme.log.WithField("bundle", pl.IsIDEBundled). - WithField("version", pl.Version). + pme.log.WithField("version", pl.Version). WithField("managed", pme.IsManagedPlatformRelease(pl)). Debugf("%s: %s", msg, pl) } @@ -597,20 +640,20 @@ func (pme *Explorer) GetInstalledPlatformRelease(platform *cores.Platform) *core for _, candidate := range releases[1:] { candidateIsManaged := pme.IsManagedPlatformRelease(candidate) debug("candidate", candidate) - // TODO: Disentangle this algorithm and make it more straightforward - if bestIsManaged == candidateIsManaged { - if best.IsIDEBundled == candidate.IsIDEBundled { - if candidate.Version.GreaterThan(best.Version) { - best = candidate - } - } - if best.IsIDEBundled && !candidate.IsIDEBundled { + if !candidateIsManaged && !bestIsManaged { + if candidate.Version.GreaterThan(best.Version) { best = candidate } + continue + } + if !candidateIsManaged { + continue } - if !bestIsManaged && candidateIsManaged { + if !bestIsManaged { best = candidate bestIsManaged = true + } else if candidate.Version.GreaterThan(best.Version) { + best = candidate } debug("current best", best) } @@ -684,7 +727,7 @@ func (pme *Explorer) FindToolsRequiredFromPlatformRelease(platform *cores.Platfo pme.log.WithField("tool", toolDep).Debugf("Required tool") tool := pme.FindToolDependency(toolDep) if tool == nil { - return nil, fmt.Errorf(tr("tool release not found: %s"), toolDep) + return nil, errors.New(i18n.Tr("tool release not found: %s", toolDep)) } requiredTools = append(requiredTools, tool) delete(foundTools, tool.Tool.Name) @@ -695,7 +738,7 @@ func (pme *Explorer) FindToolsRequiredFromPlatformRelease(platform *cores.Platfo pme.log.WithField("discovery", discoveryDep).Infof("Required discovery") tool := pme.FindDiscoveryDependency(discoveryDep) if tool == nil { - return nil, fmt.Errorf(tr("discovery release not found: %s"), discoveryDep) + return nil, errors.New(i18n.Tr("discovery release not found: %s", discoveryDep)) } requiredTools = append(requiredTools, tool) delete(foundTools, tool.Tool.Name) @@ -706,7 +749,7 @@ func (pme *Explorer) FindToolsRequiredFromPlatformRelease(platform *cores.Platfo pme.log.WithField("monitor", monitorDep).Infof("Required monitor") tool := pme.FindMonitorDependency(monitorDep) if tool == nil { - return nil, fmt.Errorf(tr("monitor release not found: %s"), monitorDep) + return nil, errors.New(i18n.Tr("monitor release not found: %s", monitorDep)) } requiredTools = append(requiredTools, tool) delete(foundTools, tool.Tool.Name) @@ -790,7 +833,7 @@ func (pme *Explorer) FindToolsRequiredForBuild(platform, buildPlatform *cores.Pl pme.log.WithField("tool", toolDep).Debugf("Required tool") tool := pme.FindToolDependency(toolDep) if tool == nil { - return nil, fmt.Errorf(tr("tool release not found: %s"), toolDep) + return nil, errors.New(i18n.Tr("tool release not found: %s", toolDep)) } requiredTools = append(requiredTools, tool) delete(allToolsAlternatives, tool.Tool.Name) @@ -862,3 +905,11 @@ func (pme *Explorer) NormalizeFQBN(fqbn *cores.FQBN) (*cores.FQBN, error) { } return normalizedFqbn, nil } + +// Dirty returns true if one of the loaded platforms needs to be re-initialized +// due to file changes in the platform releases. +func (pme *Explorer) Dirty() bool { + return slices.ContainsFunc( + pme.InstalledPlatformReleases(), + (*cores.PlatformRelease).Dirty) +} diff --git a/arduino/cores/packagemanager/package_manager_test.go b/internal/arduino/cores/packagemanager/package_manager_test.go similarity index 96% rename from arduino/cores/packagemanager/package_manager_test.go rename to internal/arduino/cores/packagemanager/package_manager_test.go index c02fa34eaa6..595d08d0c21 100644 --- a/arduino/cores/packagemanager/package_manager_test.go +++ b/internal/arduino/cores/packagemanager/package_manager_test.go @@ -23,11 +23,11 @@ import ( "strings" "testing" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/internal/arduino/cores" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" "github.com/stretchr/testify/require" + "go.bug.st/downloader/v2" semver "go.bug.st/relaxed-semver" ) @@ -38,7 +38,7 @@ var dataDir1 = paths.New("testdata", "data_dir_1") var extraHardware = paths.New("testdata", "extra_hardware") func TestFindBoardWithFQBN(t *testing.T) { - pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test") + pmb := NewBuilder(customHardware, customHardware, nil, customHardware, customHardware, "test", downloader.GetDefaultConfig()) pmb.LoadHardwareFromDirectory(customHardware) pm := pmb.Build() pme, release := pm.NewExplorer() @@ -56,7 +56,7 @@ func TestFindBoardWithFQBN(t *testing.T) { func TestResolveFQBN(t *testing.T) { // Pass nil, since these paths are only used for installing - pmb := NewBuilder(nil, nil, nil, nil, "test") + pmb := NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) // Hardware from main packages directory pmb.LoadHardwareFromDirectory(dataDir1.Join("packages")) // This contains the arduino:avr core @@ -341,7 +341,7 @@ func TestResolveFQBN(t *testing.T) { } func TestBoardOptionsFunctions(t *testing.T) { - pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test") + pmb := NewBuilder(customHardware, customHardware, nil, customHardware, customHardware, "test", downloader.GetDefaultConfig()) pmb.LoadHardwareFromDirectory(customHardware) pm := pmb.Build() pme, release := pm.NewExplorer() @@ -381,7 +381,7 @@ func TestBoardOptionsFunctions(t *testing.T) { } func TestBoardOrdering(t *testing.T) { - pmb := NewBuilder(dataDir1, dataDir1.Join("packages"), nil, nil, "") + pmb := NewBuilder(dataDir1, dataDir1.Join("packages"), nil, nil, nil, "", downloader.GetDefaultConfig()) _ = pmb.LoadHardwareFromDirectories(paths.NewPathList(dataDir1.Join("packages").String())) pm := pmb.Build() pme, release := pm.NewExplorer() @@ -432,13 +432,14 @@ func TestBoardOrdering(t *testing.T) { func TestFindToolsRequiredForBoard(t *testing.T) { t.Setenv("ARDUINO_DATA_DIR", dataDir1.String()) - configuration.Settings = configuration.Init("") pmb := NewBuilder( dataDir1, - configuration.PackagesDir(configuration.Settings), - configuration.DownloadsDir(configuration.Settings), + dataDir1.Join("packages"), + nil, + dataDir1.Join("staging"), dataDir1, "test", + downloader.GetDefaultConfig(), ) loadIndex := func(addr string) { @@ -567,7 +568,7 @@ func TestFindToolsRequiredForBoard(t *testing.T) { } func TestIdentifyBoard(t *testing.T) { - pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test") + pmb := NewBuilder(customHardware, customHardware, nil, customHardware, customHardware, "test", downloader.GetDefaultConfig()) pmb.LoadHardwareFromDirectory(customHardware) pm := pmb.Build() pme, release := pm.NewExplorer() @@ -594,12 +595,12 @@ func TestIdentifyBoard(t *testing.T) { func TestPackageManagerClear(t *testing.T) { // Create a PackageManager and load the harware - pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test") + pmb := NewBuilder(customHardware, customHardware, nil, customHardware, customHardware, "test", downloader.GetDefaultConfig()) pmb.LoadHardwareFromDirectory(customHardware) pm := pmb.Build() // Creates another PackageManager but don't load the hardware - emptyPmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test") + emptyPmb := NewBuilder(customHardware, customHardware, nil, customHardware, customHardware, "test", downloader.GetDefaultConfig()) emptyPm := emptyPmb.Build() // Verifies they're not equal @@ -621,7 +622,7 @@ func TestFindToolsRequiredFromPlatformRelease(t *testing.T) { require.NoError(t, err) defer fakePath.RemoveAll() - pmb := NewBuilder(fakePath, fakePath, fakePath, fakePath, "test") + pmb := NewBuilder(fakePath, fakePath, nil, fakePath, fakePath, "test", downloader.GetDefaultConfig()) pack := pmb.GetOrCreatePackage("arduino") { @@ -742,8 +743,9 @@ func TestFindToolsRequiredFromPlatformRelease(t *testing.T) { } func TestFindPlatformReleaseDependencies(t *testing.T) { - pmb := NewBuilder(nil, nil, nil, nil, "test") + pmb := NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) pmb.LoadPackageIndexFromFile(paths.New("testdata", "package_tooltest_index.json")) + pmb.calculateCompatibleReleases() pm := pmb.Build() pme, release := pm.NewExplorer() defer release() @@ -757,7 +759,7 @@ func TestFindPlatformReleaseDependencies(t *testing.T) { func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) { // Pass nil, since these paths are only used for installing - pmb := NewBuilder(nil, nil, nil, nil, "test") + pmb := NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) // Hardware from main packages directory pmb.LoadHardwareFromDirectory(dataDir1.Join("packages")) pm := pmb.Build() @@ -827,7 +829,7 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) { func TestVariantAndCoreSelection(t *testing.T) { // Pass nil, since these paths are only used for installing - pmb := NewBuilder(nil, nil, nil, nil, "test") + pmb := NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) // Hardware from main packages directory pmb.LoadHardwareFromDirectory(dataDir1.Join("packages")) pm := pmb.Build() @@ -922,7 +924,7 @@ func TestVariantAndCoreSelection(t *testing.T) { } func TestRunScript(t *testing.T) { - pmb := NewBuilder(nil, nil, nil, nil, "test") + pmb := NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) pm := pmb.Build() pme, release := pm.NewExplorer() defer release() diff --git a/arduino/cores/packagemanager/profiles.go b/internal/arduino/cores/packagemanager/profiles.go similarity index 51% rename from arduino/cores/packagemanager/profiles.go rename to internal/arduino/cores/packagemanager/profiles.go index 423bfdaeffa..f4635950785 100644 --- a/arduino/cores/packagemanager/profiles.go +++ b/internal/arduino/cores/packagemanager/profiles.go @@ -16,15 +16,18 @@ package packagemanager import ( + "context" + "errors" "fmt" "net/url" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/resources" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/cli/configuration" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" @@ -32,7 +35,7 @@ import ( // LoadHardwareForProfile load the hardware platforms for the given profile. // If installMissing is true then possibly missing tools and platforms will be downloaded and installed. -func (pmb *Builder) LoadHardwareForProfile(p *sketch.Profile, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) []error { +func (pmb *Builder) LoadHardwareForProfile(ctx context.Context, p *sketch.Profile, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, settings *configuration.Settings) []error { pmb.profile = p // Load required platforms @@ -40,12 +43,12 @@ func (pmb *Builder) LoadHardwareForProfile(p *sketch.Profile, installMissing boo var platformReleases []*cores.PlatformRelease indexURLs := map[string]*url.URL{} for _, platformRef := range p.Platforms { - if platformRelease, err := pmb.loadProfilePlatform(platformRef, installMissing, downloadCB, taskCB); err != nil { - merr = append(merr, fmt.Errorf("%s: %w", tr("loading required platform %s", platformRef), err)) + if platformRelease, err := pmb.loadProfilePlatform(ctx, platformRef, installMissing, downloadCB, taskCB, settings); err != nil { + merr = append(merr, fmt.Errorf("%s: %w", i18n.Tr("loading required platform %s", platformRef), err)) logrus.WithField("platform", platformRef).WithError(err).Debugf("Error loading platform for profile") } else { platformReleases = append(platformReleases, platformRelease) - indexURLs[platformRelease.Platform.Name] = platformRef.PlatformIndexURL + indexURLs[platformRelease.Name] = platformRef.PlatformIndexURL logrus.WithField("platform", platformRef).Debugf("Loaded platform for profile") } } @@ -56,8 +59,8 @@ func (pmb *Builder) LoadHardwareForProfile(p *sketch.Profile, installMissing boo for _, toolDep := range platformRelease.ToolDependencies { indexURL := indexURLs[toolDep.ToolPackager] - if err := pmb.loadProfileTool(toolDep, indexURL, installMissing, downloadCB, taskCB); err != nil { - merr = append(merr, fmt.Errorf("%s: %w", tr("loading required tool %s", toolDep), err)) + if err := pmb.loadProfileTool(ctx, toolDep, indexURL, installMissing, downloadCB, taskCB, settings); err != nil { + merr = append(merr, fmt.Errorf("%s: %w", i18n.Tr("loading required tool %s", toolDep), err)) logrus.WithField("tool", toolDep).WithField("index_url", indexURL).WithError(err).Debugf("Error loading tool for profile") } else { logrus.WithField("tool", toolDep).WithField("index_url", indexURL).Debugf("Loaded tool for profile") @@ -68,52 +71,48 @@ func (pmb *Builder) LoadHardwareForProfile(p *sketch.Profile, installMissing boo return merr } -func (pmb *Builder) loadProfilePlatform(platformRef *sketch.ProfilePlatformReference, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) (*cores.PlatformRelease, error) { +func (pmb *Builder) loadProfilePlatform(ctx context.Context, platformRef *sketch.ProfilePlatformReference, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, settings *configuration.Settings) (*cores.PlatformRelease, error) { targetPackage := pmb.packages.GetOrCreatePackage(platformRef.Packager) platform := targetPackage.GetOrCreatePlatform(platformRef.Architecture) release := platform.GetOrCreateRelease(platformRef.Version) uid := platformRef.InternalUniqueIdentifier() - destDir := configuration.ProfilesCacheDir(configuration.Settings).Join(uid) + destDir := settings.ProfilesCacheDir().Join(uid) if !destDir.IsDir() && installMissing { // Try installing the missing platform - if err := pmb.installMissingProfilePlatform(platformRef, destDir, downloadCB, taskCB); err != nil { + if err := pmb.installMissingProfilePlatform(ctx, platformRef, destDir, downloadCB, taskCB); err != nil { return nil, err } } return release, pmb.loadPlatformRelease(release, destDir) } -func (pmb *Builder) installMissingProfilePlatform(platformRef *sketch.ProfilePlatformReference, destDir *paths.Path, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { +func (pmb *Builder) installMissingProfilePlatform(ctx context.Context, platformRef *sketch.ProfilePlatformReference, destDir *paths.Path, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { // Instantiate a temporary package manager only for platform installation _ = pmb.tempDir.MkdirAll() tmp, err := paths.MkTempDir(pmb.tempDir.String(), "") if err != nil { return fmt.Errorf("installing missing platform: could not create temp dir %s", err) } - tmpPmb := NewBuilder(tmp, tmp, pmb.DownloadDir, tmp, pmb.userAgent) + tmpPmb := NewBuilder(tmp, tmp, nil, pmb.DownloadDir, tmp, pmb.userAgent, pmb.downloaderConfig) defer tmp.RemoveAll() // Download the main index and parse it - taskCB(&rpc.TaskProgress{Name: tr("Downloading platform %s", platformRef)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Downloading platform %s", platformRef)}) defaultIndexURL, _ := url.Parse(globals.DefaultIndexURL) indexesToDownload := []*url.URL{defaultIndexURL} if platformRef.PlatformIndexURL != nil { indexesToDownload = append(indexesToDownload, platformRef.PlatformIndexURL) } for _, indexURL := range indexesToDownload { - if err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error downloading %s", indexURL)}) - return &arduino.FailedDownloadError{Message: tr("Error downloading %s", indexURL), Cause: err} - } indexResource := resources.IndexResource{URL: indexURL} - if err := indexResource.Download(tmpPmb.IndexDir, downloadCB); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error downloading %s", indexURL)}) - return &arduino.FailedDownloadError{Message: tr("Error downloading %s", indexURL), Cause: err} + if err := indexResource.Download(ctx, tmpPmb.IndexDir, downloadCB, pmb.downloaderConfig); err != nil { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error downloading %s", indexURL)}) + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Error downloading %s", indexURL), Cause: err} } if err := tmpPmb.LoadPackageIndex(indexURL); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error loading index %s", indexURL)}) - return &arduino.FailedInstallError{Message: tr("Error loading index %s", indexURL), Cause: err} + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error loading index %s", indexURL)}) + return &cmderrors.FailedInstallError{Message: i18n.Tr("Error loading index %s", indexURL), Cause: err} } } @@ -125,36 +124,36 @@ func (pmb *Builder) installMissingProfilePlatform(platformRef *sketch.ProfilePla tmpPme, tmpRelease := tmpPm.NewExplorer() defer tmpRelease() - if err := tmpPme.DownloadPlatformRelease(tmpPlatformRelease, nil, downloadCB); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error downloading platform %s", tmpPlatformRelease)}) - return &arduino.FailedInstallError{Message: tr("Error downloading platform %s", tmpPlatformRelease), Cause: err} + if err := tmpPme.DownloadPlatformRelease(ctx, tmpPlatformRelease, downloadCB); err != nil { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error downloading platform %s", tmpPlatformRelease)}) + return &cmderrors.FailedInstallError{Message: i18n.Tr("Error downloading platform %s", tmpPlatformRelease), Cause: err} } taskCB(&rpc.TaskProgress{Completed: true}) // Perform install - taskCB(&rpc.TaskProgress{Name: tr("Installing platform %s", tmpPlatformRelease)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Installing platform %s", tmpPlatformRelease)}) if err := tmpPme.InstallPlatformInDirectory(tmpPlatformRelease, destDir); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error installing platform %s", tmpPlatformRelease)}) - return &arduino.FailedInstallError{Message: tr("Error installing platform %s", tmpPlatformRelease), Cause: err} + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error installing platform %s", tmpPlatformRelease)}) + return &cmderrors.FailedInstallError{Message: i18n.Tr("Error installing platform %s", tmpPlatformRelease), Cause: err} } taskCB(&rpc.TaskProgress{Completed: true}) return nil } -func (pmb *Builder) loadProfileTool(toolRef *cores.ToolDependency, indexURL *url.URL, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { +func (pmb *Builder) loadProfileTool(ctx context.Context, toolRef *cores.ToolDependency, indexURL *url.URL, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, settings *configuration.Settings) error { targetPackage := pmb.packages.GetOrCreatePackage(toolRef.ToolPackager) tool := targetPackage.GetOrCreateTool(toolRef.ToolName) uid := toolRef.InternalUniqueIdentifier(indexURL) - destDir := configuration.ProfilesCacheDir(configuration.Settings).Join(uid) + destDir := settings.ProfilesCacheDir().Join(uid) if !destDir.IsDir() && installMissing { // Try installing the missing tool toolRelease := tool.GetOrCreateRelease(toolRef.ToolVersion) if toolRelease == nil { - return &arduino.InvalidVersionError{Cause: fmt.Errorf(tr("version %s not found", toolRef.ToolVersion))} + return &cmderrors.InvalidVersionError{Cause: errors.New(i18n.Tr("version %s not found", toolRef.ToolVersion))} } - if err := pmb.installMissingProfileTool(toolRelease, destDir, downloadCB, taskCB); err != nil { + if err := pmb.installMissingProfileTool(ctx, toolRelease, destDir, downloadCB, taskCB); err != nil { return err } } @@ -162,7 +161,7 @@ func (pmb *Builder) loadProfileTool(toolRef *cores.ToolDependency, indexURL *url return pmb.loadToolReleaseFromDirectory(tool, toolRef.ToolVersion, destDir) } -func (pmb *Builder) installMissingProfileTool(toolRelease *cores.ToolRelease, destDir *paths.Path, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { +func (pmb *Builder) installMissingProfileTool(ctx context.Context, toolRelease *cores.ToolRelease, destDir *paths.Path, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { // Instantiate a temporary package manager only for platform installation tmp, err := paths.MkTempDir(destDir.Parent().String(), "") if err != nil { @@ -173,20 +172,20 @@ func (pmb *Builder) installMissingProfileTool(toolRelease *cores.ToolRelease, de // Download the tool toolResource := toolRelease.GetCompatibleFlavour() if toolResource == nil { - return &arduino.InvalidVersionError{Cause: fmt.Errorf(tr("version %s not available for this operating system", toolRelease))} + return &cmderrors.InvalidVersionError{Cause: errors.New(i18n.Tr("version %s not available for this operating system", toolRelease))} } - taskCB(&rpc.TaskProgress{Name: tr("Downloading tool %s", toolRelease)}) - if err := toolResource.Download(pmb.DownloadDir, nil, toolRelease.String(), downloadCB, ""); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error downloading tool %s", toolRelease)}) - return &arduino.FailedInstallError{Message: tr("Error installing tool %s", toolRelease), Cause: err} + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Downloading tool %s", toolRelease)}) + if err := toolResource.Download(ctx, pmb.DownloadDir, pmb.downloaderConfig, toolRelease.String(), downloadCB, ""); err != nil { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error downloading tool %s", toolRelease)}) + return &cmderrors.FailedInstallError{Message: i18n.Tr("Error installing tool %s", toolRelease), Cause: err} } taskCB(&rpc.TaskProgress{Completed: true}) // Install tool - taskCB(&rpc.TaskProgress{Name: tr("Installing tool %s", toolRelease)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Installing tool %s", toolRelease)}) if err := toolResource.Install(pmb.DownloadDir, tmp, destDir); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error installing tool %s", toolRelease)}) - return &arduino.FailedInstallError{Message: tr("Error installing tool %s", toolRelease), Cause: err} + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error installing tool %s", toolRelease)}) + return &cmderrors.FailedInstallError{Message: i18n.Tr("Error installing tool %s", toolRelease), Cause: err} } taskCB(&rpc.TaskProgress{Completed: true}) return nil diff --git a/arduino/cores/packagemanager/testdata/.gitignore b/internal/arduino/cores/packagemanager/testdata/.gitignore similarity index 100% rename from arduino/cores/packagemanager/testdata/.gitignore rename to internal/arduino/cores/packagemanager/testdata/.gitignore diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/arduino/avr/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/avr/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/arduino/avr/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/avr/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/platform.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/platform.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/platform.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/esp8266/esp8266/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/esp8266/esp8266/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/esp8266/esp8266/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/esp8266/esp8266/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/bootloaders/stk500v2/stk500boot_v2_mega2560.hex b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/bootloaders/stk500v2/stk500boot_v2_mega2560.hex similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/bootloaders/stk500v2/stk500boot_v2_mega2560.hex rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/bootloaders/stk500v2/stk500boot_v2_mega2560.hex diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.cpp b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.cpp similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.cpp rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.cpp diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.h b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.h similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.h rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.h diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/BarometricPressureSensor/BarometricPressureSensor.ino b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/BarometricPressureSensor/BarometricPressureSensor.ino similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/BarometricPressureSensor/BarometricPressureSensor.ino rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/BarometricPressureSensor/BarometricPressureSensor.ino diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/DigitalPotControl/DigitalPotControl.ino b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/DigitalPotControl/DigitalPotControl.ino similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/DigitalPotControl/DigitalPotControl.ino rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/DigitalPotControl/DigitalPotControl.ino diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/keywords.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/keywords.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/keywords.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/keywords.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/library.properties b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/library.properties similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/library.properties rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/library.properties diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/platform.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/platform.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/platform.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/test/avr/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/test/avr/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/test/avr/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/test/avr/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/platform.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/platform.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/platform.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/programmers.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/programmers.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/programmers.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/programmers.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/package_adafruit_index.json b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_adafruit_index.json similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/package_adafruit_index.json rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/package_adafruit_index.json diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/package_esp32_index.json b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_esp32_index.json similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/package_esp32_index.json rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/package_esp32_index.json diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/package_esp8266com_index.json b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_esp8266com_index.json similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/package_esp8266com_index.json rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/package_esp8266com_index.json diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/package_test_index.json b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_test_index.json similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/package_test_index.json rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/package_test_index.json diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/boards.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/keywords.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/keywords.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/keywords.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/keywords.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/platform.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/platform.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/platform.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/programmers.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/programmers.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/programmers.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/programmers.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/boards.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/platform.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/platform.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/platform.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/programmers.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/programmers.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/programmers.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/programmers.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS-Atmel/1.2.0/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS-Atmel/1.2.0/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS-Atmel/1.2.0/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS-Atmel/1.2.0/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS/4.5.0/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS/4.5.0/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS/4.5.0/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS/4.5.0/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.7.0/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.7.0/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.7.0/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.7.0/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.8.0-48-gb176eee/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.8.0-48-gb176eee/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.8.0-48-gb176eee/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.8.0-48-gb176eee/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/openocd/0.9.0-arduino/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/openocd/0.9.0-arduino/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/openocd/0.9.0-arduino/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/openocd/0.9.0-arduino/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/boards.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/platform.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/platform.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/platform.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/programmers.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/programmers.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/programmers.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/programmers.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/esptool/2.3.1/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/esptool/2.3.1/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/esptool/2.3.1/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/esptool/2.3.1/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/mkspiffs/0.2.3/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/mkspiffs/0.2.3/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/mkspiffs/0.2.3/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/mkspiffs/0.2.3/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-80-g6c4433a-5.2.0/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-80-g6c4433a-5.2.0/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-80-g6c4433a-5.2.0/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-80-g6c4433a-5.2.0/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/boards.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/platform.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/platform.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/platform.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/programmers.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/programmers.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/programmers.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/programmers.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/esptool/0.4.13/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/esptool/0.4.13/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/esptool/0.4.13/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/esptool/0.4.13/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/mkspiffs/0.2.0/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/mkspiffs/0.2.0/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/mkspiffs/0.2.0/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/mkspiffs/0.2.0/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/hardware/avr/1.1.0/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/hardware/avr/1.1.0/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/test/hardware/avr/1.1.0/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/hardware/avr/1.1.0/boards.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/tools/bossac/1.7.5/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/tools/bossac/1.7.5/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/test/tools/bossac/1.7.5/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/tools/bossac/1.7.5/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/test2/hardware/avr/1.0.0/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test2/hardware/avr/1.0.0/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/test2/hardware/avr/1.0.0/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test2/hardware/avr/1.0.0/boards.txt diff --git a/arduino/cores/packagemanager/testdata/extra_hardware/referenced/avr/boards.txt b/internal/arduino/cores/packagemanager/testdata/extra_hardware/referenced/avr/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/extra_hardware/referenced/avr/boards.txt rename to internal/arduino/cores/packagemanager/testdata/extra_hardware/referenced/avr/boards.txt diff --git a/arduino/cores/packagemanager/testdata/extra_hardware/referenced/samd/boards.txt b/internal/arduino/cores/packagemanager/testdata/extra_hardware/referenced/samd/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/extra_hardware/referenced/samd/boards.txt rename to internal/arduino/cores/packagemanager/testdata/extra_hardware/referenced/samd/boards.txt diff --git a/arduino/cores/packagemanager/testdata/package_tooltest_index.json b/internal/arduino/cores/packagemanager/testdata/package_tooltest_index.json similarity index 100% rename from arduino/cores/packagemanager/testdata/package_tooltest_index.json rename to internal/arduino/cores/packagemanager/testdata/package_tooltest_index.json diff --git a/arduino/cores/programmers.go b/internal/arduino/cores/programmers.go similarity index 100% rename from arduino/cores/programmers.go rename to internal/arduino/cores/programmers.go diff --git a/arduino/cores/status.go b/internal/arduino/cores/status.go similarity index 85% rename from arduino/cores/status.go rename to internal/arduino/cores/status.go index 85517bf7a56..42ed1177e0a 100644 --- a/arduino/cores/status.go +++ b/internal/arduino/cores/status.go @@ -17,10 +17,10 @@ package cores import ( "errors" - "fmt" "slices" "strings" + "github.com/arduino/arduino-cli/internal/i18n" semver "go.bug.st/relaxed-semver" ) @@ -88,21 +88,21 @@ func (packages Packages) Names() []string { // GetPlatformReleaseToolDependencies returns the tool releases needed by the specified PlatformRelease func (packages Packages) GetPlatformReleaseToolDependencies(release *PlatformRelease) ([]*ToolRelease, error) { if release == nil { - return nil, errors.New(tr("release cannot be nil")) + return nil, errors.New(i18n.Tr("release cannot be nil")) } ret := []*ToolRelease{} for _, dep := range release.ToolDependencies { pkg, exists := packages[dep.ToolPackager] if !exists { - return nil, fmt.Errorf(tr("package %s not found"), dep.ToolPackager) + return nil, errors.New(i18n.Tr("package %s not found", dep.ToolPackager)) } tool, exists := pkg.Tools[dep.ToolName] if !exists { - return nil, fmt.Errorf(tr("tool %s not found"), dep.ToolName) + return nil, errors.New(i18n.Tr("tool %s not found", dep.ToolName)) } toolRelease, exists := tool.Releases[dep.ToolVersion.NormalizedString()] if !exists { - return nil, fmt.Errorf(tr("tool version %s not found"), dep.ToolVersion) + return nil, errors.New(i18n.Tr("tool version %s not found", dep.ToolVersion)) } ret = append(ret, toolRelease) } @@ -112,24 +112,24 @@ func (packages Packages) GetPlatformReleaseToolDependencies(release *PlatformRel // GetPlatformReleaseDiscoveryDependencies returns the discovery releases needed by the specified PlatformRelease func (packages Packages) GetPlatformReleaseDiscoveryDependencies(release *PlatformRelease) ([]*ToolRelease, error) { if release == nil { - return nil, fmt.Errorf(tr("release cannot be nil")) + return nil, errors.New(i18n.Tr("release cannot be nil")) } res := []*ToolRelease{} for _, discovery := range release.DiscoveryDependencies { pkg, exists := packages[discovery.Packager] if !exists { - return nil, fmt.Errorf(tr("package %s not found"), discovery.Packager) + return nil, errors.New(i18n.Tr("package %s not found", discovery.Packager)) } tool, exists := pkg.Tools[discovery.Name] if !exists { - return nil, fmt.Errorf(tr("tool %s not found"), discovery.Name) + return nil, errors.New(i18n.Tr("tool %s not found", discovery.Name)) } // We always want to use the latest available release for discoveries latestRelease := tool.LatestRelease() if latestRelease == nil { - return nil, fmt.Errorf(tr("can't find latest release of %s"), discovery.Name) + return nil, errors.New(i18n.Tr("can't find latest release of %s", discovery.Name)) } res = append(res, latestRelease) } @@ -139,24 +139,24 @@ func (packages Packages) GetPlatformReleaseDiscoveryDependencies(release *Platfo // GetPlatformReleaseMonitorDependencies returns the monitor releases needed by the specified PlatformRelease func (packages Packages) GetPlatformReleaseMonitorDependencies(release *PlatformRelease) ([]*ToolRelease, error) { if release == nil { - return nil, fmt.Errorf(tr("release cannot be nil")) + return nil, errors.New(i18n.Tr("release cannot be nil")) } res := []*ToolRelease{} for _, monitor := range release.MonitorDependencies { pkg, exists := packages[monitor.Packager] if !exists { - return nil, fmt.Errorf(tr("package %s not found"), monitor.Packager) + return nil, errors.New(i18n.Tr("package %s not found", monitor.Packager)) } tool, exists := pkg.Tools[monitor.Name] if !exists { - return nil, fmt.Errorf(tr("tool %s not found"), monitor.Name) + return nil, errors.New(i18n.Tr("tool %s not found", monitor.Name)) } // We always want to use the latest available release for monitors latestRelease := tool.LatestRelease() if latestRelease == nil { - return nil, fmt.Errorf(tr("can't find latest release of %s"), monitor.Name) + return nil, errors.New(i18n.Tr("can't find latest release of %s", monitor.Name)) } res = append(res, latestRelease) } diff --git a/arduino/cores/tools.go b/internal/arduino/cores/tools.go similarity index 99% rename from arduino/cores/tools.go rename to internal/arduino/cores/tools.go index 616e80090a3..3648119c483 100644 --- a/arduino/cores/tools.go +++ b/internal/arduino/cores/tools.go @@ -19,7 +19,7 @@ import ( "regexp" "runtime" - "github.com/arduino/arduino-cli/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/resources" "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" semver "go.bug.st/relaxed-semver" diff --git a/arduino/cores/tools_test.go b/internal/arduino/cores/tools_test.go similarity index 99% rename from arduino/cores/tools_test.go rename to internal/arduino/cores/tools_test.go index 2597e1a9a66..4c0d54e953a 100644 --- a/arduino/cores/tools_test.go +++ b/internal/arduino/cores/tools_test.go @@ -18,7 +18,7 @@ package cores import ( "testing" - "github.com/arduino/arduino-cli/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/resources" "github.com/stretchr/testify/require" ) diff --git a/arduino/discovery/discovery_client/main.go b/internal/arduino/discovery/discovery_client/main.go similarity index 88% rename from arduino/discovery/discovery_client/main.go rename to internal/arduino/discovery/discovery_client/main.go index b9e1cfd0988..b1e461d123c 100644 --- a/arduino/discovery/discovery_client/main.go +++ b/internal/arduino/discovery/discovery_client/main.go @@ -22,8 +22,7 @@ import ( "os" "sort" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/arduino/discovery/discoverymanager" + "github.com/arduino/arduino-cli/internal/arduino/discovery/discoverymanager" "github.com/sirupsen/logrus" ) @@ -33,10 +32,9 @@ func main() { os.Exit(1) } logrus.SetLevel(logrus.ErrorLevel) - dm := discoverymanager.New() + dm := discoverymanager.New("discovery_client/1.0.0") for _, discCmd := range os.Args[1:] { - disc := discovery.New(discCmd, discCmd) - dm.Add(disc) + dm.Add(discCmd, discCmd) } dm.Start() diff --git a/arduino/discovery/discoverymanager/discoverymanager.go b/internal/arduino/discovery/discoverymanager/discoverymanager.go similarity index 82% rename from arduino/discovery/discoverymanager/discoverymanager.go rename to internal/arduino/discovery/discoverymanager/discoverymanager.go index 7d33115ce31..102d0f72389 100644 --- a/arduino/discovery/discoverymanager/discoverymanager.go +++ b/internal/arduino/discovery/discoverymanager/discoverymanager.go @@ -16,13 +16,13 @@ package discoverymanager import ( + "errors" "fmt" "sync" "time" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/i18n" - "github.com/pkg/errors" + "github.com/arduino/arduino-cli/internal/i18n" + discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2" "github.com/sirupsen/logrus" ) @@ -34,23 +34,23 @@ import ( // is called. type DiscoveryManager struct { discoveriesMutex sync.Mutex - discoveries map[string]*discovery.PluggableDiscovery // all registered PluggableDiscovery - discoveriesRunning bool // set to true once discoveries are started - feed chan *discovery.Event // all events will pass through this channel + discoveries map[string]*discovery.Client // all registered PluggableDiscovery + discoveriesRunning bool // set to true once discoveries are started + feed chan *discovery.Event // all events will pass through this channel watchersMutex sync.Mutex watchers map[*PortWatcher]bool // all registered Watcher watchersCache map[string]map[string]*discovery.Event // this is a cache of all active ports + userAgent string } -var tr = i18n.Tr - // New creates a new DiscoveryManager -func New() *DiscoveryManager { +func New(userAgent string) *DiscoveryManager { return &DiscoveryManager{ - discoveries: map[string]*discovery.PluggableDiscovery{}, + discoveries: map[string]*discovery.Client{}, watchers: map[*PortWatcher]bool{}, feed: make(chan *discovery.Event, 50), watchersCache: map[string]map[string]*discovery.Event{}, + userAgent: userAgent, } } @@ -65,7 +65,7 @@ func (dm *DiscoveryManager) Clear() { logrus.Infof("Closed and removed discovery %s", d.GetID()) } } - dm.discoveries = map[string]*discovery.PluggableDiscovery{} + dm.discoveries = map[string]*discovery.Client{} } // IDs returns the list of discoveries' ids in this DiscoveryManager @@ -101,7 +101,7 @@ func (dm *DiscoveryManager) Start() []error { var wg sync.WaitGroup for _, d := range dm.discoveries { wg.Add(1) - go func(d *discovery.PluggableDiscovery) { + go func(d *discovery.Client) { if err := dm.startDiscovery(d); err != nil { errsLock.Lock() errs = append(errs, err) @@ -117,13 +117,20 @@ func (dm *DiscoveryManager) Start() []error { } // Add adds a discovery to the list of managed discoveries -func (dm *DiscoveryManager) Add(d *discovery.PluggableDiscovery) error { +func (dm *DiscoveryManager) Add(id string, args ...string) error { + d := discovery.NewClient(id, args...) + d.SetLogger(logrus.WithField("discovery", id)) + d.SetUserAgent(dm.userAgent) + return dm.add(d) +} + +func (dm *DiscoveryManager) add(d *discovery.Client) error { dm.discoveriesMutex.Lock() defer dm.discoveriesMutex.Unlock() id := d.GetID() if _, has := dm.discoveries[id]; has { - return errors.Errorf(tr("pluggable discovery already added: %s"), id) + return errors.New(i18n.Tr("pluggable discovery already added: %s", id)) } dm.discoveries[id] = d @@ -162,9 +169,17 @@ func (dm *DiscoveryManager) Watch() (*PortWatcher, error) { defer dm.watchersMutex.Unlock() delete(dm.watchers, watcher) close(watcher.feed) + watcher.feed = nil } go func() { dm.watchersMutex.Lock() + defer dm.watchersMutex.Unlock() + + // Check if the watcher is still alive (it could have been closed before the goroutine started...) + if watcher.feed == nil { + return + } + // When a watcher is started, send all the current active ports first... for _, cache := range dm.watchersCache { for _, ev := range cache { @@ -173,12 +188,11 @@ func (dm *DiscoveryManager) Watch() (*PortWatcher, error) { } // ...and after that add the watcher to the list of watchers receiving events dm.watchers[watcher] = true - dm.watchersMutex.Unlock() }() return watcher, nil } -func (dm *DiscoveryManager) startDiscovery(d *discovery.PluggableDiscovery) (discErr error) { +func (dm *DiscoveryManager) startDiscovery(d *discovery.Client) (discErr error) { defer func() { // If this function returns an error log it if discErr != nil { @@ -187,14 +201,14 @@ func (dm *DiscoveryManager) startDiscovery(d *discovery.PluggableDiscovery) (dis }() if err := d.Run(); err != nil { - return fmt.Errorf(tr("discovery %[1]s process not started: %[2]w"), d.GetID(), err) + return fmt.Errorf("%s: %w", i18n.Tr("discovery %[1]s process not started", d.GetID()), err) } eventCh, err := d.StartSync(5) if err != nil { - return fmt.Errorf("%s: %s", tr("starting discovery %s", d.GetID()), err) + return fmt.Errorf("%s: %s", i18n.Tr("starting discovery %s", d.GetID()), err) } - go func(d *discovery.PluggableDiscovery) { + go func(d *discovery.Client) { // Transfer all incoming events from this discovery to the feed channel for ev := range eventCh { dm.feed <- ev @@ -281,6 +295,6 @@ func (dm *DiscoveryManager) List() []*discovery.Port { // AddAllDiscoveriesFrom transfers discoveries from src to the receiver func (dm *DiscoveryManager) AddAllDiscoveriesFrom(src *DiscoveryManager) { for _, d := range src.discoveries { - dm.Add(d) + dm.add(d) } } diff --git a/arduino/globals/globals.go b/internal/arduino/globals/globals.go similarity index 81% rename from arduino/globals/globals.go rename to internal/arduino/globals/globals.go index 68b5dd577c9..9f91213c492 100644 --- a/arduino/globals/globals.go +++ b/internal/arduino/globals/globals.go @@ -15,6 +15,12 @@ package globals +import ( + "net/url" + + "github.com/arduino/arduino-cli/internal/arduino/resources" +) + var ( // MainFileValidExtension is the extension that must be used for files in new sketches MainFileValidExtension = ".ino" @@ -63,4 +69,13 @@ var ( // DefaultIndexURL is the default index url DefaultIndexURL = "https://downloads.arduino.cc/packages/package_index.tar.bz2" + + // LibrariesIndexURL is the URL where to get the libraries index. + LibrariesIndexURL, _ = url.Parse("https://downloads.arduino.cc/libraries/library_index.tar.bz2") + + // LibrariesIndexResource is the IndexResource to get the libraries index. + LibrariesIndexResource = resources.IndexResource{ + URL: LibrariesIndexURL, + EnforceSignatureVerification: true, + } ) diff --git a/internal/arduino/httpclient/httpclient.go b/internal/arduino/httpclient/httpclient.go new file mode 100644 index 00000000000..8c61c5b3249 --- /dev/null +++ b/internal/arduino/httpclient/httpclient.go @@ -0,0 +1,66 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package httpclient + +import ( + "context" + "time" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/sirupsen/logrus" + "go.bug.st/downloader/v2" +) + +// DownloadFile downloads a file from a URL into the specified path. An optional config and options may be passed (or nil to use the defaults). +// A DownloadProgressCB callback function must be passed to monitor download progress. +// If a not empty queryParameter is passed, it is appended to the URL for analysis purposes. +func DownloadFile(ctx context.Context, path *paths.Path, URL string, queryParameter string, label string, downloadCB rpc.DownloadProgressCB, config downloader.Config, options ...downloader.DownloadOptions) (returnedError error) { + if queryParameter != "" { + URL = URL + "?query=" + queryParameter + } + logrus.WithField("url", URL).Info("Starting download") + downloadCB.Start(URL, label) + defer func() { + if returnedError == nil { + downloadCB.End(true, "") + } else { + downloadCB.End(false, returnedError.Error()) + } + }() + + d, err := downloader.DownloadWithConfigAndContext(ctx, path.String(), URL, config, options...) + if err != nil { + return err + } + + err = d.RunAndPoll(func(downloaded int64) { + downloadCB.Update(downloaded, d.Size()) + }, 250*time.Millisecond) + if err != nil { + return err + } + + // The URL is not reachable for some reason + if d.Resp.StatusCode >= 400 && d.Resp.StatusCode <= 599 { + msg := i18n.Tr("Server responded with: %s", d.Resp.Status) + return &cmderrors.FailedDownloadError{Message: msg} + } + + return nil +} diff --git a/arduino/libraries/libraries.go b/internal/arduino/libraries/libraries.go similarity index 95% rename from arduino/libraries/libraries.go rename to internal/arduino/libraries/libraries.go index 1235023e9e5..9ffa1e27eea 100644 --- a/arduino/libraries/libraries.go +++ b/internal/arduino/libraries/libraries.go @@ -16,11 +16,12 @@ package libraries import ( + "errors" "fmt" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" @@ -47,8 +48,6 @@ var ValidCategories = map[string]bool{ "Uncategorized": true, } -var tr = i18n.Tr - // Library represents a library in the system type Library struct { Name string @@ -113,7 +112,7 @@ func (library *Library) ToRPCLibrary() (*rpc.Library, error) { var err error headers, err = library.SourceHeaders() if err != nil { - return nil, fmt.Errorf(tr("reading library headers: %w"), err) + return nil, fmt.Errorf("%s: %w", i18n.Tr("reading library headers"), err) } } @@ -225,7 +224,7 @@ func (library *Library) SourceHeaders() ([]string, error) { if library.sourceHeaders == nil { cppHeaders, err := library.SourceDir.ReadDir() if err != nil { - return nil, fmt.Errorf(tr("reading lib src dir: %s"), err) + return nil, errors.New(i18n.Tr("reading library source directory: %s", err)) } headerExtensions := []string{} for k := range globals.HeaderFilesValidExtensions { diff --git a/arduino/libraries/libraries_layout.go b/internal/arduino/libraries/libraries_layout.go similarity index 94% rename from arduino/libraries/libraries_layout.go rename to internal/arduino/libraries/libraries_layout.go index 8391141322a..ced64c90654 100644 --- a/arduino/libraries/libraries_layout.go +++ b/internal/arduino/libraries/libraries_layout.go @@ -17,8 +17,10 @@ package libraries import ( "encoding/json" + "errors" "fmt" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) @@ -62,7 +64,7 @@ func (d *LibraryLayout) UnmarshalJSON(b []byte) error { *d = RecursiveLayout return nil default: - return fmt.Errorf(tr("invalid library layout: %s"), s) + return errors.New(i18n.Tr("invalid library layout: %s", s)) } } diff --git a/arduino/libraries/libraries_location.go b/internal/arduino/libraries/libraries_location.go similarity index 97% rename from arduino/libraries/libraries_location.go rename to internal/arduino/libraries/libraries_location.go index 709bca8b96f..a2a4423a54d 100644 --- a/arduino/libraries/libraries_location.go +++ b/internal/arduino/libraries/libraries_location.go @@ -17,8 +17,10 @@ package libraries import ( "encoding/json" + "errors" "fmt" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) @@ -85,7 +87,7 @@ func (d *LibraryLocation) UnmarshalJSON(b []byte) error { *d = Unmanaged return nil default: - return fmt.Errorf(tr("invalid library location: %s"), s) + return errors.New(i18n.Tr("invalid library location: %s", s)) } } diff --git a/arduino/libraries/libraries_test.go b/internal/arduino/libraries/libraries_test.go similarity index 91% rename from arduino/libraries/libraries_test.go rename to internal/arduino/libraries/libraries_test.go index 9896ae577fb..33b0de48a3b 100644 --- a/arduino/libraries/libraries_test.go +++ b/internal/arduino/libraries/libraries_test.go @@ -95,15 +95,16 @@ func TestLibrariesLoader(t *testing.T) { func TestSymlinkLoop(t *testing.T) { // Set up directory structure of test library. testLib := paths.New("testdata", "TestLib") - examplesPath := testLib.Join("examples") + examplesPath, err := testLib.Join("examples").Abs() + require.NoError(t, err) require.NoError(t, examplesPath.Mkdir()) defer examplesPath.RemoveAll() // It's probably most friendly for contributors using Windows to create the symlinks needed for the test on demand. - err := os.Symlink(examplesPath.Join("..").String(), examplesPath.Join("UpGoer1").String()) + err = os.Symlink(examplesPath.String(), examplesPath.Join("UpGoer1").String()) require.NoError(t, err, "This test must be run as administrator on Windows to have symlink creation privilege.") // It's necessary to have multiple symlinks to a parent directory to create the loop. - err = os.Symlink(examplesPath.Join("..").String(), examplesPath.Join("UpGoer2").String()) + err = os.Symlink(examplesPath.String(), examplesPath.Join("UpGoer2").String()) require.NoError(t, err) // The failure condition is Load() never returning, testing for which requires setting up a timeout. @@ -123,15 +124,16 @@ func TestSymlinkLoop(t *testing.T) { func TestLegacySymlinkLoop(t *testing.T) { // Set up directory structure of test library. testLib := paths.New("testdata", "LegacyLib") - examplesPath := testLib.Join("examples") + examplesPath, err := testLib.Join("examples").Abs() + require.NoError(t, err) require.NoError(t, examplesPath.Mkdir()) defer examplesPath.RemoveAll() // It's probably most friendly for contributors using Windows to create the symlinks needed for the test on demand. - err := os.Symlink(examplesPath.Join("..").String(), examplesPath.Join("UpGoer1").String()) + err = os.Symlink(examplesPath.String(), examplesPath.Join("UpGoer1").String()) require.NoError(t, err, "This test must be run as administrator on Windows to have symlink creation privilege.") // It's necessary to have multiple symlinks to a parent directory to create the loop. - err = os.Symlink(examplesPath.Join("..").String(), examplesPath.Join("UpGoer2").String()) + err = os.Symlink(examplesPath.String(), examplesPath.Join("UpGoer2").String()) require.NoError(t, err) // The failure condition is Load() never returning, testing for which requires setting up a timeout. diff --git a/arduino/libraries/librariesindex/index.go b/internal/arduino/libraries/librariesindex/index.go similarity index 73% rename from arduino/libraries/librariesindex/index.go rename to internal/arduino/libraries/librariesindex/index.go index f7ebc6ba172..033630f910d 100644 --- a/arduino/libraries/librariesindex/index.go +++ b/internal/arduino/libraries/librariesindex/index.go @@ -18,8 +18,9 @@ package librariesindex import ( "sort" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/resources" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/resources" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" semver "go.bug.st/relaxed-semver" ) @@ -44,7 +45,7 @@ type Library struct { type Release struct { Author string Version *semver.Version - Dependencies []semver.Dependency + Dependencies []*Dependency Maintainer string Sentence string Paragraph string @@ -85,7 +86,7 @@ func (r *Release) GetVersion() *semver.Version { } // GetDependencies returns the dependencies of this library. -func (r *Release) GetDependencies() []semver.Dependency { +func (r *Release) GetDependencies() []*Dependency { return r.Dependencies } @@ -112,14 +113,19 @@ func (r *Release) String() string { // FindRelease search a library Release in the index. Returns nil if the // release is not found. If the version is not specified returns the latest // version available. -func (idx *Index) FindRelease(ref *Reference) *Release { - if library, exists := idx.Libraries[ref.Name]; exists { - if ref.Version == nil { - return library.Latest +func (idx *Index) FindRelease(name string, version *semver.Version) (*Release, error) { + if library, exists := idx.Libraries[name]; exists { + if version == nil { + return library.Latest, nil + } + if release, exists := library.Releases[version.NormalizedString()]; exists { + return release, nil } - return library.Releases[ref.Version.NormalizedString()] } - return nil + if version == nil { + return nil, &cmderrors.LibraryNotFoundError{Library: name + "@latest"} + } + return nil, &cmderrors.LibraryNotFoundError{Library: name + "@" + version.String()} } // FindIndexedLibrary search an indexed library that matches the provided @@ -144,31 +150,31 @@ func (idx *Index) FindLibraryUpdate(lib *libraries.Library) *Release { return nil } -// ResolveDependencies returns the dependencies of a library release. -func (idx *Index) ResolveDependencies(lib *Release) []*Release { - // Box lib index *Release to be digested by dep-resolver - // (TODO: There is a better use of golang interfaces to avoid this?) - allReleases := map[string]semver.Releases{} - for _, indexLib := range idx.Libraries { - releases := semver.Releases{} +// ResolveDependencies resolve the dependencies of a library release and returns a +// possible solution (the set of library releases to install together with the library). +// An optional "override" releases may be passed if we want to exclude the same +// libraries from the index (for example if we want to keep an installed library). +func (idx *Index) ResolveDependencies(lib *Release, overrides []*Release) []*Release { + resolver := semver.NewResolver[*Release, *Dependency]() + + overridden := map[string]bool{} + for _, override := range overrides { + resolver.AddRelease(override) + overridden[override.GetName()] = true + } + + // Create and populate the library resolver + for libName, indexLib := range idx.Libraries { + if _, ok := overridden[libName]; ok { + continue + } for _, indexLibRelease := range indexLib.Releases { - releases = append(releases, indexLibRelease) + resolver.AddRelease(indexLibRelease) } - allReleases[indexLib.Name] = releases } // Perform lib resolution - archive := &semver.Archive{ - Releases: allReleases, - } - deps := archive.Resolve(lib) - - // Unbox resolved deps back into *Release - res := []*Release{} - for _, dep := range deps { - res = append(res, dep.(*Release)) - } - return res + return resolver.Resolve(lib) } // Versions returns an array of all versions available of the library diff --git a/arduino/libraries/librariesindex/index_test.go b/internal/arduino/libraries/librariesindex/index_test.go similarity index 79% rename from arduino/libraries/librariesindex/index_test.go rename to internal/arduino/libraries/librariesindex/index_test.go index 59b245b4978..2340d550b85 100644 --- a/arduino/libraries/librariesindex/index_test.go +++ b/internal/arduino/libraries/librariesindex/index_test.go @@ -20,7 +20,7 @@ import ( "fmt" "testing" - "github.com/arduino/arduino-cli/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries" "github.com/arduino/go-paths-helper" easyjson "github.com/mailru/easyjson" "github.com/stretchr/testify/require" @@ -49,27 +49,22 @@ func TestIndexer(t *testing.T) { require.Equal(t, "", alp.Latest.Dependencies[0].GetConstraint().String()) require.Equal(t, "[1.0.0 1.1.0 1.2.0 1.2.1 1.2.2]", fmt.Sprintf("%v", alp.Versions())) - rtc100ref := &Reference{Name: "RTCZero", Version: semver.MustParse("1.0.0")} - require.Equal(t, "RTCZero@1.0.0", rtc100ref.String()) - rtc100 := index.FindRelease(rtc100ref) + rtc100, err := index.FindRelease("RTCZero", semver.MustParse("1.0.0")) + require.NoError(t, err) require.NotNil(t, rtc100) require.Equal(t, "RTCZero@1.0.0", rtc100.String()) - rtcLatestRef := &Reference{Name: "RTCZero"} - require.Equal(t, "RTCZero", rtcLatestRef.String()) - rtcLatest := index.FindRelease(rtcLatestRef) + rtcLatest, err := index.FindRelease("RTCZero", nil) + require.NoError(t, err) require.NotNil(t, rtcLatest) require.Equal(t, "RTCZero@1.6.0", rtcLatest.String()) - rtcInexistent := index.FindRelease(&Reference{ - Name: "RTCZero", - Version: semver.MustParse("0.0.0-blah"), - }) + rtcInexistent, err := index.FindRelease("RTCZero", semver.MustParse("0.0.0-blah")) + require.Error(t, err) require.Nil(t, rtcInexistent) - rtcInexistent = index.FindRelease(&Reference{ - Name: "RTCZero-blah", - }) + rtcInexistent, err = index.FindRelease("RTCZero-blah", nil) + require.Error(t, err) require.Nil(t, rtcInexistent) rtc := index.FindIndexedLibrary(&libraries.Library{Name: "RTCZero"}) @@ -90,25 +85,29 @@ func TestIndexer(t *testing.T) { rtcInexistent2 := index.FindLibraryUpdate(&libraries.Library{Name: "RTCZero-blah", Version: semver.MustParse("1.0.0")}) require.Nil(t, rtcInexistent2) - resolve1 := index.ResolveDependencies(alp.Releases["1.2.1"]) + resolve1 := index.ResolveDependencies(alp.Releases["1.2.1"], nil) require.Len(t, resolve1, 2) require.Contains(t, resolve1, alp.Releases["1.2.1"]) require.Contains(t, resolve1, rtc.Releases["1.6.0"]) - oauth010 := index.FindRelease(&Reference{Name: "Arduino_OAuth", Version: semver.MustParse("0.1.0")}) + oauth010, err := index.FindRelease("Arduino_OAuth", semver.MustParse("0.1.0")) + require.NoError(t, err) require.NotNil(t, oauth010) require.Equal(t, "Arduino_OAuth@0.1.0", oauth010.String()) - eccx135 := index.FindRelease(&Reference{Name: "ArduinoECCX08", Version: semver.MustParse("1.3.5")}) + eccx135, err := index.FindRelease("ArduinoECCX08", semver.MustParse("1.3.5")) + require.NoError(t, err) require.NotNil(t, eccx135) require.Equal(t, "ArduinoECCX08@1.3.5", eccx135.String()) - bear172 := index.FindRelease(&Reference{Name: "ArduinoBearSSL", Version: semver.MustParse("1.7.2")}) + bear172, err := index.FindRelease("ArduinoBearSSL", semver.MustParse("1.7.2")) + require.NoError(t, err) require.NotNil(t, bear172) require.Equal(t, "ArduinoBearSSL@1.7.2", bear172.String()) - http040 := index.FindRelease(&Reference{Name: "ArduinoHttpClient", Version: semver.MustParse("0.4.0")}) + http040, err := index.FindRelease("ArduinoHttpClient", semver.MustParse("0.4.0")) + require.NoError(t, err) require.NotNil(t, http040) require.Equal(t, "ArduinoHttpClient@0.4.0", http040.String()) - resolve2 := index.ResolveDependencies(oauth010) + resolve2 := index.ResolveDependencies(oauth010, nil) require.Len(t, resolve2, 4) require.Contains(t, resolve2, oauth010) require.Contains(t, resolve2, eccx135) diff --git a/arduino/libraries/librariesindex/json.go b/internal/arduino/libraries/librariesindex/json.go similarity index 92% rename from arduino/libraries/librariesindex/json.go rename to internal/arduino/libraries/librariesindex/json.go index f1820ba9eb9..926ed39edca 100644 --- a/arduino/libraries/librariesindex/json.go +++ b/internal/arduino/libraries/librariesindex/json.go @@ -16,10 +16,10 @@ package librariesindex import ( - "fmt" + "errors" - "github.com/arduino/arduino-cli/arduino/resources" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" easyjson "github.com/mailru/easyjson" semver "go.bug.st/relaxed-semver" @@ -57,19 +57,17 @@ type indexDependency struct { Version string `json:"version,omitempty"` } -var tr = i18n.Tr - // LoadIndex reads a library_index.json and create the corresponding Index func LoadIndex(indexFile *paths.Path) (*Index, error) { buff, err := indexFile.ReadFile() if err != nil { - return nil, fmt.Errorf(tr("reading library_index.json: %s"), err) + return nil, errors.New(i18n.Tr("reading library_index.json: %s", err)) } var i indexJSON err = easyjson.Unmarshal(buff, &i) if err != nil { - return nil, fmt.Errorf(tr("parsing library_index.json: %s"), err) + return nil, errors.New(i18n.Tr("parsing library_index.json: %s", err)) } return i.extractIndex() @@ -126,8 +124,8 @@ func (indexLib *indexRelease) extractReleaseIn(library *Library) { } } -func (indexLib *indexRelease) extractDependencies() []semver.Dependency { - res := []semver.Dependency{} +func (indexLib *indexRelease) extractDependencies() []*Dependency { + res := []*Dependency{} if indexLib.Dependencies == nil || len(indexLib.Dependencies) == 0 { return res } diff --git a/arduino/libraries/librariesindex/json_easyjson.go b/internal/arduino/libraries/librariesindex/json_easyjson.go similarity index 88% rename from arduino/libraries/librariesindex/json_easyjson.go rename to internal/arduino/libraries/librariesindex/json_easyjson.go index 197c24412fa..5af24fa5fdd 100644 --- a/arduino/libraries/librariesindex/json_easyjson.go +++ b/internal/arduino/libraries/librariesindex/json_easyjson.go @@ -19,7 +19,7 @@ var ( _ easyjson.Marshaler ) -func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(in *jlexer.Lexer, out *indexRelease) { +func easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(in *jlexer.Lexer, out *indexRelease) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -323,7 +323,7 @@ func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin in.Consumed() } } -func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(out *jwriter.Writer, in indexRelease) { +func easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(out *jwriter.Writer, in indexRelease) { out.RawByte('{') first := true _ = first @@ -468,27 +468,27 @@ func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin // MarshalJSON supports json.Marshaler interface func (v indexRelease) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(&w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexRelease) MarshalEasyJSON(w *jwriter.Writer) { - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexRelease) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(&r, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexRelease) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(l, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(l, v) } -func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(in *jlexer.Lexer, out *indexJSON) { +func easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(in *jlexer.Lexer, out *indexJSON) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -566,7 +566,7 @@ func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin in.Consumed() } } -func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(out *jwriter.Writer, in indexJSON) { +func easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(out *jwriter.Writer, in indexJSON) { out.RawByte('{') first := true _ = first @@ -592,27 +592,27 @@ func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin // MarshalJSON supports json.Marshaler interface func (v indexJSON) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(&w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexJSON) MarshalEasyJSON(w *jwriter.Writer) { - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexJSON) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(&r, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexJSON) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(l, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(l, v) } -func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(in *jlexer.Lexer, out *indexDependency) { +func easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(in *jlexer.Lexer, out *indexDependency) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -652,7 +652,7 @@ func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin in.Consumed() } } -func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(out *jwriter.Writer, in indexDependency) { +func easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(out *jwriter.Writer, in indexDependency) { out.RawByte('{') first := true _ = first @@ -672,23 +672,23 @@ func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin // MarshalJSON supports json.Marshaler interface func (v indexDependency) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(&w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexDependency) MarshalEasyJSON(w *jwriter.Writer) { - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexDependency) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(&r, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexDependency) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(l, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(l, v) } diff --git a/arduino/libraries/librariesindex/testdata/invalid.json b/internal/arduino/libraries/librariesindex/testdata/invalid.json similarity index 100% rename from arduino/libraries/librariesindex/testdata/invalid.json rename to internal/arduino/libraries/librariesindex/testdata/invalid.json diff --git a/arduino/libraries/librariesindex/testdata/library_index.json b/internal/arduino/libraries/librariesindex/testdata/library_index.json similarity index 100% rename from arduino/libraries/librariesindex/testdata/library_index.json rename to internal/arduino/libraries/librariesindex/testdata/library_index.json diff --git a/arduino/libraries/librarieslist.go b/internal/arduino/libraries/librarieslist.go similarity index 100% rename from arduino/libraries/librarieslist.go rename to internal/arduino/libraries/librarieslist.go diff --git a/arduino/libraries/librariesmanager/install.go b/internal/arduino/libraries/librariesmanager/install.go similarity index 71% rename from arduino/libraries/librariesmanager/install.go rename to internal/arduino/libraries/librariesmanager/install.go index e52d3f9d59a..99c7914fc09 100644 --- a/arduino/libraries/librariesmanager/install.go +++ b/internal/arduino/libraries/librariesmanager/install.go @@ -17,16 +17,17 @@ package librariesmanager import ( "context" + "errors" "fmt" "net/url" "os" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/utils" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/utils" + "github.com/arduino/arduino-cli/internal/i18n" paths "github.com/arduino/go-paths-helper" "github.com/codeclysm/extract/v3" "github.com/go-git/go-git/v5" @@ -58,24 +59,24 @@ type LibraryInstallPlan struct { // InstallPrerequisiteCheck performs prequisite checks to install a library. It returns the // install path, where the library should be installed and the possible library that is already // installed on the same folder and it's going to be replaced by the new one. -func (lm *LibrariesManager) InstallPrerequisiteCheck(name string, version *semver.Version, installLocation libraries.LibraryLocation) (*LibraryInstallPlan, error) { - installDir, err := lm.getLibrariesDir(installLocation) +func (lmi *Installer) InstallPrerequisiteCheck(name string, version *semver.Version, installLocation libraries.LibraryLocation) (*LibraryInstallPlan, error) { + installDir, err := lmi.getLibrariesDir(installLocation) if err != nil { return nil, err } - lm.RescanLibraries() - libs := lm.FindByReference(&librariesindex.Reference{Name: name}, installLocation) + lmi.RescanLibraries() + libs := lmi.FindByReference(name, nil, installLocation) if len(libs) > 1 { libsDir := paths.NewPathList() for _, lib := range libs { libsDir.Add(lib.InstallDir) } - return nil, &arduino.MultipleLibraryInstallDetected{ + return nil, &cmderrors.MultipleLibraryInstallDetected{ LibName: name, LibsDir: libsDir, - Message: tr("Automatic library install can't be performed in this case, please manually remove all duplicates and retry."), + Message: i18n.Tr("Automatic library install can't be performed in this case, please manually remove all duplicates and retry."), } } @@ -90,7 +91,7 @@ func (lm *LibrariesManager) InstallPrerequisiteCheck(name string, version *semve libPath := installDir.Join(utils.SanitizeName(name)) if libPath.IsDir() { if replaced == nil || !replaced.InstallDir.EquivalentTo(libPath) { - return nil, fmt.Errorf(tr("destination dir %s already exists, cannot install"), libPath) + return nil, errors.New(i18n.Tr("destination dir %s already exists, cannot install", libPath)) } } @@ -103,13 +104,8 @@ func (lm *LibrariesManager) InstallPrerequisiteCheck(name string, version *semve }, nil } -// Install installs a library on the specified path. -func (lm *LibrariesManager) Install(indexLibrary *librariesindex.Release, installPath *paths.Path) error { - return indexLibrary.Resource.Install(lm.DownloadsDir, installPath.Parent(), installPath) -} - // importLibraryFromDirectory installs a library by copying it from the given directory. -func (lm *LibrariesManager) importLibraryFromDirectory(libPath *paths.Path, overwrite bool) error { +func (lmi *Installer) importLibraryFromDirectory(libPath *paths.Path, overwrite bool) error { // Check if the library is valid and load metatada if err := validateLibrary(libPath); err != nil { return err @@ -120,50 +116,50 @@ func (lm *LibrariesManager) importLibraryFromDirectory(libPath *paths.Path, over } // Check if the library is already installed and determine install path - installPlan, err := lm.InstallPrerequisiteCheck(library.Name, library.Version, libraries.User) + installPlan, err := lmi.InstallPrerequisiteCheck(library.Name, library.Version, libraries.User) if err != nil { return err } if installPlan.UpToDate { if !overwrite { - return fmt.Errorf(tr("library %s already installed"), installPlan.Name) + return errors.New(i18n.Tr("library %s already installed", installPlan.Name)) } } if installPlan.ReplacedLib != nil { if !overwrite { - return fmt.Errorf(tr("Library %[1]s is already installed, but with a different version: %[2]s", installPlan.Name, installPlan.ReplacedLib)) + return errors.New(i18n.Tr("Library %[1]s is already installed, but with a different version: %[2]s", installPlan.Name, installPlan.ReplacedLib)) } - if err := lm.Uninstall(installPlan.ReplacedLib); err != nil { + if err := lmi.Uninstall(installPlan.ReplacedLib); err != nil { return err } } if installPlan.TargetPath.Exist() { - return fmt.Errorf("%s: %s", tr("destination directory already exists"), installPlan.TargetPath) + return fmt.Errorf("%s: %s", i18n.Tr("destination directory already exists"), installPlan.TargetPath) } if err := libPath.CopyDirTo(installPlan.TargetPath); err != nil { - return fmt.Errorf("%s: %w", tr("copying library to destination directory:"), err) + return fmt.Errorf("%s: %w", i18n.Tr("copying library to destination directory:"), err) } return nil } // Uninstall removes a Library -func (lm *LibrariesManager) Uninstall(lib *libraries.Library) error { +func (lmi *Installer) Uninstall(lib *libraries.Library) error { if lib == nil || lib.InstallDir == nil { - return fmt.Errorf(tr("install directory not set")) + return errors.New(i18n.Tr("install directory not set")) } if err := lib.InstallDir.RemoveAll(); err != nil { - return fmt.Errorf(tr("removing library directory: %s"), err) + return errors.New(i18n.Tr("removing library directory: %s", err)) } - alternatives := lm.Libraries[lib.Name] + alternatives := lmi.libraries[lib.Name] alternatives.Remove(lib) - lm.Libraries[lib.Name] = alternatives + lmi.libraries[lib.Name] = alternatives return nil } // InstallZipLib installs a Zip library on the specified path. -func (lm *LibrariesManager) InstallZipLib(ctx context.Context, archivePath *paths.Path, overwrite bool) error { +func (lmi *Installer) InstallZipLib(ctx context.Context, archivePath *paths.Path, overwrite bool) error { // Clone library in a temporary directory tmpDir, err := paths.MkTempDir("", "") if err != nil { @@ -180,7 +176,7 @@ func (lm *LibrariesManager) InstallZipLib(ctx context.Context, archivePath *path // Extract to a temporary directory so we can check if the zip is structured correctly. // We also use the top level folder from the archive to infer the library name. if err := extract.Archive(ctx, file, tmpDir.String(), nil); err != nil { - return fmt.Errorf(tr("extracting archive: %w"), err) + return fmt.Errorf("%s: %w", i18n.Tr("extracting archive"), err) } libRootFiles, err := tmpDir.ReadDir() @@ -189,23 +185,23 @@ func (lm *LibrariesManager) InstallZipLib(ctx context.Context, archivePath *path } libRootFiles.FilterOutPrefix("__MACOSX") // Ignores metadata from Mac OS X if len(libRootFiles) > 1 { - return fmt.Errorf(tr("archive is not valid: multiple files found in zip file top level")) + return errors.New(i18n.Tr("archive is not valid: multiple files found in zip file top level")) } if len(libRootFiles) == 0 { - return fmt.Errorf(tr("archive is not valid: no files found in zip file top level")) + return errors.New(i18n.Tr("archive is not valid: no files found in zip file top level")) } tmpInstallPath := libRootFiles[0] // Install extracted library in the destination directory - if err := lm.importLibraryFromDirectory(tmpInstallPath, overwrite); err != nil { - return fmt.Errorf(tr("moving extracted archive to destination dir: %s"), err) + if err := lmi.importLibraryFromDirectory(tmpInstallPath, overwrite); err != nil { + return errors.New(i18n.Tr("moving extracted archive to destination dir: %s", err)) } return nil } // InstallGitLib installs a library hosted on a git repository on the specified path. -func (lm *LibrariesManager) InstallGitLib(gitURL string, overwrite bool) error { +func (lmi *Installer) InstallGitLib(gitURL string, overwrite bool) error { gitLibraryName, ref, err := parseGitURL(gitURL) if err != nil { return err @@ -246,8 +242,8 @@ func (lm *LibrariesManager) InstallGitLib(gitURL string, overwrite bool) error { tmpInstallPath.Join(".git").RemoveAll() // Install extracted library in the destination directory - if err := lm.importLibraryFromDirectory(tmpInstallPath, overwrite); err != nil { - return fmt.Errorf(tr("moving extracted archive to destination dir: %s"), err) + if err := lmi.importLibraryFromDirectory(tmpInstallPath, overwrite); err != nil { + return errors.New(i18n.Tr("moving extracted archive to destination dir: %s", err)) } return nil @@ -269,7 +265,7 @@ func parseGitURL(gitURL string) (string, plumbing.Revision, error) { res = strings.TrimSuffix(parsed.Path[i+1:], ".git") rev = plumbing.Revision(parsed.Fragment) } else { - return "", "", fmt.Errorf(tr("invalid git url")) + return "", "", errors.New(i18n.Tr("invalid git url")) } return res, rev, nil } @@ -279,7 +275,7 @@ func parseGitURL(gitURL string) (string, plumbing.Revision, error) { // Returns nil if dir contains a valid library, error on all other cases. func validateLibrary(dir *paths.Path) error { if dir.NotExist() { - return fmt.Errorf(tr("directory doesn't exist: %s", dir)) + return errors.New(i18n.Tr("directory doesn't exist: %s", dir)) } searchHeaderFile := func(d *paths.Path) (bool, error) { @@ -289,7 +285,7 @@ func validateLibrary(dir *paths.Path) error { } dirContent, err := d.ReadDir() if err != nil { - return false, fmt.Errorf(tr("reading directory %s content: %w", dir, err)) + return false, fmt.Errorf("%s: %w", i18n.Tr("reading directory %s content", dir), err) } dirContent.FilterOutDirs() headerExtensions := []string{} @@ -316,5 +312,5 @@ func validateLibrary(dir *paths.Path) error { return nil } - return fmt.Errorf(tr("library not valid")) + return errors.New(i18n.Tr("library not valid")) } diff --git a/arduino/libraries/librariesmanager/install_test.go b/internal/arduino/libraries/librariesmanager/install_test.go similarity index 100% rename from arduino/libraries/librariesmanager/install_test.go rename to internal/arduino/libraries/librariesmanager/install_test.go diff --git a/internal/arduino/libraries/librariesmanager/librariesmanager.go b/internal/arduino/libraries/librariesmanager/librariesmanager.go new file mode 100644 index 00000000000..f5883d6673b --- /dev/null +++ b/internal/arduino/libraries/librariesmanager/librariesmanager.go @@ -0,0 +1,261 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package librariesmanager + +import ( + "errors" + "fmt" + "os" + "slices" + "strings" + "sync" + + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/i18n" + paths "github.com/arduino/go-paths-helper" + "github.com/sirupsen/logrus" + semver "go.bug.st/relaxed-semver" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +// Builder is used to create a new LibrariesManager. The builder has +// methods to load and parse libraries and to actually build the +// LibraryManager. Once the LibrariesManager is built, it cannot be +// altered anymore. +type Builder struct { + *LibrariesManager +} + +// Explorer is used to query the library manager about the installed libraries. +type Explorer struct { + *LibrariesManager +} + +// Installer is used to rescan installed libraries after install/uninstall. +type Installer struct { + *LibrariesManager +} + +// LibrariesManager keeps the current status of the libraries in the system +// (the list of libraries, revisions, installed paths, etc.) +type LibrariesManager struct { + librariesLock sync.RWMutex + librariesDir []*LibrariesDir + libraries map[string]libraries.List +} + +// LibrariesDir is a directory containing libraries +type LibrariesDir struct { + Path *paths.Path + Location libraries.LibraryLocation + PlatformRelease *cores.PlatformRelease + IsSingleLibrary bool // true if Path points directly to a library instad of a dir of libraries + scanned bool +} + +// Names returns an array with all the names of the installed libraries. +func (lm *Explorer) Names() []string { + res := make([]string, len(lm.libraries)) + i := 0 + for n := range lm.libraries { + res[i] = n + i++ + } + slices.SortFunc(res, func(a, b string) int { + if strings.ToLower(a) < strings.ToLower(b) { + return -1 + } + return 1 + }) + return res +} + +// NewBuilder creates a new library manager builder. +func NewBuilder() *Builder { + return &Builder{ + &LibrariesManager{ + libraries: map[string]libraries.List{}, + }, + } +} + +// Clone creates a Builder starting with a copy of the same configuration +// of this LibrariesManager. At the moment of the Build() only the added +// libraries directories will be scanned, keeping the existing directories +// "cached" to optimize scan. If you need to do a full rescan you must use +// the RescanLibraries method of the Installer. +func (lm *LibrariesManager) Clone() *Builder { + lmb := NewBuilder() + lmb.librariesDir = append(lmb.librariesDir, lm.librariesDir...) + for libName, libAlternatives := range lm.libraries { + // TODO: Maybe we should deep clone libAlternatives... + lmb.libraries[libName] = append(lmb.libraries[libName], libAlternatives...) + } + return lmb +} + +// NewExplorer returns a new Explorer. The returned function must be called +// to release the lock on the LibrariesManager. +func (lm *LibrariesManager) NewExplorer() (*Explorer, func()) { + lm.librariesLock.RLock() + return &Explorer{lm}, lm.librariesLock.RUnlock +} + +// NewInstaller returns a new Installer. The returned function must be called +// to release the lock on the LibrariesManager. +func (lm *LibrariesManager) NewInstaller() (*Installer, func()) { + lm.librariesLock.Lock() + return &Installer{lm}, lm.librariesLock.Unlock +} + +// Build builds a new LibrariesManager. +func (lmb *Builder) Build() (*LibrariesManager, []*status.Status) { + var statuses []*status.Status + res := &LibrariesManager{} + for _, dir := range lmb.librariesDir { + if !dir.scanned { + if errs := lmb.loadLibrariesFromDir(dir); len(errs) > 0 { + statuses = append(statuses, errs...) + } + } + } + lmb.BuildIntoExistingLibrariesManager(res) + return res, statuses +} + +// BuildIntoExistingLibrariesManager will overwrite the given LibrariesManager instead +// of building a new one. +func (lmb *Builder) BuildIntoExistingLibrariesManager(old *LibrariesManager) { + old.librariesLock.Lock() + old.librariesDir = lmb.librariesDir + old.libraries = lmb.libraries + old.librariesLock.Unlock() +} + +// AddLibrariesDir adds path to the list of directories +// to scan when searching for libraries. If a path is already +// in the list it is ignored. +func (lmb *Builder) AddLibrariesDir(libDir LibrariesDir) { + if libDir.Path == nil { + return + } + for _, dir := range lmb.librariesDir { + if dir.Path.EquivalentTo(libDir.Path) { + return + } + } + logrus.WithField("dir", libDir.Path). + WithField("location", libDir.Location.String()). + WithField("isSingleLibrary", libDir.IsSingleLibrary). + Info("Adding libraries dir") + lmb.librariesDir = append(lmb.librariesDir, &libDir) +} + +// RescanLibraries reload all installed libraries in the system. +func (lmi *Installer) RescanLibraries() []*status.Status { + lmi.libraries = map[string]libraries.List{} + statuses := []*status.Status{} + for _, dir := range lmi.librariesDir { + if errs := lmi.loadLibrariesFromDir(dir); len(errs) > 0 { + statuses = append(statuses, errs...) + } + } + return statuses +} + +func (lm *LibrariesManager) getLibrariesDir(installLocation libraries.LibraryLocation) (*paths.Path, error) { + for _, dir := range lm.librariesDir { + if dir.Location == installLocation { + return dir.Path, nil + } + } + switch installLocation { + case libraries.User: + return nil, errors.New(i18n.Tr("user directory not set")) + case libraries.IDEBuiltIn: + return nil, errors.New(i18n.Tr("built-in libraries directory not set")) + default: + return nil, fmt.Errorf("libraries directory not set: %s", installLocation.String()) + } +} + +// loadLibrariesFromDir loads all libraries in the given directory. Returns +// nil if the directory doesn't exists. +func (lm *LibrariesManager) loadLibrariesFromDir(librariesDir *LibrariesDir) []*status.Status { + statuses := []*status.Status{} + + librariesDir.scanned = true + + var libDirs paths.PathList + if librariesDir.IsSingleLibrary { + libDirs.Add(librariesDir.Path) + } else { + d, err := librariesDir.Path.ReadDir() + if os.IsNotExist(err) { + return statuses + } + if err != nil { + s := status.Newf(codes.FailedPrecondition, i18n.Tr("reading dir %[1]s: %[2]s", librariesDir.Path, err)) + return append(statuses, s) + } + d.FilterDirs() + d.FilterOutHiddenFiles() + libDirs = d + } + + for _, libDir := range libDirs { + library, err := libraries.Load(libDir, librariesDir.Location) + if err != nil { + s := status.Newf(codes.Internal, i18n.Tr("loading library from %[1]s: %[2]s", libDir, err)) + statuses = append(statuses, s) + continue + } + library.ContainerPlatform = librariesDir.PlatformRelease + alternatives := lm.libraries[library.Name] + alternatives.Add(library) + lm.libraries[library.Name] = alternatives + } + + return statuses +} + +// FindByReference return the installed libraries matching the Reference +// name and version or, if the version is nil, the libraries installed +// in the installLocation. +func (lmi *Installer) FindByReference(name string, version *semver.Version, installLocation libraries.LibraryLocation) libraries.List { + alternatives := lmi.libraries[name] + if alternatives == nil { + return nil + } + return alternatives.FilterByVersionAndInstallLocation(version, installLocation) +} + +// FindAllInstalled returns all the installed libraries +func (lm *LibrariesManager) FindAllInstalled() libraries.List { + var res libraries.List + for _, libAlternatives := range lm.libraries { + for _, libRelease := range libAlternatives { + // TODO: is this check redundant? + if libRelease.InstallDir == nil { + continue + } + res.Add(libRelease) + } + } + return res +} diff --git a/arduino/libraries/librariesmanager/download.go b/internal/arduino/libraries/librariesmanager/librariesmanager_test.go similarity index 50% rename from arduino/libraries/librariesmanager/download.go rename to internal/arduino/libraries/librariesmanager/librariesmanager_test.go index 254f88a981d..0b7fd3a7857 100644 --- a/arduino/libraries/librariesmanager/download.go +++ b/internal/arduino/libraries/librariesmanager/librariesmanager_test.go @@ -12,21 +12,34 @@ // modify or otherwise use the software for commercial activities involving the // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. - package librariesmanager import ( - "net/url" -) + "testing" -// LibraryIndexURL is the URL where to get the library index. -var LibraryIndexURL, _ = url.Parse("https://downloads.arduino.cc/libraries/library_index.json") + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/stretchr/testify/require" +) -// LibraryIndexGZURL is the URL where to get the gzipped library index. -var LibraryIndexGZURL, _ = url.Parse("https://downloads.arduino.cc/libraries/library_index.json.gz") +func TestLibrariesBuilderScanCloneRescan(t *testing.T) { + lmb := NewBuilder() + lmb.libraries["testLibA"] = libraries.List{} + lmb.libraries["testLibB"] = libraries.List{} + lm, warns := lmb.Build() + require.Empty(t, warns) + require.Len(t, lm.libraries, 2) -// LibraryIndexSignature is the URL where to get the library index signature. -var LibraryIndexSignature, _ = url.Parse("https://downloads.arduino.cc/libraries/library_index.json.sig") + // Cloning should keep existing libraries + lm2, warns2 := lm.Clone().Build() + require.Empty(t, warns2) + require.Len(t, lm2.libraries, 2) -// LibraryIndexWithSignatureArchiveURL is the URL where to get the library index. -var LibraryIndexWithSignatureArchiveURL, _ = url.Parse("https://downloads.arduino.cc/libraries/library_index.tar.bz2") + // Full rescan should update libs + { + lmi2, release := lm2.NewInstaller() + lmi2.RescanLibraries() + release() + } + require.Len(t, lm.libraries, 2) // Ensure deep-coping worked as expected... + require.Len(t, lm2.libraries, 0) +} diff --git a/arduino/libraries/librariesresolver/cpp.go b/internal/arduino/libraries/librariesresolver/cpp.go similarity index 77% rename from arduino/libraries/librariesresolver/cpp.go rename to internal/arduino/libraries/librariesresolver/cpp.go index f817a68f7eb..e842b764ace 100644 --- a/arduino/libraries/librariesresolver/cpp.go +++ b/internal/arduino/libraries/librariesresolver/cpp.go @@ -16,15 +16,15 @@ package librariesresolver import ( + "errors" "fmt" "path/filepath" "strings" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/utils" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/utils" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/schollz/closestmatch" "github.com/sirupsen/logrus" ) @@ -34,74 +34,60 @@ type Cpp struct { headers map[string]libraries.List } -var tr = i18n.Tr - // NewCppResolver creates a new Cpp resolver -func NewCppResolver() *Cpp { - return &Cpp{ +func NewCppResolver(allLibs []*libraries.Library, targetPlatform, actualPlatform *cores.PlatformRelease) *Cpp { + resolver := &Cpp{ headers: map[string]libraries.List{}, } -} - -// ScanFromLibrariesManager reads all librariers loaded in the LibrariesManager to find -// and cache all C++ headers for later retrieval -func (resolver *Cpp) ScanFromLibrariesManager(lm *librariesmanager.LibrariesManager) error { - for _, libAlternatives := range lm.Libraries { - for _, lib := range libAlternatives { - resolver.ScanLibrary(lib) - } + resolver.ScanIDEBuiltinLibraries(allLibs) + resolver.ScanUserAndUnmanagedLibraries(allLibs) + resolver.ScanPlatformLibraries(allLibs, targetPlatform) + if actualPlatform != targetPlatform { + resolver.ScanPlatformLibraries(allLibs, actualPlatform) } - return nil + + return resolver } // ScanIDEBuiltinLibraries reads ide-builtin librariers loaded in the LibrariesManager to find // and cache all C++ headers for later retrieval. -func (resolver *Cpp) ScanIDEBuiltinLibraries(lm *librariesmanager.LibrariesManager) error { - for _, libAlternatives := range lm.Libraries { - for _, lib := range libAlternatives { - if lib.Location == libraries.IDEBuiltIn { - resolver.ScanLibrary(lib) - } +func (resolver *Cpp) ScanIDEBuiltinLibraries(allLibs []*libraries.Library) { + for _, lib := range allLibs { + if lib.Location == libraries.IDEBuiltIn { + _ = resolver.ScanLibrary(lib) } } - return nil } // ScanUserAndUnmanagedLibraries reads user/unmanaged librariers loaded in the LibrariesManager to find // and cache all C++ headers for later retrieval. -func (resolver *Cpp) ScanUserAndUnmanagedLibraries(lm *librariesmanager.LibrariesManager) error { - for _, libAlternatives := range lm.Libraries { - for _, lib := range libAlternatives { - if lib.Location == libraries.User || lib.Location == libraries.Unmanaged { - resolver.ScanLibrary(lib) - } +func (resolver *Cpp) ScanUserAndUnmanagedLibraries(allLibs []*libraries.Library) { + for _, lib := range allLibs { + if lib.Location == libraries.User || lib.Location == libraries.Unmanaged { + _ = resolver.ScanLibrary(lib) } } - return nil } // ScanPlatformLibraries reads platform-bundled libraries for a specific platform loaded in the LibrariesManager // to find and cache all C++ headers for later retrieval. -func (resolver *Cpp) ScanPlatformLibraries(lm *librariesmanager.LibrariesManager, platform *cores.PlatformRelease) error { - for _, libAlternatives := range lm.Libraries { - for _, lib := range libAlternatives { - if lib.Location != libraries.PlatformBuiltIn && lib.Location != libraries.ReferencedPlatformBuiltIn { - continue - } - if lib.ContainerPlatform != platform { - continue - } - resolver.ScanLibrary(lib) +func (resolver *Cpp) ScanPlatformLibraries(allLibs []*libraries.Library, platform *cores.PlatformRelease) { + for _, lib := range allLibs { + if lib.Location != libraries.PlatformBuiltIn && lib.Location != libraries.ReferencedPlatformBuiltIn { + continue } + if lib.ContainerPlatform != platform { + continue + } + _ = resolver.ScanLibrary(lib) } - return nil } // ScanLibrary reads a library to find and cache C++ headers for later retrieval func (resolver *Cpp) ScanLibrary(lib *libraries.Library) error { cppHeaders, err := lib.SourceHeaders() if err != nil { - return fmt.Errorf(tr("reading lib headers: %s"), err) + return errors.New(i18n.Tr("reading lib headers: %s", err)) } for _, cppHeader := range cppHeaders { l := resolver.headers[cppHeader] diff --git a/arduino/libraries/librariesresolver/cpp_test.go b/internal/arduino/libraries/librariesresolver/cpp_test.go similarity index 94% rename from arduino/libraries/librariesresolver/cpp_test.go rename to internal/arduino/libraries/librariesresolver/cpp_test.go index 3be147636ac..a82da18f465 100644 --- a/arduino/libraries/librariesresolver/cpp_test.go +++ b/internal/arduino/libraries/librariesresolver/cpp_test.go @@ -18,7 +18,7 @@ package librariesresolver import ( "testing" - "github.com/arduino/arduino-cli/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries" "github.com/stretchr/testify/require" ) @@ -35,7 +35,7 @@ var bundleServo = &libraries.Library{Name: "Servo", Location: libraries.IDEBuilt func runResolver(include string, arch string, libs ...*libraries.Library) *libraries.Library { libraryList := libraries.List{} libraryList.Add(libs...) - resolver := NewCppResolver() + resolver := &Cpp{headers: make(map[string]libraries.List)} resolver.headers[include] = libraryList return resolver.ResolveFor(include, arch) } @@ -95,7 +95,7 @@ func TestClosestMatchWithTotallyDifferentNames(t *testing.T) { libraryList.Add(l6) libraryList.Add(l7) libraryList.Add(l8) - resolver := NewCppResolver() + resolver := &Cpp{headers: make(map[string]libraries.List)} resolver.headers["XYZ.h"] = libraryList res := resolver.ResolveFor("XYZ.h", "xyz") require.NotNil(t, res) @@ -121,7 +121,7 @@ func TestCppHeaderPriority(t *testing.T) { } func TestCppHeaderResolverWithNilResult(t *testing.T) { - resolver := NewCppResolver() + resolver := &Cpp{headers: make(map[string]libraries.List)} libraryList := libraries.List{} libraryList.Add(l1) resolver.headers["aaa.h"] = libraryList @@ -130,7 +130,7 @@ func TestCppHeaderResolverWithNilResult(t *testing.T) { func TestCppHeaderResolver(t *testing.T) { resolve := func(header string, libs ...*libraries.Library) string { - resolver := NewCppResolver() + resolver := &Cpp{headers: make(map[string]libraries.List)} librarylist := libraries.List{} for _, lib := range libs { librarylist.Add(lib) @@ -149,7 +149,7 @@ func TestCppHeaderResolver(t *testing.T) { } func TestCppHeaderResolverWithLibrariesInStrangeDirectoryNames(t *testing.T) { - resolver := NewCppResolver() + resolver := &Cpp{headers: make(map[string]libraries.List)} librarylist := libraries.List{} librarylist.Add(&libraries.Library{DirName: "onewire_2_3_4", Name: "OneWire", Architectures: []string{"*"}}) librarylist.Add(&libraries.Library{DirName: "onewireng_2_3_4", Name: "OneWireNg", Architectures: []string{"avr"}}) diff --git a/arduino/libraries/loader.go b/internal/arduino/libraries/loader.go similarity index 92% rename from arduino/libraries/loader.go rename to internal/arduino/libraries/loader.go index f278c85d40f..f3d3c896383 100644 --- a/arduino/libraries/loader.go +++ b/internal/arduino/libraries/loader.go @@ -16,13 +16,14 @@ package libraries import ( + "errors" "fmt" "strings" - "github.com/arduino/arduino-cli/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" semver "go.bug.st/relaxed-semver" ) @@ -51,7 +52,7 @@ func addUtilityDirectory(library *Library) { func makeNewLibrary(libraryDir *paths.Path, location LibraryLocation) (*Library, error) { libProperties, err := properties.Load(libraryDir.Join("library.properties").String()) if err != nil { - return nil, fmt.Errorf(tr("loading library.properties: %s"), err) + return nil, errors.New(i18n.Tr("loading library.properties: %s", err)) } if libProperties.Get("maintainer") == "" && libProperties.Get("email") != "" { @@ -113,7 +114,7 @@ func makeNewLibrary(libraryDir *paths.Path, location LibraryLocation) (*Library, } if err := addExamples(library); err != nil { - return nil, errors.Errorf(tr("scanning examples: %s"), err) + return nil, fmt.Errorf("%s: %w", i18n.Tr("scanning sketch examples"), err) } library.DirName = libraryDir.Base() library.Name = strings.TrimSpace(libProperties.Get("name")) @@ -136,7 +137,7 @@ func makeLegacyLibrary(path *paths.Path, location LibraryLocation) (*Library, er if foundHeader, err := containsHeaderFile(path); err != nil { return nil, err } else if !foundHeader { - return nil, errors.Errorf(tr("invalid library: no header files found")) + return nil, errors.New(i18n.Tr("invalid library: no header files found")) } library := &Library{ InstallDir: path.Canonical(), @@ -151,7 +152,7 @@ func makeLegacyLibrary(path *paths.Path, location LibraryLocation) (*Library, er InDevelopment: path.Join(".development").Exist(), } if err := addExamples(library); err != nil { - return nil, errors.Errorf(tr("scanning examples: %s"), err) + return nil, fmt.Errorf("%s: %w", i18n.Tr("scanning sketch examples"), err) } addUtilityDirectory(library) return library, nil @@ -195,7 +196,7 @@ func addExamplesToPathList(examplesPath *paths.Path, list *paths.PathList) error func containsHeaderFile(d *paths.Path) (bool, error) { dirContent, err := d.ReadDir() if err != nil { - return false, fmt.Errorf(tr("reading directory %[1]s content: %[2]w", d, err)) + return false, fmt.Errorf("%s: %w", i18n.Tr("reading directory %[1]s content", d), err) } dirContent.FilterOutDirs() headerExtensions := []string{} diff --git a/arduino/libraries/testdata/LegacyLib/LegacyLib.h b/internal/arduino/libraries/testdata/LegacyLib/LegacyLib.h similarity index 100% rename from arduino/libraries/testdata/LegacyLib/LegacyLib.h rename to internal/arduino/libraries/testdata/LegacyLib/LegacyLib.h diff --git a/arduino/libraries/testdata/LibWithNonUTF8Properties/library.properties b/internal/arduino/libraries/testdata/LibWithNonUTF8Properties/library.properties similarity index 100% rename from arduino/libraries/testdata/LibWithNonUTF8Properties/library.properties rename to internal/arduino/libraries/testdata/LibWithNonUTF8Properties/library.properties diff --git a/arduino/libraries/testdata/LibWithNonUTF8Properties/src/LibWithNonUTF8Properties.h b/internal/arduino/libraries/testdata/LibWithNonUTF8Properties/src/LibWithNonUTF8Properties.h similarity index 100% rename from arduino/libraries/testdata/LibWithNonUTF8Properties/src/LibWithNonUTF8Properties.h rename to internal/arduino/libraries/testdata/LibWithNonUTF8Properties/src/LibWithNonUTF8Properties.h diff --git a/arduino/libraries/testdata/TestLib/library.properties b/internal/arduino/libraries/testdata/TestLib/library.properties similarity index 100% rename from arduino/libraries/testdata/TestLib/library.properties rename to internal/arduino/libraries/testdata/TestLib/library.properties diff --git a/arduino/libraries/testdata/TestLib/src/TestLib.h b/internal/arduino/libraries/testdata/TestLib/src/TestLib.h similarity index 100% rename from arduino/libraries/testdata/TestLib/src/TestLib.h rename to internal/arduino/libraries/testdata/TestLib/src/TestLib.h diff --git a/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.ino b/internal/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.ino similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.ino rename to internal/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.ino diff --git a/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.pde b/internal/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.pde similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.pde rename to internal/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.pde diff --git a/arduino/libraries/testdata/TestLibExamples/examples/WrongCasing/wrongCasing.ino b/internal/arduino/libraries/testdata/TestLibExamples/examples/WrongCasing/wrongCasing.ino similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/examples/WrongCasing/wrongCasing.ino rename to internal/arduino/libraries/testdata/TestLibExamples/examples/WrongCasing/wrongCasing.ino diff --git a/arduino/libraries/testdata/TestLibExamples/examples/simple/simple.ino b/internal/arduino/libraries/testdata/TestLibExamples/examples/simple/simple.ino similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/examples/simple/simple.ino rename to internal/arduino/libraries/testdata/TestLibExamples/examples/simple/simple.ino diff --git a/arduino/libraries/testdata/TestLibExamples/library.properties b/internal/arduino/libraries/testdata/TestLibExamples/library.properties similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/library.properties rename to internal/arduino/libraries/testdata/TestLibExamples/library.properties diff --git a/arduino/libraries/testdata/TestLibExamples/src/TestLib.h b/internal/arduino/libraries/testdata/TestLibExamples/src/TestLib.h similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/src/TestLib.h rename to internal/arduino/libraries/testdata/TestLibExamples/src/TestLib.h diff --git a/arduino/libraries/testdata/TestLibInDev/.development b/internal/arduino/libraries/testdata/TestLibInDev/.development similarity index 100% rename from arduino/libraries/testdata/TestLibInDev/.development rename to internal/arduino/libraries/testdata/TestLibInDev/.development diff --git a/arduino/libraries/testdata/TestLibInDev/library.properties b/internal/arduino/libraries/testdata/TestLibInDev/library.properties similarity index 100% rename from arduino/libraries/testdata/TestLibInDev/library.properties rename to internal/arduino/libraries/testdata/TestLibInDev/library.properties diff --git a/arduino/libraries/testdata/TestLibInDev/src/TestLib.h b/internal/arduino/libraries/testdata/TestLibInDev/src/TestLib.h similarity index 100% rename from arduino/libraries/testdata/TestLibInDev/src/TestLib.h rename to internal/arduino/libraries/testdata/TestLibInDev/src/TestLib.h diff --git a/arduino/monitor/monitor.go b/internal/arduino/monitor/monitor.go similarity index 91% rename from arduino/monitor/monitor.go rename to internal/arduino/monitor/monitor.go index 10650dcebc3..b4603f0b6c2 100644 --- a/arduino/monitor/monitor.go +++ b/internal/arduino/monitor/monitor.go @@ -20,15 +20,16 @@ package monitor import ( "encoding/json" + "errors" "fmt" "io" "net" "strings" "time" - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/arduino-cli/version" + "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" ) @@ -36,7 +37,7 @@ import ( type PluggableMonitor struct { id string processArgs []string - process *executils.Process + process *paths.Process outgoingCommandsPipe io.Writer incomingMessagesChan <-chan *monitorMessage supportedProtocol string @@ -83,8 +84,6 @@ func (msg monitorMessage) String() string { return s } -var tr = i18n.Tr - // New create and connect to the given pluggable monitor func New(id string, args ...string) *PluggableMonitor { return &PluggableMonitor{ @@ -137,20 +136,20 @@ func (mon *PluggableMonitor) waitMessage(timeout time.Duration, expectedEvt stri } msg = m case <-time.After(timeout): - return nil, fmt.Errorf(tr("timeout waiting for message")) + return nil, errors.New(i18n.Tr("timeout waiting for message")) } if expectedEvt == "" { // No message processing required for this call return msg, nil } if msg.EventType != expectedEvt { - return msg, fmt.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), expectedEvt, msg.EventType) + return msg, errors.New(i18n.Tr("communication out of sync, expected '%[1]s', received '%[2]s'", expectedEvt, msg.EventType)) } if msg.Error { - return msg, fmt.Errorf(tr("command '%[1]s' failed: %[2]s"), expectedEvt, msg.Message) + return msg, errors.New(i18n.Tr("command '%[1]s' failed: %[2]s", expectedEvt, msg.Message)) } if strings.ToUpper(msg.Message) != "OK" { - return msg, fmt.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "OK", msg.Message) + return msg, errors.New(i18n.Tr("communication out of sync, expected '%[1]s', received '%[2]s'", "OK", msg.Message)) } return msg, nil } @@ -172,7 +171,7 @@ func (mon *PluggableMonitor) sendCommand(command string) error { func (mon *PluggableMonitor) runProcess() error { mon.log.Infof("Starting monitor process") - proc, err := executils.NewProcess(nil, mon.processArgs...) + proc, err := paths.NewProcess(nil, mon.processArgs...) if err != nil { return err } @@ -233,7 +232,7 @@ func (mon *PluggableMonitor) Run() (err error) { if msg, err := mon.waitMessage(time.Second*10, "hello"); err != nil { return err } else if msg.ProtocolVersion > 1 { - return fmt.Errorf(tr("protocol version not supported: requested %[1]d, got %[2]d"), 1, msg.ProtocolVersion) + return errors.New(i18n.Tr("protocol version not supported: requested %[1]d, got %[2]d", 1, msg.ProtocolVersion)) } return nil } @@ -292,7 +291,7 @@ func (mon *PluggableMonitor) Close() error { if err := mon.sendCommand("CLOSE\n"); err != nil { return err } - _, err := mon.waitMessage(time.Millisecond*250, "close") + _, err := mon.waitMessage(time.Millisecond*5000, "close") return err } diff --git a/arduino/monitor/monitor_test.go b/internal/arduino/monitor/monitor_test.go similarity index 94% rename from arduino/monitor/monitor_test.go rename to internal/arduino/monitor/monitor_test.go index cf45771c4b1..45a6c2c5de1 100644 --- a/arduino/monitor/monitor_test.go +++ b/internal/arduino/monitor/monitor_test.go @@ -24,7 +24,6 @@ import ( "testing" "time" - "github.com/arduino/arduino-cli/executils" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" ) @@ -33,7 +32,7 @@ func TestDummyMonitor(t *testing.T) { // Build `dummy-monitor` helper inside testdata/dummy-monitor testDataDir, err := paths.New("testdata").Abs() require.NoError(t, err) - builder, err := executils.NewProcess(nil, "go", "install", "github.com/arduino/pluggable-monitor-protocol-handler/dummy-monitor@main") + builder, err := paths.NewProcess(nil, "go", "install", "github.com/arduino/pluggable-monitor-protocol-handler/dummy-monitor@main") fmt.Println(testDataDir.String()) env := os.Environ() env = append(env, "GOBIN="+testDataDir.String()) diff --git a/arduino/monitor/testdata/.gitignore b/internal/arduino/monitor/testdata/.gitignore similarity index 100% rename from arduino/monitor/testdata/.gitignore rename to internal/arduino/monitor/testdata/.gitignore diff --git a/arduino/resources/checksums.go b/internal/arduino/resources/checksums.go similarity index 73% rename from arduino/resources/checksums.go rename to internal/arduino/resources/checksums.go index cadd3ea6685..ecd50b5bcc9 100644 --- a/arduino/resources/checksums.go +++ b/internal/arduino/resources/checksums.go @@ -21,6 +21,7 @@ import ( "crypto/sha256" "encoding/hex" "encoding/json" + "errors" "fmt" "hash" "io" @@ -28,24 +29,22 @@ import ( "path/filepath" "strings" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" paths "github.com/arduino/go-paths-helper" ) -var tr = i18n.Tr - // TestLocalArchiveChecksum test if the checksum of the local archive match the checksum of the DownloadResource func (r *DownloadResource) TestLocalArchiveChecksum(downloadDir *paths.Path) (bool, error) { if r.Checksum == "" { - return false, fmt.Errorf(tr("missing checksum for: %s"), r.ArchiveFileName) + return false, errors.New(i18n.Tr("missing checksum for: %s", r.ArchiveFileName)) } split := strings.SplitN(r.Checksum, ":", 2) if len(split) != 2 { - return false, fmt.Errorf(tr("invalid checksum format: %s"), r.Checksum) + return false, errors.New(i18n.Tr("invalid checksum format: %s", r.Checksum)) } digest, err := hex.DecodeString(split[1]) if err != nil { - return false, fmt.Errorf(tr("invalid hash '%[1]s': %[2]s"), split[1], err) + return false, errors.New(i18n.Tr("invalid hash '%[1]s': %[2]s", split[1], err)) } // names based on: https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#MessageDigest @@ -58,25 +57,25 @@ func (r *DownloadResource) TestLocalArchiveChecksum(downloadDir *paths.Path) (bo case "MD5": algo = crypto.MD5.New() default: - return false, fmt.Errorf(tr("unsupported hash algorithm: %s"), split[0]) + return false, errors.New(i18n.Tr("unsupported hash algorithm: %s", split[0])) } filePath, err := r.ArchivePath(downloadDir) if err != nil { - return false, fmt.Errorf(tr("getting archive path: %s"), err) + return false, errors.New(i18n.Tr("getting archive path: %s", err)) } file, err := os.Open(filePath.String()) if err != nil { - return false, fmt.Errorf(tr("opening archive file: %s"), err) + return false, errors.New(i18n.Tr("opening archive file: %s", err)) } defer file.Close() if _, err := io.Copy(algo, file); err != nil { - return false, fmt.Errorf(tr("computing hash: %s"), err) + return false, errors.New(i18n.Tr("computing hash: %s", err)) } if !bytes.Equal(algo.Sum(nil), digest) { - return false, fmt.Errorf(tr("archive hash differs from hash in index")) + return false, errors.New(i18n.Tr("archive hash differs from hash in index")) } return true, nil @@ -86,14 +85,14 @@ func (r *DownloadResource) TestLocalArchiveChecksum(downloadDir *paths.Path) (bo func (r *DownloadResource) TestLocalArchiveSize(downloadDir *paths.Path) (bool, error) { filePath, err := r.ArchivePath(downloadDir) if err != nil { - return false, fmt.Errorf(tr("getting archive path: %s"), err) + return false, errors.New(i18n.Tr("getting archive path: %s", err)) } info, err := filePath.Stat() if err != nil { - return false, fmt.Errorf(tr("getting archive info: %s"), err) + return false, errors.New(i18n.Tr("getting archive info: %s", err)) } if info.Size() != r.Size { - return false, fmt.Errorf("%s: %d != %d", tr("fetched archive size differs from size specified in index"), info.Size(), r.Size) + return false, fmt.Errorf("%s: %d != %d", i18n.Tr("fetched archive size differs from size specified in index"), info.Size(), r.Size) } return true, nil @@ -102,20 +101,20 @@ func (r *DownloadResource) TestLocalArchiveSize(downloadDir *paths.Path) (bool, // TestLocalArchiveIntegrity checks for integrity of the local archive. func (r *DownloadResource) TestLocalArchiveIntegrity(downloadDir *paths.Path) (bool, error) { if cached, err := r.IsCached(downloadDir); err != nil { - return false, fmt.Errorf(tr("testing if archive is cached: %s"), err) + return false, errors.New(i18n.Tr("testing if archive is cached: %s", err)) } else if !cached { return false, nil } if ok, err := r.TestLocalArchiveSize(downloadDir); err != nil { - return false, fmt.Errorf(tr("testing archive size: %s"), err) + return false, errors.New(i18n.Tr("testing archive size: %s", err)) } else if !ok { return false, nil } ok, err := r.TestLocalArchiveChecksum(downloadDir) if err != nil { - return false, fmt.Errorf(tr("testing archive checksum: %s"), err) + return false, errors.New(i18n.Tr("testing archive checksum: %s", err)) } return ok, nil } @@ -141,7 +140,7 @@ func computeDirChecksum(root string) (string, error) { } defer f.Close() if _, err := io.Copy(hash, f); err != nil { - return fmt.Errorf(tr("failed to compute hash of file \"%s\""), info.Name()) + return errors.New(i18n.Tr("failed to compute hash of file \"%s\"", info.Name())) } return nil }) @@ -164,7 +163,7 @@ func CheckDirChecksum(root string) (bool, error) { return false, err } if file.Checksum != checksum { - return false, fmt.Errorf(tr("Checksum differs from checksum in package.json")) + return false, errors.New(i18n.Tr("Checksum differs from checksum in package.json")) } return true, nil diff --git a/arduino/resources/download.go b/internal/arduino/resources/download.go similarity index 69% rename from arduino/resources/download.go rename to internal/arduino/resources/download.go index ac8946b155c..37c622b2aab 100644 --- a/arduino/resources/download.go +++ b/internal/arduino/resources/download.go @@ -16,10 +16,12 @@ package resources import ( - "fmt" + "context" + "errors" "os" - "github.com/arduino/arduino-cli/arduino/httpclient" + "github.com/arduino/arduino-cli/internal/arduino/httpclient" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" "go.bug.st/downloader/v2" @@ -28,10 +30,10 @@ import ( // Download performs a download loop using the provided downloader.Config. // Messages are passed back to the DownloadProgressCB using label as text for the File field. // queryParameter is passed for analysis purposes. -func (r *DownloadResource) Download(downloadDir *paths.Path, config *downloader.Config, label string, downloadCB rpc.DownloadProgressCB, queryParameter string) error { +func (r *DownloadResource) Download(ctx context.Context, downloadDir *paths.Path, config downloader.Config, label string, downloadCB rpc.DownloadProgressCB, queryParameter string) error { path, err := r.ArchivePath(downloadDir) if err != nil { - return fmt.Errorf(tr("getting archive path: %s"), err) + return errors.New(i18n.Tr("getting archive path: %s", err)) } if _, err := path.Stat(); os.IsNotExist(err) { @@ -41,16 +43,16 @@ func (r *DownloadResource) Download(downloadDir *paths.Path, config *downloader. ok, err := r.TestLocalArchiveIntegrity(downloadDir) if err != nil || !ok { if err := path.Remove(); err != nil { - return fmt.Errorf(tr("removing corrupted archive file: %s"), err) + return errors.New(i18n.Tr("removing corrupted archive file: %s", err)) } } else { // File is cached, nothing to do here downloadCB.Start(r.URL, label) - downloadCB.End(true, tr("%s already downloaded", label)) + downloadCB.End(true, i18n.Tr("%s already downloaded", label)) return nil } } else { - return fmt.Errorf(tr("getting archive file info: %s"), err) + return errors.New(i18n.Tr("getting archive file info: %s", err)) } - return httpclient.DownloadFile(path, r.URL, queryParameter, label, downloadCB, config) + return httpclient.DownloadFile(ctx, path, r.URL, queryParameter, label, downloadCB, config) } diff --git a/arduino/resources/helpers.go b/internal/arduino/resources/helpers.go similarity index 91% rename from arduino/resources/helpers.go rename to internal/arduino/resources/helpers.go index 39349dd28a9..c9f87e7d02e 100644 --- a/arduino/resources/helpers.go +++ b/internal/arduino/resources/helpers.go @@ -16,8 +16,9 @@ package resources import ( - "fmt" + "errors" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" ) @@ -35,7 +36,7 @@ func (r *DownloadResource) ArchivePath(downloadDir *paths.Path) (*paths.Path, er func (r *DownloadResource) IsCached(downloadDir *paths.Path) (bool, error) { archivePath, err := r.ArchivePath(downloadDir) if err != nil { - return false, fmt.Errorf(tr("getting archive path: %s"), err) + return false, errors.New(i18n.Tr("getting archive path: %s", err)) } return archivePath.Exist(), nil } diff --git a/arduino/resources/helpers_test.go b/internal/arduino/resources/helpers_test.go similarity index 78% rename from arduino/resources/helpers_test.go rename to internal/arduino/resources/helpers_test.go index f8dea9abf43..611de8dd518 100644 --- a/arduino/resources/helpers_test.go +++ b/internal/arduino/resources/helpers_test.go @@ -16,17 +16,17 @@ package resources import ( + "context" "net/http" "net/http/httptest" "os" "strings" "testing" - "github.com/arduino/arduino-cli/arduino/httpclient" + "github.com/arduino/arduino-cli/internal/cli/configuration" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" - "go.bug.st/downloader/v2" ) type EchoHandler struct{} @@ -37,8 +37,7 @@ func (h *EchoHandler) ServeHTTP(writer http.ResponseWriter, request *http.Reques } func TestDownloadApplyUserAgentHeaderUsingConfig(t *testing.T) { - goldUserAgentValue := "arduino-cli/0.0.0-test.preview (amd64; linux; go1.12.4) Commit:deadbeef/Build:2019-06-12 11:11:11.111" - goldUserAgentString := "User-Agent: " + goldUserAgentValue + goldUserAgentValue := "arduino-cli/0.0.0-test.preview" tmp, err := paths.MkTempDir("", "") require.NoError(t, err) @@ -54,9 +53,11 @@ func TestDownloadApplyUserAgentHeaderUsingConfig(t *testing.T) { URL: srv.URL, } - httpClient := httpclient.NewWithConfig(&httpclient.Config{UserAgent: goldUserAgentValue}) - - err = r.Download(tmp, &downloader.Config{HttpClient: *httpClient}, "", func(progress *rpc.DownloadProgress) {}, "") + settings := configuration.NewSettings() + settings.Set("network.user_agent_ext", goldUserAgentValue) + config, err := settings.DownloaderConfig() + require.NoError(t, err) + err = r.Download(context.Background(), tmp, config, "", func(progress *rpc.DownloadProgress) {}, "") require.NoError(t, err) // leverage the download helper to download the echo for the request made by the downloader itself @@ -71,12 +72,11 @@ func TestDownloadApplyUserAgentHeaderUsingConfig(t *testing.T) { require.NoError(t, err) requestLines := strings.Split(string(b), "\r\n") - userAgentHeaderString := "" + userAgentHeader := "" for _, line := range requestLines { if strings.Contains(line, "User-Agent: ") { - userAgentHeaderString = line + userAgentHeader = line } } - require.Equal(t, goldUserAgentString, userAgentHeaderString) - + require.Contains(t, userAgentHeader, goldUserAgentValue) } diff --git a/arduino/resources/index.go b/internal/arduino/resources/index.go similarity index 66% rename from arduino/resources/index.go rename to internal/arduino/resources/index.go index ffd9bb4b0b0..52c2dec2884 100644 --- a/arduino/resources/index.go +++ b/internal/arduino/resources/index.go @@ -22,9 +22,10 @@ import ( "path" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/httpclient" - "github.com/arduino/arduino-cli/arduino/security" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/httpclient" + "github.com/arduino/arduino-cli/internal/arduino/security" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/codeclysm/extract/v3" @@ -43,7 +44,7 @@ type IndexResource struct { func (res *IndexResource) IndexFileName() (string, error) { filename := path.Base(res.URL.Path) // == package_index.json[.gz] || packacge_index.tar.bz2 if filename == "." || filename == "" || filename == "/" { - return "", &arduino.InvalidURLError{} + return "", &cmderrors.InvalidURLError{} } switch { case strings.HasSuffix(filename, ".json"): @@ -58,16 +59,16 @@ func (res *IndexResource) IndexFileName() (string, error) { // Download will download the index and possibly check the signature using the Arduino's public key. // If the file is in .gz format it will be unpacked first. -func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadProgressCB) error { +func (res *IndexResource) Download(ctx context.Context, destDir *paths.Path, downloadCB rpc.DownloadProgressCB, config downloader.Config) error { // Create destination directory if err := destDir.MkdirAll(); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Can't create data directory %s", destDir), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Can't create data directory %s", destDir), Cause: err} } // Create a temp dir to stage all downloads tmp, err := paths.MkTempDir("", "library_index_download") if err != nil { - return &arduino.TempDirCreationFailedError{Cause: err} + return &cmderrors.TempDirCreationFailedError{Cause: err} } defer tmp.RemoveAll() @@ -78,8 +79,8 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP return err } tmpIndexPath := tmp.Join(downloadFileName) - if err := httpclient.DownloadFile(tmpIndexPath, res.URL.String(), "", tr("Downloading index: %s", downloadFileName), downloadCB, nil, downloader.NoResume); err != nil { - return &arduino.FailedDownloadError{Message: tr("Error downloading index '%s'", res.URL), Cause: err} + if err := httpclient.DownloadFile(ctx, tmpIndexPath, res.URL.String(), "", i18n.Tr("Downloading index: %s", downloadFileName), downloadCB, config, downloader.NoResume); err != nil { + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Error downloading index '%s'", res.URL), Cause: err} } var signaturePath, tmpSignaturePath *paths.Path @@ -95,19 +96,19 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP // Extract archive in a tmp/archive subdirectory f, err := tmpIndexPath.Open() if err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error opening %s", tmpIndexPath), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error opening %s", tmpIndexPath), Cause: err} } defer f.Close() tmpArchivePath := tmp.Join("archive") _ = tmpArchivePath.MkdirAll() - if err := extract.Bz2(context.Background(), f, tmpArchivePath.String(), nil); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error extracting %s", tmpIndexPath), Cause: err} + if err := extract.Bz2(ctx, f, tmpArchivePath.String(), nil); err != nil { + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error extracting %s", tmpIndexPath), Cause: err} } // Look for index.json tmpIndexPath = tmpArchivePath.Join(indexFileName) if !tmpIndexPath.Exist() { - return &arduino.NotFoundError{Message: tr("Invalid archive: file %{1}s not found in archive %{2}s", indexFileName, tmpArchivePath.Base())} + return &cmderrors.NotFoundError{Message: i18n.Tr("Invalid archive: file %[1]s not found in archive %[2]s", indexFileName, tmpArchivePath.Base())} } // Look for signature @@ -120,7 +121,7 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP } else if strings.HasSuffix(downloadFileName, ".gz") { tmpUnzippedIndexPath := tmp.Join(indexFileName) if err := paths.GUnzip(tmpIndexPath, tmpUnzippedIndexPath); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error extracting %s", indexFileName), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error extracting %s", indexFileName), Cause: err} } tmpIndexPath = tmpUnzippedIndexPath } @@ -133,8 +134,8 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP // Download signature signaturePath = destDir.Join(signatureFileName) tmpSignaturePath = tmp.Join(signatureFileName) - if err := httpclient.DownloadFile(tmpSignaturePath, res.SignatureURL.String(), "", tr("Downloading index signature: %s", signatureFileName), downloadCB, nil, downloader.NoResume); err != nil { - return &arduino.FailedDownloadError{Message: tr("Error downloading index signature '%s'", res.SignatureURL), Cause: err} + if err := httpclient.DownloadFile(ctx, tmpSignaturePath, res.SignatureURL.String(), "", i18n.Tr("Downloading index signature: %s", signatureFileName), downloadCB, config, downloader.NoResume); err != nil { + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Error downloading index signature '%s'", res.SignatureURL), Cause: err} } hasSignature = true @@ -143,13 +144,13 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP if hasSignature { // Check signature... if valid, _, err := security.VerifyArduinoDetachedSignature(tmpIndexPath, tmpSignaturePath); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error verifying signature"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error verifying signature"), Cause: err} } else if !valid { - return &arduino.SignatureVerificationFailedError{File: res.URL.String()} + return &cmderrors.SignatureVerificationFailedError{File: res.URL.String()} } } else { if res.EnforceSignatureVerification { - return &arduino.PermissionDeniedError{Message: tr("Error verifying signature"), Cause: errors.New(tr("missing signature"))} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error verifying signature"), Cause: errors.New(i18n.Tr("missing signature"))} } } @@ -161,23 +162,23 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP oldIndex := tmp.Join("old_index") if indexPath.Exist() { if err := indexPath.CopyTo(oldIndex); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error saving downloaded index"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error saving downloaded index"), Cause: err} } defer oldIndex.CopyTo(indexPath) // will silently fail in case of success } oldSignature := tmp.Join("old_signature") if oldSignature.Exist() { if err := signaturePath.CopyTo(oldSignature); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error saving downloaded index signature"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error saving downloaded index signature"), Cause: err} } defer oldSignature.CopyTo(signaturePath) // will silently fail in case of success } if err := tmpIndexPath.CopyTo(indexPath); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error saving downloaded index"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error saving downloaded index"), Cause: err} } if hasSignature { if err := tmpSignaturePath.CopyTo(signaturePath); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error saving downloaded index signature"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error saving downloaded index signature"), Cause: err} } } _ = oldIndex.Remove() diff --git a/arduino/resources/install.go b/internal/arduino/resources/install.go similarity index 77% rename from arduino/resources/install.go rename to internal/arduino/resources/install.go index 6b7c09bb9e1..76ce5de2232 100644 --- a/arduino/resources/install.go +++ b/internal/arduino/resources/install.go @@ -17,9 +17,10 @@ package resources import ( "context" - "fmt" + "errors" "os" + "github.com/arduino/arduino-cli/internal/i18n" paths "github.com/arduino/go-paths-helper" "github.com/codeclysm/extract/v3" "go.bug.st/cleanup" @@ -34,29 +35,29 @@ import ( func (release *DownloadResource) Install(downloadDir, tempPath, destDir *paths.Path) error { // Check the integrity of the package if ok, err := release.TestLocalArchiveIntegrity(downloadDir); err != nil { - return fmt.Errorf(tr("testing local archive integrity: %s", err)) + return errors.New(i18n.Tr("testing local archive integrity: %s", err)) } else if !ok { - return fmt.Errorf(tr("checking local archive integrity")) + return errors.New(i18n.Tr("checking local archive integrity")) } // Create a temporary dir to extract package if err := tempPath.MkdirAll(); err != nil { - return fmt.Errorf(tr("creating temp dir for extraction: %s", err)) + return errors.New(i18n.Tr("creating temp dir for extraction: %s", err)) } tempDir, err := tempPath.MkTempDir("package-") if err != nil { - return fmt.Errorf(tr("creating temp dir for extraction: %s", err)) + return errors.New(i18n.Tr("creating temp dir for extraction: %s", err)) } defer tempDir.RemoveAll() // Obtain the archive path and open it archivePath, err := release.ArchivePath(downloadDir) if err != nil { - return fmt.Errorf(tr("getting archive path: %s", err)) + return errors.New(i18n.Tr("getting archive path: %s", err)) } file, err := os.Open(archivePath.String()) if err != nil { - return fmt.Errorf(tr("opening archive file: %s", err)) + return errors.New(i18n.Tr("opening archive file: %s", err)) } defer file.Close() @@ -64,13 +65,13 @@ func (release *DownloadResource) Install(downloadDir, tempPath, destDir *paths.P ctx, cancel := cleanup.InterruptableContext(context.Background()) defer cancel() if err := extract.Archive(ctx, file, tempDir.String(), nil); err != nil { - return fmt.Errorf(tr("extracting archive: %s", err)) + return errors.New(i18n.Tr("extracting archive: %s", err)) } // Check package content and find package root dir root, err := findPackageRoot(tempDir) if err != nil { - return fmt.Errorf(tr("searching package root dir: %s", err)) + return errors.New(i18n.Tr("searching package root dir: %s", err)) } // Ensure container dir exists @@ -93,16 +94,10 @@ func (release *DownloadResource) Install(downloadDir, tempPath, destDir *paths.P if err := root.Rename(destDir); err != nil { // Copy the extracted root directory to the destination directory, if move failed if err := root.CopyDirTo(destDir); err != nil { - return fmt.Errorf(tr("moving extracted archive to destination dir: %s", err)) + return errors.New(i18n.Tr("moving extracted archive to destination dir: %s", err)) } } - // TODO - // // Create a package file - // if err := createPackageFile(destDir); err != nil { - // return err - // } - return nil } @@ -118,17 +113,17 @@ func IsDirEmpty(path *paths.Path) (bool, error) { func findPackageRoot(parent *paths.Path) (*paths.Path, error) { files, err := parent.ReadDir() if err != nil { - return nil, fmt.Errorf(tr("reading package root dir: %s", err)) + return nil, errors.New(i18n.Tr("reading package root dir: %s", err)) } files.FilterDirs() files.FilterOutPrefix("__MACOSX") if len(files) == 0 { - return nil, fmt.Errorf(tr("files in archive must be placed in a subdirectory")) + return nil, errors.New(i18n.Tr("files in archive must be placed in a subdirectory")) } if len(files) > 1 { - return nil, fmt.Errorf(tr("no unique root dir in archive, found '%[1]s' and '%[2]s'", files[0], files[1])) + return nil, errors.New(i18n.Tr("no unique root dir in archive, found '%[1]s' and '%[2]s'", files[0], files[1])) } return files[0], nil diff --git a/arduino/resources/install_test.go b/internal/arduino/resources/install_test.go similarity index 100% rename from arduino/resources/install_test.go rename to internal/arduino/resources/install_test.go diff --git a/arduino/resources/resources_test.go b/internal/arduino/resources/resources_test.go similarity index 92% rename from arduino/resources/resources_test.go rename to internal/arduino/resources/resources_test.go index 9cf8ae54509..f5b9b252d1f 100644 --- a/arduino/resources/resources_test.go +++ b/internal/arduino/resources/resources_test.go @@ -16,6 +16,7 @@ package resources import ( + "context" "crypto" "encoding/hex" "fmt" @@ -49,7 +50,7 @@ func TestDownloadAndChecksums(t *testing.T) { require.NoError(t, err) downloadAndTestChecksum := func() { - err := r.Download(tmp, &downloader.Config{}, "", func(*rpc.DownloadProgress) {}, "") + err := r.Download(context.Background(), tmp, downloader.Config{}, "", func(*rpc.DownloadProgress) {}, "") require.NoError(t, err) data, err := testFile.ReadFile() @@ -63,7 +64,7 @@ func TestDownloadAndChecksums(t *testing.T) { downloadAndTestChecksum() // Download with cached file - err = r.Download(tmp, &downloader.Config{}, "", func(*rpc.DownloadProgress) {}, "") + err = r.Download(context.Background(), tmp, downloader.Config{}, "", func(*rpc.DownloadProgress) {}, "") require.NoError(t, err) // Download if cached file has data in excess (redownload) @@ -116,6 +117,7 @@ func TestDownloadAndChecksums(t *testing.T) { } func TestIndexDownloadAndSignatureWithinArchive(t *testing.T) { + ctx := context.Background() // Spawn test webserver mux := http.NewServeMux() fs := http.FileServer(http.Dir("testdata")) @@ -132,7 +134,7 @@ func TestIndexDownloadAndSignatureWithinArchive(t *testing.T) { destDir, err := paths.MkTempDir("", "") require.NoError(t, err) defer destDir.RemoveAll() - err = idxResource.Download(destDir, func(curr *rpc.DownloadProgress) {}) + err = idxResource.Download(ctx, destDir, func(curr *rpc.DownloadProgress) {}, downloader.GetDefaultConfig()) require.NoError(t, err) require.True(t, destDir.Join("package_index.json").Exist()) require.True(t, destDir.Join("package_index.json.sig").Exist()) @@ -143,7 +145,7 @@ func TestIndexDownloadAndSignatureWithinArchive(t *testing.T) { invDestDir, err := paths.MkTempDir("", "") require.NoError(t, err) defer invDestDir.RemoveAll() - err = invIdxResource.Download(invDestDir, func(curr *rpc.DownloadProgress) {}) + err = invIdxResource.Download(ctx, invDestDir, func(curr *rpc.DownloadProgress) {}, downloader.GetDefaultConfig()) require.Error(t, err) require.Contains(t, err.Error(), "invalid signature") require.False(t, invDestDir.Join("package_index.json").Exist()) diff --git a/arduino/resources/structs.go b/internal/arduino/resources/structs.go similarity index 100% rename from arduino/resources/structs.go rename to internal/arduino/resources/structs.go diff --git a/arduino/resources/testdata/invalid/package_index.tar.bz2 b/internal/arduino/resources/testdata/invalid/package_index.tar.bz2 similarity index 100% rename from arduino/resources/testdata/invalid/package_index.tar.bz2 rename to internal/arduino/resources/testdata/invalid/package_index.tar.bz2 diff --git a/arduino/resources/testdata/invalid/platform_with_multiple_root_folders.tar.bz2 b/internal/arduino/resources/testdata/invalid/platform_with_multiple_root_folders.tar.bz2 similarity index 100% rename from arduino/resources/testdata/invalid/platform_with_multiple_root_folders.tar.bz2 rename to internal/arduino/resources/testdata/invalid/platform_with_multiple_root_folders.tar.bz2 diff --git a/arduino/resources/testdata/invalid/platform_without_root_folder.tar.bz2 b/internal/arduino/resources/testdata/invalid/platform_without_root_folder.tar.bz2 similarity index 100% rename from arduino/resources/testdata/invalid/platform_without_root_folder.tar.bz2 rename to internal/arduino/resources/testdata/invalid/platform_without_root_folder.tar.bz2 diff --git a/arduino/resources/testdata/valid/package_index.tar.bz2 b/internal/arduino/resources/testdata/valid/package_index.tar.bz2 similarity index 100% rename from arduino/resources/testdata/valid/package_index.tar.bz2 rename to internal/arduino/resources/testdata/valid/package_index.tar.bz2 diff --git a/arduino/resources/testdata/valid/platform_with_root_and__MACOSX_folder.tar.bz2 b/internal/arduino/resources/testdata/valid/platform_with_root_and__MACOSX_folder.tar.bz2 similarity index 100% rename from arduino/resources/testdata/valid/platform_with_root_and__MACOSX_folder.tar.bz2 rename to internal/arduino/resources/testdata/valid/platform_with_root_and__MACOSX_folder.tar.bz2 diff --git a/arduino/security/keys/arduino_public.gpg.key b/internal/arduino/security/keys/arduino_public.gpg.key similarity index 100% rename from arduino/security/keys/arduino_public.gpg.key rename to internal/arduino/security/keys/arduino_public.gpg.key diff --git a/arduino/security/signature_test.go b/internal/arduino/security/signature_test.go similarity index 100% rename from arduino/security/signature_test.go rename to internal/arduino/security/signature_test.go diff --git a/arduino/security/signatures.go b/internal/arduino/security/signatures.go similarity index 92% rename from arduino/security/signatures.go rename to internal/arduino/security/signatures.go index dfe9b959814..fb6ed9b0697 100644 --- a/arduino/security/signatures.go +++ b/internal/arduino/security/signatures.go @@ -17,17 +17,15 @@ package security import ( "embed" - "fmt" + "errors" "io" "os" "github.com/ProtonMail/go-crypto/openpgp" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" ) -var tr = i18n.Tr - //go:embed keys/* var keys embed.FS @@ -71,16 +69,16 @@ func VerifyDetachedSignature(targetPath *paths.Path, signaturePath *paths.Path, func VerifySignature(targetPath *paths.Path, signaturePath *paths.Path, arduinoKeyringFile io.Reader) (bool, *openpgp.Entity, error) { keyRing, err := openpgp.ReadKeyRing(arduinoKeyringFile) if err != nil { - return false, nil, fmt.Errorf(tr("retrieving Arduino public keys: %s"), err) + return false, nil, errors.New(i18n.Tr("retrieving Arduino public keys: %s", err)) } target, err := targetPath.Open() if err != nil { - return false, nil, fmt.Errorf(tr("opening target file: %s"), err) + return false, nil, errors.New(i18n.Tr("opening target file: %s", err)) } defer target.Close() signature, err := signaturePath.Open() if err != nil { - return false, nil, fmt.Errorf(tr("opening signature file: %s"), err) + return false, nil, errors.New(i18n.Tr("opening signature file: %s", err)) } defer signature.Close() signer, err := openpgp.CheckDetachedSignature(keyRing, target, signature, nil) diff --git a/arduino/security/testdata/module_firmware_index.json b/internal/arduino/security/testdata/module_firmware_index.json similarity index 100% rename from arduino/security/testdata/module_firmware_index.json rename to internal/arduino/security/testdata/module_firmware_index.json diff --git a/arduino/security/testdata/module_firmware_index.json.sig b/internal/arduino/security/testdata/module_firmware_index.json.sig similarity index 100% rename from arduino/security/testdata/module_firmware_index.json.sig rename to internal/arduino/security/testdata/module_firmware_index.json.sig diff --git a/arduino/security/testdata/module_firmware_index_public.gpg.key b/internal/arduino/security/testdata/module_firmware_index_public.gpg.key similarity index 100% rename from arduino/security/testdata/module_firmware_index_public.gpg.key rename to internal/arduino/security/testdata/module_firmware_index_public.gpg.key diff --git a/arduino/security/testdata/package_index.json b/internal/arduino/security/testdata/package_index.json similarity index 100% rename from arduino/security/testdata/package_index.json rename to internal/arduino/security/testdata/package_index.json diff --git a/arduino/security/testdata/package_index.json.sig b/internal/arduino/security/testdata/package_index.json.sig similarity index 100% rename from arduino/security/testdata/package_index.json.sig rename to internal/arduino/security/testdata/package_index.json.sig diff --git a/arduino/sketch/profiles.go b/internal/arduino/sketch/profiles.go similarity index 74% rename from arduino/sketch/profiles.go rename to internal/arduino/sketch/profiles.go index 93fcdf11787..b01bec167f2 100644 --- a/arduino/sketch/profiles.go +++ b/internal/arduino/sketch/profiles.go @@ -18,12 +18,15 @@ package sketch import ( "crypto/sha256" "encoding/hex" + "errors" "fmt" "net/url" "regexp" "strings" - "github.com/arduino/arduino-cli/arduino/utils" + "github.com/arduino/arduino-cli/internal/arduino/utils" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" semver "go.bug.st/relaxed-semver" "gopkg.in/yaml.v3" @@ -31,20 +34,22 @@ import ( // projectRaw is a support struct used only to unmarshal the yaml type projectRaw struct { - ProfilesRaw yaml.Node `yaml:"profiles"` - DefaultProfile string `yaml:"default_profile"` - DefaultFqbn string `yaml:"default_fqbn"` - DefaultPort string `yaml:"default_port,omitempty"` - DefaultProtocol string `yaml:"default_protocol,omitempty"` + ProfilesRaw yaml.Node `yaml:"profiles"` + DefaultProfile string `yaml:"default_profile"` + DefaultFqbn string `yaml:"default_fqbn"` + DefaultPort string `yaml:"default_port,omitempty"` + DefaultProtocol string `yaml:"default_protocol,omitempty"` + DefaultProgrammer string `yaml:"default_programmer,omitempty"` } // Project represents the sketch project file type Project struct { - Profiles []*Profile - DefaultProfile string - DefaultFqbn string - DefaultPort string - DefaultProtocol string + Profiles []*Profile + DefaultProfile string + DefaultFqbn string + DefaultPort string + DefaultProtocol string + DefaultProgrammer string } // AsYaml outputs the sketch project file as YAML @@ -68,10 +73,13 @@ func (p *Project) AsYaml() string { if p.DefaultProtocol != "" { res += fmt.Sprintf("default_protocol: %s\n", p.DefaultProtocol) } + if p.DefaultProgrammer != "" { + res += fmt.Sprintf("default_programmer: %s\n", p.DefaultProgrammer) + } return res } -func (p *projectRaw) getProfiles() []*Profile { +func (p *projectRaw) getProfiles() ([]*Profile, error) { profiles := []*Profile{} for i, node := range p.ProfilesRaw.Content { if node.Tag != "!!str" { @@ -81,22 +89,32 @@ func (p *projectRaw) getProfiles() []*Profile { var profile Profile profile.Name = node.Value if err := p.ProfilesRaw.Content[i+1].Decode(&profile); err != nil { - panic(fmt.Sprintf("profiles parsing err: %v", err.Error())) + return nil, err } profiles = append(profiles, &profile) } - return profiles + return profiles, nil } // UnmarshalYAML decodes a Profiles section from YAML source. // Profile is a sketch profile, it contains a reference to all the resources // needed to build and upload a sketch type Profile struct { - Name string - Notes string `yaml:"notes"` - FQBN string `yaml:"fqbn"` - Platforms ProfileRequiredPlatforms `yaml:"platforms"` - Libraries ProfileRequiredLibraries `yaml:"libraries"` + Name string + Notes string `yaml:"notes"` + FQBN string `yaml:"fqbn"` + Programmer string `yaml:"programmer"` + Platforms ProfileRequiredPlatforms `yaml:"platforms"` + Libraries ProfileRequiredLibraries `yaml:"libraries"` +} + +// ToRpc converts this Profile to an rpc.SketchProfile +func (p *Profile) ToRpc() *rpc.SketchProfile { + return &rpc.SketchProfile{ + Name: p.Name, + Fqbn: p.FQBN, + Programmer: p.Programmer, + } } // AsYaml outputs the profile as Yaml @@ -106,6 +124,9 @@ func (p *Profile) AsYaml() string { res += fmt.Sprintf(" notes: %s\n", p.Notes) } res += fmt.Sprintf(" fqbn: %s\n", p.FQBN) + if p.Programmer != "" { + res += fmt.Sprintf(" programmer: %s\n", p.Programmer) + } res += p.Platforms.AsYaml() res += p.Libraries.AsYaml() return res @@ -186,13 +207,13 @@ func (p *ProfilePlatformReference) UnmarshalYAML(unmarshal func(interface{}) err return err } if platformID, ok := data["platform"]; !ok { - return fmt.Errorf(tr("missing '%s' directive", "platform")) + return errors.New(i18n.Tr("missing '%s' directive", "platform")) } else if platformID, platformVersion, ok := parseNameAndVersion(platformID); !ok { - return fmt.Errorf(tr("invalid '%s' directive", "platform")) + return errors.New(i18n.Tr("invalid '%s' directive", "platform")) } else if c, err := semver.Parse(platformVersion); err != nil { - return fmt.Errorf("%s: %w", tr("error parsing version constraints"), err) + return fmt.Errorf("%s: %w", i18n.Tr("error parsing version constraints"), err) } else if split := strings.SplitN(platformID, ":", 2); len(split) != 2 { - return fmt.Errorf("%s: %s", tr("invalid platform identifier"), platformID) + return fmt.Errorf("%s: %s", i18n.Tr("invalid platform identifier"), platformID) } else { p.Packager = split[0] p.Architecture = split[1] @@ -202,7 +223,7 @@ func (p *ProfilePlatformReference) UnmarshalYAML(unmarshal func(interface{}) err if rawIndexURL, ok := data["platform_index_url"]; ok { indexURL, err := url.Parse(rawIndexURL) if err != nil { - return fmt.Errorf("%s: %w", tr("invalid platform index URL:"), err) + return fmt.Errorf("%s: %w", i18n.Tr("invalid platform index URL:"), err) } p.PlatformIndexURL = indexURL } @@ -222,9 +243,9 @@ func (l *ProfileLibraryReference) UnmarshalYAML(unmarshal func(interface{}) erro return err } if libName, libVersion, ok := parseNameAndVersion(data); !ok { - return fmt.Errorf("%s %s", tr("invalid library directive:"), data) + return fmt.Errorf("%s %s", i18n.Tr("invalid library directive:"), data) } else if v, err := semver.Parse(libVersion); err != nil { - return fmt.Errorf("%s %w", tr("invalid version:"), err) + return fmt.Errorf("%s %w", i18n.Tr("invalid version:"), err) } else { l.Library = libName l.Version = v @@ -261,11 +282,16 @@ func LoadProjectFile(file *paths.Path) (*Project, error) { return nil, err } + profiles, err := raw.getProfiles() + if err != nil { + return nil, err + } return &Project{ - Profiles: raw.getProfiles(), - DefaultProfile: raw.DefaultProfile, - DefaultFqbn: raw.DefaultFqbn, - DefaultPort: raw.DefaultPort, - DefaultProtocol: raw.DefaultProtocol, + Profiles: profiles, + DefaultProfile: raw.DefaultProfile, + DefaultFqbn: raw.DefaultFqbn, + DefaultPort: raw.DefaultPort, + DefaultProtocol: raw.DefaultProtocol, + DefaultProgrammer: raw.DefaultProgrammer, }, nil } diff --git a/arduino/sketch/profiles_test.go b/internal/arduino/sketch/profiles_test.go similarity index 100% rename from arduino/sketch/profiles_test.go rename to internal/arduino/sketch/profiles_test.go diff --git a/arduino/sketch/sketch.go b/internal/arduino/sketch/sketch.go similarity index 72% rename from arduino/sketch/sketch.go rename to internal/arduino/sketch/sketch.go index fd6bff38dd4..2d0c47f35d4 100644 --- a/arduino/sketch/sketch.go +++ b/internal/arduino/sketch/sketch.go @@ -18,14 +18,17 @@ package sketch import ( "crypto/md5" "encoding/hex" + "errors" "fmt" "sort" "strings" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands/cmderrors" + f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" ) // Sketch holds all the files composing a sketch @@ -39,20 +42,18 @@ type Sketch struct { Project *Project } -var tr = i18n.Tr - // New creates an Sketch instance by reading all the files composing a sketch and grouping them // by file type. func New(path *paths.Path) (*Sketch, error) { if path == nil { - return nil, fmt.Errorf(tr("sketch path is not valid")) + return nil, errors.New(i18n.Tr("sketch path is not valid")) } path = path.Canonical() if exist, err := path.ExistCheck(); err != nil { - return nil, fmt.Errorf("%s: %s", tr("sketch path is not valid"), err) + return nil, fmt.Errorf("%s: %w", i18n.Tr("sketch path is not valid"), err) } else if !exist { - return nil, fmt.Errorf("%s: %s", tr("no such file or directory"), path) + return nil, fmt.Errorf("%s: %s", i18n.Tr("no such file or directory"), path) } if globals.MainFileValidExtensions[path.Ext()] && !path.IsDir() { path = path.Parent() @@ -65,15 +66,15 @@ func New(path *paths.Path) (*Sketch, error) { if mainFile == nil { mainFile = candidateSketchMainFile } else { - return nil, errors.Errorf(tr("multiple main sketch files found (%[1]v, %[2]v)"), + return nil, errors.New(i18n.Tr("multiple main sketch files found (%[1]v, %[2]v)", mainFile, candidateSketchMainFile, - ) + )) } } } if mainFile == nil { - return nil, fmt.Errorf(tr("main file missing from sketch: %s", path.Join(path.Base()+globals.MainFileValidExtension))) + return nil, errors.New(i18n.Tr("main file missing from sketch: %s", path.Join(path.Base()+globals.MainFileValidExtension))) } sketch := &Sketch{ @@ -89,7 +90,7 @@ func New(path *paths.Path) (*Sketch, error) { if projectFile := sketch.GetProjectPath(); projectFile.Exist() { prj, err := LoadProjectFile(projectFile) if err != nil { - return nil, fmt.Errorf("%s %w", tr("error loading sketch project file:"), err) + return nil, fmt.Errorf("%s %w", i18n.Tr("error loading sketch project file:"), err) } sketch.Project = prj } @@ -102,24 +103,13 @@ func New(path *paths.Path) (*Sketch, error) { return nil, err } - if mainFile == nil { - return nil, fmt.Errorf(tr("can't find main Sketch file in %s"), path) - } - sketchFolderFiles, err := sketch.supportedFiles() if err != nil { - return nil, err + return nil, fmt.Errorf("%s: %w", i18n.Tr("reading sketch files"), err) } // Collect files - for _, p := range *sketchFolderFiles { - // Skip files that can't be opened - f, err := p.Open() - if err != nil { - continue - } - f.Close() - + for _, p := range sketchFolderFiles { ext := p.Ext() if globals.MainFileValidExtensions[ext] { if p.EqualsTo(mainFile) { @@ -144,7 +134,7 @@ func New(path *paths.Path) (*Sketch, error) { sketch.RootFolderFiles.Add(p) } } else { - return nil, errors.Errorf(tr("unknown sketch file extension '%s'"), ext) + return nil, errors.New(i18n.Tr("unknown sketch file extension '%s'", ext)) } } @@ -157,7 +147,7 @@ func New(path *paths.Path) (*Sketch, error) { // supportedFiles reads all files recursively contained in Sketch and // filter out unneded or unsupported ones and returns them -func (s *Sketch) supportedFiles() (*paths.PathList, error) { +func (s *Sketch) supportedFiles() (paths.PathList, error) { filterValidExtensions := func(p *paths.Path) bool { return globals.MainFileValidExtensions[p.Ext()] || globals.AdditionalFileValidExtensions[p.Ext()] } @@ -177,18 +167,17 @@ func (s *Sketch) supportedFiles() (*paths.PathList, error) { if err != nil { return nil, err } - return &files, nil + return files, nil } -// GetProfile returns the requested profile or nil if the profile -// is not found. -func (s *Sketch) GetProfile(profileName string) *Profile { +// GetProfile returns the requested profile or an error if not found +func (s *Sketch) GetProfile(profileName string) (*Profile, error) { for _, p := range s.Project.Profiles { if p.Name == profileName { - return p + return p, nil } } - return nil + return nil, &cmderrors.UnknownProfileError{Profile: profileName} } // checkSketchCasing returns an error if the casing of the sketch folder and the main file are different. @@ -206,7 +195,7 @@ func (s *Sketch) GetProfile(profileName string) *Profile { func (s *Sketch) checkSketchCasing() error { files, err := s.FullPath.ReadDir() if err != nil { - return errors.Errorf(tr("reading files: %v"), err) + return fmt.Errorf("%s: %w", i18n.Tr("reading files"), err) } files.FilterOutDirs() @@ -251,6 +240,12 @@ func (s *Sketch) GetDefaultPortAddressAndProtocol() (string, string) { return s.Project.DefaultPort, s.Project.DefaultProtocol } +// GetDefaultProgrammer return the default Programmer for the sketch (from the sketch.yaml project file), +// ore the empty string if not set. +func (s *Sketch) GetDefaultProgrammer() string { + return s.Project.DefaultProgrammer +} + // SetDefaultFQBN sets the default FQBN for the sketch and saves it in the sketch.yaml project file. func (s *Sketch) SetDefaultFQBN(fqbn string) error { s.Project.DefaultFqbn = fqbn @@ -268,6 +263,12 @@ func (s *Sketch) SetDefaultPort(address, protocol string) error { return updateOrAddYamlRootEntry(s.GetProjectPath(), "default_protocol", protocol) } +// SetDefaultFQBN sets the default programmer for the sketch and saves it in the sketch.yaml project file. +func (s *Sketch) SetDefaultProgrammer(programmer string) error { + s.Project.DefaultProgrammer = programmer + return updateOrAddYamlRootEntry(s.GetProjectPath(), "default_programmer", programmer) +} + // InvalidSketchFolderNameError is returned when the sketch directory doesn't match the sketch name type InvalidSketchFolderNameError struct { SketchFolder *paths.Path @@ -275,24 +276,7 @@ type InvalidSketchFolderNameError struct { } func (e *InvalidSketchFolderNameError) Error() string { - return tr("no valid sketch found in %[1]s: missing %[2]s", e.SketchFolder, e.SketchFile) -} - -// CheckForPdeFiles returns all files ending with .pde extension -// in sketch, this is mainly used to warn the user that these files -// must be changed to .ino extension. -// When .pde files won't be supported anymore this function must be removed. -func CheckForPdeFiles(sketch *paths.Path) []*paths.Path { - if sketch.IsNotDir() { - sketch = sketch.Parent() - } - - files, err := sketch.ReadDirRecursive() - if err != nil { - return []*paths.Path{} - } - files.FilterSuffix(".pde") - return files + return i18n.Tr("no valid sketch found in %[1]s: missing %[2]s", e.SketchFolder, e.SketchFile) } // DefaultBuildPath generates the default build directory for a given sketch. @@ -307,3 +291,24 @@ func (s *Sketch) Hash() string { md5SumBytes := md5.Sum([]byte(path)) return strings.ToUpper(hex.EncodeToString(md5SumBytes[:])) } + +// ToRpc converts this Sketch into a rpc.LoadSketchResponse +func (s *Sketch) ToRpc() *rpc.Sketch { + defaultPort, defaultProtocol := s.GetDefaultPortAddressAndProtocol() + res := &rpc.Sketch{ + MainFile: s.MainFile.String(), + LocationPath: s.FullPath.String(), + OtherSketchFiles: s.OtherSketchFiles.AsStrings(), + AdditionalFiles: s.AdditionalFiles.AsStrings(), + RootFolderFiles: s.RootFolderFiles.AsStrings(), + DefaultFqbn: s.GetDefaultFQBN(), + DefaultPort: defaultPort, + DefaultProtocol: defaultProtocol, + DefaultProgrammer: s.GetDefaultProgrammer(), + Profiles: f.Map(s.Project.Profiles, (*Profile).ToRpc), + } + if defaultProfile, err := s.GetProfile(s.Project.DefaultProfile); err == nil { + res.DefaultProfile = defaultProfile.ToRpc() + } + return res +} diff --git a/arduino/sketch/sketch_test.go b/internal/arduino/sketch/sketch_test.go similarity index 92% rename from arduino/sketch/sketch_test.go rename to internal/arduino/sketch/sketch_test.go index f6de4a11261..9f18e45c591 100644 --- a/arduino/sketch/sketch_test.go +++ b/internal/arduino/sketch/sketch_test.go @@ -291,41 +291,6 @@ func TestGenBuildPath(t *testing.T) { assert.Equal(t, "ACBD18DB4CC2F85CEDEF654FCCC4A4D8", (&Sketch{FullPath: paths.New("foo")}).Hash()) } -func TestCheckForPdeFiles(t *testing.T) { - sketchPath := paths.New("testdata", "SketchSimple") - files := CheckForPdeFiles(sketchPath) - require.Empty(t, files) - - sketchPath = paths.New("testdata", "SketchPde") - files = CheckForPdeFiles(sketchPath) - require.Len(t, files, 1) - require.Equal(t, sketchPath.Join("SketchPde.pde"), files[0]) - - sketchPath = paths.New("testdata", "SketchMultipleMainFiles") - files = CheckForPdeFiles(sketchPath) - require.Len(t, files, 1) - require.Equal(t, sketchPath.Join("SketchMultipleMainFiles.pde"), files[0]) - - sketchPath = paths.New("testdata", "SketchSimple", "SketchSimple.ino") - files = CheckForPdeFiles(sketchPath) - require.Empty(t, files) - - sketchPath = paths.New("testdata", "SketchPde", "SketchPde.pde") - files = CheckForPdeFiles(sketchPath) - require.Len(t, files, 1) - require.Equal(t, sketchPath.Parent().Join("SketchPde.pde"), files[0]) - - sketchPath = paths.New("testdata", "SketchMultipleMainFiles", "SketchMultipleMainFiles.ino") - files = CheckForPdeFiles(sketchPath) - require.Len(t, files, 1) - require.Equal(t, sketchPath.Parent().Join("SketchMultipleMainFiles.pde"), files[0]) - - sketchPath = paths.New("testdata", "SketchMultipleMainFiles", "SketchMultipleMainFiles.pde") - files = CheckForPdeFiles(sketchPath) - require.Len(t, files, 1) - require.Equal(t, sketchPath.Parent().Join("SketchMultipleMainFiles.pde"), files[0]) -} - func TestNewSketchWithSymlink(t *testing.T) { sketchPath, _ := paths.New("testdata", "SketchWithSymlink").Abs() mainFilePath := sketchPath.Join("SketchWithSymlink.ino") @@ -376,7 +341,7 @@ func TestNewSketchWithSymlinkLoop(t *testing.T) { return false } }, - 20*time.Second, + 5*time.Second, 10*time.Millisecond, "Infinite symlink loop while loading sketch", ) @@ -415,7 +380,7 @@ func TestSketchWithMultipleSymlinkLoops(t *testing.T) { return false } }, - 20*time.Second, + 5*time.Second, 10*time.Millisecond, "Infinite symlink loop while loading sketch", ) diff --git a/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.ino b/internal/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.ino similarity index 100% rename from arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.ino rename to internal/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.ino diff --git a/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.pde b/internal/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.pde similarity index 100% rename from arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.pde rename to internal/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.pde diff --git a/arduino/sketch/testdata/SketchCasingCorrect/SketchCasingCorrect.ino b/internal/arduino/sketch/testdata/SketchCasingCorrect/SketchCasingCorrect.ino similarity index 100% rename from arduino/sketch/testdata/SketchCasingCorrect/SketchCasingCorrect.ino rename to internal/arduino/sketch/testdata/SketchCasingCorrect/SketchCasingCorrect.ino diff --git a/arduino/sketch/testdata/SketchCasingWrong/sketchcasingwrong.ino b/internal/arduino/sketch/testdata/SketchCasingWrong/sketchcasingwrong.ino similarity index 100% rename from arduino/sketch/testdata/SketchCasingWrong/sketchcasingwrong.ino rename to internal/arduino/sketch/testdata/SketchCasingWrong/sketchcasingwrong.ino diff --git a/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.ino b/internal/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.ino similarity index 100% rename from arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.ino rename to internal/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.ino diff --git a/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.pde b/internal/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.pde similarity index 100% rename from arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.pde rename to internal/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.pde diff --git a/arduino/sketch/testdata/SketchPde/SketchPde.pde b/internal/arduino/sketch/testdata/SketchPde/SketchPde.pde similarity index 100% rename from arduino/sketch/testdata/SketchPde/SketchPde.pde rename to internal/arduino/sketch/testdata/SketchPde/SketchPde.pde diff --git a/arduino/sketch/testdata/SketchSimple/SketchSimple.ino b/internal/arduino/sketch/testdata/SketchSimple/SketchSimple.ino similarity index 100% rename from arduino/sketch/testdata/SketchSimple/SketchSimple.ino rename to internal/arduino/sketch/testdata/SketchSimple/SketchSimple.ino diff --git a/arduino/sketch/testdata/SketchSimple/other.cpp b/internal/arduino/sketch/testdata/SketchSimple/other.cpp similarity index 100% rename from arduino/sketch/testdata/SketchSimple/other.cpp rename to internal/arduino/sketch/testdata/SketchSimple/other.cpp diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/.#sketch.ino b/internal/arduino/sketch/testdata/SketchSymlinkSrc/.#sketch.ino similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/.#sketch.ino rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/.#sketch.ino diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/SketchSymlinkSrc.ino b/internal/arduino/sketch/testdata/SketchSymlinkSrc/SketchSymlinkSrc.ino similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/SketchSymlinkSrc.ino rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/SketchSymlinkSrc.ino diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/doc.txt b/internal/arduino/sketch/testdata/SketchSymlinkSrc/doc.txt similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/doc.txt rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/doc.txt diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/header.h b/internal/arduino/sketch/testdata/SketchSymlinkSrc/header.h similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/header.h rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/header.h diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/old.pde b/internal/arduino/sketch/testdata/SketchSymlinkSrc/old.pde similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/old.pde rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/old.pde diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/other.ino b/internal/arduino/sketch/testdata/SketchSymlinkSrc/other.ino similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/other.ino rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/other.ino diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/s_file.S b/internal/arduino/sketch/testdata/SketchSymlinkSrc/s_file.S similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/s_file.S rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/s_file.S diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/src/dont_load_me.ino b/internal/arduino/sketch/testdata/SketchSymlinkSrc/src/dont_load_me.ino similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/src/dont_load_me.ino rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/src/dont_load_me.ino diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/src/helper.h b/internal/arduino/sketch/testdata/SketchSymlinkSrc/src/helper.h similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/src/helper.h rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/src/helper.h diff --git a/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/SketchWithDefaultFQBNAndPort.ino b/internal/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/SketchWithDefaultFQBNAndPort.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/SketchWithDefaultFQBNAndPort.ino rename to internal/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/SketchWithDefaultFQBNAndPort.ino diff --git a/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/sketch.yml b/internal/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/sketch.yml similarity index 100% rename from arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/sketch.yml rename to internal/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/sketch.yml diff --git a/arduino/sketch/testdata/SketchWithIppFile/SketchWithIppFile.ino b/internal/arduino/sketch/testdata/SketchWithIppFile/SketchWithIppFile.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithIppFile/SketchWithIppFile.ino rename to internal/arduino/sketch/testdata/SketchWithIppFile/SketchWithIppFile.ino diff --git a/arduino/sketch/testdata/SketchWithIppFile/template.ipp b/internal/arduino/sketch/testdata/SketchWithIppFile/template.ipp similarity index 100% rename from arduino/sketch/testdata/SketchWithIppFile/template.ipp rename to internal/arduino/sketch/testdata/SketchWithIppFile/template.ipp diff --git a/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/SketchWithMarkdownAsciidocJson.ino b/internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/SketchWithMarkdownAsciidocJson.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/SketchWithMarkdownAsciidocJson.ino rename to internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/SketchWithMarkdownAsciidocJson.ino diff --git a/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.adoc b/internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.adoc similarity index 100% rename from arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.adoc rename to internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.adoc diff --git a/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.json b/internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.json similarity index 100% rename from arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.json rename to internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.json diff --git a/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.md b/internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.md similarity index 100% rename from arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.md rename to internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.md diff --git a/arduino/sketch/testdata/SketchWithMultipleSymlinkLoops/SketchWithMultipleSymlinkLoops.ino b/internal/arduino/sketch/testdata/SketchWithMultipleSymlinkLoops/SketchWithMultipleSymlinkLoops.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithMultipleSymlinkLoops/SketchWithMultipleSymlinkLoops.ino rename to internal/arduino/sketch/testdata/SketchWithMultipleSymlinkLoops/SketchWithMultipleSymlinkLoops.ino diff --git a/arduino/sketch/testdata/SketchWithProfiles/sketch.yml b/internal/arduino/sketch/testdata/SketchWithProfiles/sketch.yml similarity index 98% rename from arduino/sketch/testdata/SketchWithProfiles/sketch.yml rename to internal/arduino/sketch/testdata/SketchWithProfiles/sketch.yml index fdbd998d093..868d8eb5116 100644 --- a/arduino/sketch/testdata/SketchWithProfiles/sketch.yml +++ b/internal/arduino/sketch/testdata/SketchWithProfiles/sketch.yml @@ -1,6 +1,7 @@ profiles: nanorp: fqbn: arduino:mbed_nano:nanorp2040connect + programmer: p1 platforms: - platform: arduino:mbed_nano (2.1.0) libraries: diff --git a/arduino/sketch/testdata/SketchWithSymlink/SketchWithSymlink.ino b/internal/arduino/sketch/testdata/SketchWithSymlink/SketchWithSymlink.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithSymlink/SketchWithSymlink.ino rename to internal/arduino/sketch/testdata/SketchWithSymlink/SketchWithSymlink.ino diff --git a/arduino/sketch/testdata/SketchWithSymlink/some_folder/helper.h b/internal/arduino/sketch/testdata/SketchWithSymlink/some_folder/helper.h similarity index 100% rename from arduino/sketch/testdata/SketchWithSymlink/some_folder/helper.h rename to internal/arduino/sketch/testdata/SketchWithSymlink/some_folder/helper.h diff --git a/arduino/sketch/testdata/SketchWithSymlinkLoop/SketchWithSymlinkLoop.ino b/internal/arduino/sketch/testdata/SketchWithSymlinkLoop/SketchWithSymlinkLoop.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithSymlinkLoop/SketchWithSymlinkLoop.ino rename to internal/arduino/sketch/testdata/SketchWithSymlinkLoop/SketchWithSymlinkLoop.ino diff --git a/arduino/sketch/testdata/SketchWithSymlinkLoop/some_folder/helper.h b/internal/arduino/sketch/testdata/SketchWithSymlinkLoop/some_folder/helper.h similarity index 100% rename from arduino/sketch/testdata/SketchWithSymlinkLoop/some_folder/helper.h rename to internal/arduino/sketch/testdata/SketchWithSymlinkLoop/some_folder/helper.h diff --git a/arduino/sketch/testdata/SketchWithTppFile/SketchWithTppFile.ino b/internal/arduino/sketch/testdata/SketchWithTppFile/SketchWithTppFile.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithTppFile/SketchWithTppFile.ino rename to internal/arduino/sketch/testdata/SketchWithTppFile/SketchWithTppFile.ino diff --git a/arduino/sketch/testdata/SketchWithTppFile/template.tpp b/internal/arduino/sketch/testdata/SketchWithTppFile/template.tpp similarity index 100% rename from arduino/sketch/testdata/SketchWithTppFile/template.tpp rename to internal/arduino/sketch/testdata/SketchWithTppFile/template.tpp diff --git a/arduino/sketch/testdata/SketchWithWrongMain/main.ino b/internal/arduino/sketch/testdata/SketchWithWrongMain/main.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithWrongMain/main.ino rename to internal/arduino/sketch/testdata/SketchWithWrongMain/main.ino diff --git a/arduino/sketch/testdata/TestNewItem.ino b/internal/arduino/sketch/testdata/TestNewItem.ino similarity index 100% rename from arduino/sketch/testdata/TestNewItem.ino rename to internal/arduino/sketch/testdata/TestNewItem.ino diff --git a/arduino/sketch/yaml.go b/internal/arduino/sketch/yaml.go similarity index 89% rename from arduino/sketch/yaml.go rename to internal/arduino/sketch/yaml.go index 952b200c225..96dcf277838 100644 --- a/arduino/sketch/yaml.go +++ b/internal/arduino/sketch/yaml.go @@ -16,9 +16,11 @@ package sketch import ( + "errors" "fmt" "strings" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "gopkg.in/yaml.v3" ) @@ -75,15 +77,15 @@ func updateOrAddYamlRootEntry(path *paths.Path, key, newValue string) error { dstYaml := []byte(strings.Join(srcYaml, fmt.Sprintln()) + fmt.Sprintln()) var dst interface{} if err := yaml.Unmarshal(dstYaml, &dst); err != nil { - return fmt.Errorf("%s: %w", tr("could not update sketch project file"), err) + return fmt.Errorf("%s: %w", i18n.Tr("could not update sketch project file"), err) } dstMap, ok := dst.(map[string]interface{}) if !ok { - return fmt.Errorf(tr("could not update sketch project file")) + return errors.New(i18n.Tr("could not update sketch project file")) } writtenValue, notRemoved := dstMap[key] if (newValue == "" && notRemoved) || (newValue != "" && newValue != writtenValue) { - return fmt.Errorf(tr("could not update sketch project file")) + return errors.New(i18n.Tr("could not update sketch project file")) } // Write back the updated YAML diff --git a/arduino/sketch/yaml_test.go b/internal/arduino/sketch/yaml_test.go similarity index 100% rename from arduino/sketch/yaml_test.go rename to internal/arduino/sketch/yaml_test.go diff --git a/arduino/utils/filenames.go b/internal/arduino/utils/filenames.go similarity index 100% rename from arduino/utils/filenames.go rename to internal/arduino/utils/filenames.go diff --git a/arduino/utils/search.go b/internal/arduino/utils/search.go similarity index 100% rename from arduino/utils/search.go rename to internal/arduino/utils/search.go diff --git a/arduino/utils/url.go b/internal/arduino/utils/url.go similarity index 100% rename from arduino/utils/url.go rename to internal/arduino/utils/url.go diff --git a/arduino/utils/url_test.go b/internal/arduino/utils/url_test.go similarity index 100% rename from arduino/utils/url_test.go rename to internal/arduino/utils/url_test.go diff --git a/buildcache/build_cache.go b/internal/buildcache/build_cache.go similarity index 98% rename from buildcache/build_cache.go rename to internal/buildcache/build_cache.go index dc690e2cbc2..e61488a4cc6 100644 --- a/buildcache/build_cache.go +++ b/internal/buildcache/build_cache.go @@ -19,7 +19,6 @@ import ( "time" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" "github.com/sirupsen/logrus" ) @@ -108,6 +107,6 @@ func removeIfExpired(dir *paths.Path, ttl time.Duration) { logrus.Tracef(`Purging cache directory "%s". Expired by %s`, dir, lifeExpectancy.Abs()) err = dir.RemoveAll() if err != nil { - logrus.Tracef(`Error while pruning cache directory "%s": %s`, dir, errors.WithStack(err)) + logrus.Tracef(`Error while pruning cache directory "%s": %s`, dir, err) } } diff --git a/buildcache/build_cache_test.go b/internal/buildcache/build_cache_test.go similarity index 100% rename from buildcache/build_cache_test.go rename to internal/buildcache/build_cache_test.go diff --git a/internal/cli/arguments/arguments.go b/internal/cli/arguments/arguments.go index e3aa6a8dded..2d5077dbf7a 100644 --- a/internal/cli/arguments/arguments.go +++ b/internal/cli/arguments/arguments.go @@ -18,13 +18,11 @@ package arguments import ( "strings" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // CheckFlagsConflicts is a helper function useful to report errors when more than one conflicting flag is used func CheckFlagsConflicts(command *cobra.Command, flagNames ...string) { for _, flagName := range flagNames { @@ -33,7 +31,7 @@ func CheckFlagsConflicts(command *cobra.Command, flagNames ...string) { } } flags := "--" + strings.Join(flagNames, ", --") - msg := tr("Can't use the following flags together: %s", flags) + msg := i18n.Tr("Can't use the following flags together: %s", flags) feedback.Fatal(msg, feedback.ErrBadArgument) } @@ -44,7 +42,7 @@ func CheckFlagsMandatory(command *cobra.Command, flagNames ...string) { continue } flags := "--" + strings.Join(flagNames, ", --") - msg := tr("Flag %[1]s is mandatory when used in conjunction with: %[2]s", "--"+flagName, flags) + msg := i18n.Tr("Flag %[1]s is mandatory when used in conjunction with: %[2]s", "--"+flagName, flags) feedback.Fatal(msg, feedback.ErrBadArgument) } } diff --git a/internal/cli/arguments/completion.go b/internal/cli/arguments/completion.go index c97ac72f064..a8867c51cf2 100644 --- a/internal/cli/arguments/completion.go +++ b/internal/cli/arguments/completion.go @@ -18,10 +18,7 @@ package arguments import ( "context" - "github.com/arduino/arduino-cli/commands/board" - "github.com/arduino/arduino-cli/commands/core" - "github.com/arduino/arduino-cli/commands/lib" - "github.com/arduino/arduino-cli/commands/upload" + f "github.com/arduino/arduino-cli/internal/algorithms" "github.com/arduino/arduino-cli/internal/cli/instance" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) @@ -29,26 +26,26 @@ import ( // GetInstalledBoards is an helper function useful to autocomplete. // It returns a list of fqbn // it's taken from cli/board/listall.go -func GetInstalledBoards() []string { - inst := instance.CreateAndInit() +func GetInstalledBoards(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + inst := instance.CreateAndInit(ctx, srv) - list, _ := board.ListAll(context.Background(), &rpc.BoardListAllRequest{ + list, _ := srv.BoardListAll(ctx, &rpc.BoardListAllRequest{ Instance: inst, SearchArgs: nil, IncludeHiddenBoards: false, }) var res []string // transform the data structure for the completion - for _, i := range list.Boards { - res = append(res, i.Fqbn+"\t"+i.Name) + for _, i := range list.GetBoards() { + res = append(res, i.GetFqbn()+"\t"+i.GetName()) } return res } // GetInstalledProgrammers is an helper function useful to autocomplete. // It returns a list of programmers available based on the installed boards -func GetInstalledProgrammers() []string { - inst := instance.CreateAndInit() +func GetInstalledProgrammers(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + inst := instance.CreateAndInit(ctx, srv) // we need the list of the available fqbn in order to get the list of the programmers listAllReq := &rpc.BoardListAllRequest{ @@ -56,13 +53,13 @@ func GetInstalledProgrammers() []string { SearchArgs: nil, IncludeHiddenBoards: false, } - list, _ := board.ListAll(context.Background(), listAllReq) + list, _ := srv.BoardListAll(ctx, listAllReq) installedProgrammers := make(map[string]string) - for _, board := range list.Boards { - programmers, _ := upload.ListProgrammersAvailableForUpload(context.Background(), &rpc.ListProgrammersAvailableForUploadRequest{ + for _, board := range list.GetBoards() { + programmers, _ := srv.ListProgrammersAvailableForUpload(ctx, &rpc.ListProgrammersAvailableForUploadRequest{ Instance: inst, - Fqbn: board.Fqbn, + Fqbn: board.GetFqbn(), }) for _, programmer := range programmers.GetProgrammers() { installedProgrammers[programmer.GetId()] = programmer.GetName() @@ -80,55 +77,59 @@ func GetInstalledProgrammers() []string { // GetUninstallableCores is an helper function useful to autocomplete. // It returns a list of cores which can be uninstalled -func GetUninstallableCores() []string { - inst := instance.CreateAndInit() +func GetUninstallableCores(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + inst := instance.CreateAndInit(ctx, srv) - platforms, _ := core.PlatformList(&rpc.PlatformListRequest{ - Instance: inst, - UpdatableOnly: false, - All: false, + platforms, _ := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + ManuallyInstalled: true, }) + var res []string // transform the data structure for the completion - for _, i := range platforms.InstalledPlatforms { - res = append(res, i.Id+"\t"+i.Name) + for _, i := range platforms.GetSearchOutput() { + if i.GetInstalledVersion() == "" { + continue + } + res = append(res, i.GetMetadata().GetId()+"\t"+i.GetInstalledRelease().GetName()) } return res } // GetInstallableCores is an helper function useful to autocomplete. // It returns a list of cores which can be installed/downloaded -func GetInstallableCores() []string { - inst := instance.CreateAndInit() +func GetInstallableCores(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + inst := instance.CreateAndInit(ctx, srv) - platforms, _ := core.PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "", - AllVersions: false, + platforms, _ := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "", }) var res []string // transform the data structure for the completion - for _, i := range platforms.SearchOutput { - res = append(res, i.Id+"\t"+i.Name) + for _, i := range platforms.GetSearchOutput() { + if latest := i.GetLatestRelease(); latest != nil { + res = append(res, i.GetMetadata().GetId()+"\t"+latest.GetName()) + } } return res } // GetInstalledLibraries is an helper function useful to autocomplete. // It returns a list of libs which are currently installed, including the builtin ones -func GetInstalledLibraries() []string { - return getLibraries(true) +func GetInstalledLibraries(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + return getLibraries(ctx, srv, true) } // GetUninstallableLibraries is an helper function useful to autocomplete. // It returns a list of libs which can be uninstalled -func GetUninstallableLibraries() []string { - return getLibraries(false) +func GetUninstallableLibraries(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + return getLibraries(ctx, srv, false) } -func getLibraries(all bool) []string { - inst := instance.CreateAndInit() - libs, _ := lib.LibraryList(context.Background(), &rpc.LibraryListRequest{ +func getLibraries(ctx context.Context, srv rpc.ArduinoCoreServiceServer, all bool) []string { + inst := instance.CreateAndInit(ctx, srv) + libs, _ := srv.LibraryList(ctx, &rpc.LibraryListRequest{ Instance: inst, All: all, Updatable: false, @@ -137,25 +138,25 @@ func getLibraries(all bool) []string { }) var res []string // transform the data structure for the completion - for _, i := range libs.InstalledLibraries { - res = append(res, i.Library.Name+"\t"+i.Library.Sentence) + for _, i := range libs.GetInstalledLibraries() { + res = append(res, i.GetLibrary().GetName()+"\t"+i.GetLibrary().GetSentence()) } return res } // GetInstallableLibs is an helper function useful to autocomplete. // It returns a list of libs which can be installed/downloaded -func GetInstallableLibs() []string { - inst := instance.CreateAndInit() +func GetInstallableLibs(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + inst := instance.CreateAndInit(ctx, srv) - libs, _ := lib.LibrarySearch(context.Background(), &rpc.LibrarySearchRequest{ + libs, _ := srv.LibrarySearch(ctx, &rpc.LibrarySearchRequest{ Instance: inst, SearchArgs: "", // if no query is specified all the libs are returned }) var res []string // transform the data structure for the completion - for _, i := range libs.Libraries { - res = append(res, i.Name+"\t"+i.Latest.Sentence) + for _, i := range libs.GetLibraries() { + res = append(res, i.GetName()+"\t"+i.GetLatest().GetSentence()) } return res } @@ -163,16 +164,11 @@ func GetInstallableLibs() []string { // GetAvailablePorts is an helper function useful to autocomplete. // It returns a list of upload port of the boards which are currently connected. // It will not suggests network ports because the timeout is not set. -func GetAvailablePorts() []*rpc.Port { - inst := instance.CreateAndInit() +func GetAvailablePorts(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []*rpc.Port { + // Get the port list + inst := instance.CreateAndInit(ctx, srv) + list, _ := srv.BoardList(ctx, &rpc.BoardListRequest{Instance: inst}) - list, _, _ := board.List(&rpc.BoardListRequest{ - Instance: inst, - }) - var res []*rpc.Port - // transform the data structure for the completion - for _, i := range list { - res = append(res, i.Port) - } - return res + // Transform the data structure for the completion (DetectedPort -> Port) + return f.Map(list.GetPorts(), (*rpc.DetectedPort).GetPort) } diff --git a/internal/cli/arguments/discovery_timeout.go b/internal/cli/arguments/discovery_timeout.go index 140c37fcef8..c63791f64d9 100644 --- a/internal/cli/arguments/discovery_timeout.go +++ b/internal/cli/arguments/discovery_timeout.go @@ -18,6 +18,7 @@ package arguments import ( "time" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/spf13/cobra" ) @@ -28,7 +29,7 @@ type DiscoveryTimeout struct { // AddToCommand adds the flags used to set fqbn to the specified Command func (d *DiscoveryTimeout) AddToCommand(cmd *cobra.Command) { - cmd.Flags().DurationVar(&d.timeout, "discovery-timeout", time.Second, tr("Max time to wait for port discovery, e.g.: 30s, 1m")) + cmd.Flags().DurationVar(&d.timeout, "discovery-timeout", time.Second, i18n.Tr("Max time to wait for port discovery, e.g.: 30s, 1m")) } // Get returns the timeout diff --git a/internal/cli/arguments/fqbn.go b/internal/cli/arguments/fqbn.go index 84c805c0088..a721c85d19f 100644 --- a/internal/cli/arguments/fqbn.go +++ b/internal/cli/arguments/fqbn.go @@ -16,10 +16,12 @@ package arguments import ( + "context" "strings" - "github.com/arduino/arduino-cli/arduino" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) @@ -33,13 +35,13 @@ type Fqbn struct { } // AddToCommand adds the flags used to set fqbn to the specified Command -func (f *Fqbn) AddToCommand(cmd *cobra.Command) { - cmd.Flags().StringVarP(&f.fqbn, "fqbn", "b", "", tr("Fully Qualified Board Name, e.g.: arduino:avr:uno")) +func (f *Fqbn) AddToCommand(cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer) { + cmd.Flags().StringVarP(&f.fqbn, "fqbn", "b", "", i18n.Tr("Fully Qualified Board Name, e.g.: arduino:avr:uno")) cmd.RegisterFlagCompletionFunc("fqbn", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return GetInstalledBoards(), cobra.ShellCompDirectiveDefault + return GetInstalledBoards(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }) cmd.Flags().StringSliceVar(&f.boardOptions, "board-options", []string{}, - tr("List of board options separated by commas. Or can be used multiple times for multiple options.")) + i18n.Tr("List of board options separated by commas. Or can be used multiple times for multiple options.")) } // String returns the fqbn with the board options if there are any @@ -69,25 +71,25 @@ func (f *Fqbn) Set(fqbn string) { // - the port is not found, in this case nil is returned // - the FQBN autodetection fail, in this case the function prints an error and // terminates the execution -func CalculateFQBNAndPort(portArgs *Port, fqbnArg *Fqbn, instance *rpc.Instance, defaultFQBN, defaultAddress, defaultProtocol string) (string, *rpc.Port) { +func CalculateFQBNAndPort(ctx context.Context, portArgs *Port, fqbnArg *Fqbn, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultFQBN, defaultAddress, defaultProtocol string) (string, *rpc.Port) { fqbn := fqbnArg.String() if fqbn == "" { fqbn = defaultFQBN } if fqbn == "" { if portArgs == nil || portArgs.address == "" { - feedback.FatalError(&arduino.MissingFQBNError{}, feedback.ErrGeneric) + feedback.FatalError(&cmderrors.MissingFQBNError{}, feedback.ErrGeneric) } - fqbn, port := portArgs.DetectFQBN(instance) + fqbn, port := portArgs.DetectFQBN(ctx, instance, srv) if fqbn == "" { - feedback.FatalError(&arduino.MissingFQBNError{}, feedback.ErrGeneric) + feedback.FatalError(&cmderrors.MissingFQBNError{}, feedback.ErrGeneric) } return fqbn, port } - port, err := portArgs.GetPort(instance, defaultAddress, defaultProtocol) + port, err := portArgs.GetPort(ctx, instance, srv, defaultAddress, defaultProtocol) if err != nil { - feedback.Fatal(tr("Error getting port metadata: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error getting port metadata: %v", err), feedback.ErrGeneric) } return fqbn, port } diff --git a/internal/cli/arguments/port.go b/internal/cli/arguments/port.go index 14f5846d80d..a9b94457e6b 100644 --- a/internal/cli/arguments/port.go +++ b/internal/cli/arguments/port.go @@ -17,13 +17,14 @@ package arguments import ( "context" - "fmt" + "errors" "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/board" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" f "github.com/arduino/arduino-cli/internal/algorithms" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -39,14 +40,14 @@ type Port struct { } // AddToCommand adds the flags used to set port and protocol to the specified Command -func (p *Port) AddToCommand(cmd *cobra.Command) { - cmd.Flags().StringVarP(&p.address, "port", "p", "", tr("Upload port address, e.g.: COM3 or /dev/ttyACM2")) +func (p *Port) AddToCommand(cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer) { + cmd.Flags().StringVarP(&p.address, "port", "p", "", i18n.Tr("Upload port address, e.g.: COM3 or /dev/ttyACM2")) cmd.RegisterFlagCompletionFunc("port", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return f.Map(GetAvailablePorts(), (*rpc.Port).GetAddress), cobra.ShellCompDirectiveDefault + return f.Map(GetAvailablePorts(cmd.Context(), srv), (*rpc.Port).GetAddress), cobra.ShellCompDirectiveDefault }) - cmd.Flags().StringVarP(&p.protocol, "protocol", "l", "", tr("Upload port protocol, e.g: serial")) + cmd.Flags().StringVarP(&p.protocol, "protocol", "l", "", i18n.Tr("Upload port protocol, e.g: serial")) cmd.RegisterFlagCompletionFunc("protocol", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return f.Map(GetAvailablePorts(), (*rpc.Port).GetProtocol), cobra.ShellCompDirectiveDefault + return f.Map(GetAvailablePorts(cmd.Context(), srv), (*rpc.Port).GetProtocol), cobra.ShellCompDirectiveDefault }) p.timeout.AddToCommand(cmd) } @@ -56,22 +57,21 @@ func (p *Port) AddToCommand(cmd *cobra.Command) { // This method allows will bypass the discoveries if: // - a nil instance is passed: in this case the plain port and protocol arguments are returned (even if empty) // - a protocol is specified: in this case the discoveries are not needed to autodetect the protocol. -func (p *Port) GetPortAddressAndProtocol(instance *rpc.Instance, defaultAddress, defaultProtocol string) (string, string, error) { +func (p *Port) GetPortAddressAndProtocol(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string) (string, string, error) { if p.protocol != "" || instance == nil { return p.address, p.protocol, nil } - port, err := p.GetPort(instance, defaultAddress, defaultProtocol) + port, err := p.GetPort(ctx, instance, srv, defaultAddress, defaultProtocol) if err != nil { return "", "", err } - return port.Address, port.Protocol, nil + return port.GetAddress(), port.GetProtocol(), nil } // GetPort returns the Port obtained by parsing command line arguments. // The extra metadata for the ports is obtained using the pluggable discoveries. -func (p *Port) GetPort(instance *rpc.Instance, defaultAddress, defaultProtocol string) (*rpc.Port, error) { - +func (p *Port) GetPort(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string) (*rpc.Port, error) { address := p.address protocol := p.protocol if address == "" && (defaultAddress != "" || defaultProtocol != "") { @@ -89,9 +89,12 @@ func (p *Port) GetPort(instance *rpc.Instance, defaultAddress, defaultProtocol s } logrus.WithField("port", address).Tracef("Upload port") - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(ctx) defer cancel() - watcher, err := board.Watch(ctx, &rpc.BoardListWatchRequest{Instance: instance}) + + stream, watcher := commands.BoardListWatchProxyToChan(ctx) + err := srv.BoardListWatch(&rpc.BoardListWatchRequest{Instance: instance}, stream) + if err != nil { return nil, err } @@ -116,7 +119,7 @@ func (p *Port) GetPort(instance *rpc.Instance, defaultAddress, defaultProtocol s Protocol: "serial", }, nil } - return nil, fmt.Errorf(tr("port not found: %[1]s %[2]s"), address, protocol) + return nil, errors.New(i18n.Tr("port not found: %[1]s %[2]s", address, protocol)) } } } @@ -129,15 +132,15 @@ func (p *Port) GetSearchTimeout() time.Duration { // DetectFQBN tries to identify the board connected to the port and returns the // discovered Port object together with the FQBN. If the port does not match // exactly 1 board, -func (p *Port) DetectFQBN(inst *rpc.Instance) (string, *rpc.Port) { - detectedPorts, _, err := board.List(&rpc.BoardListRequest{ +func (p *Port) DetectFQBN(ctx context.Context, inst *rpc.Instance, srv rpc.ArduinoCoreServiceServer) (string, *rpc.Port) { + detectedPorts, err := srv.BoardList(ctx, &rpc.BoardListRequest{ Instance: inst, Timeout: p.timeout.Get().Milliseconds(), }) if err != nil { - feedback.Fatal(tr("Error during FQBN detection: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error during FQBN detection: %v", err), feedback.ErrGeneric) } - for _, detectedPort := range detectedPorts { + for _, detectedPort := range detectedPorts.GetPorts() { port := detectedPort.GetPort() if p.address != port.GetAddress() { continue @@ -145,13 +148,18 @@ func (p *Port) DetectFQBN(inst *rpc.Instance) (string, *rpc.Port) { if p.protocol != "" && p.protocol != port.GetProtocol() { continue } - if len(detectedPort.MatchingBoards) > 1 { - feedback.FatalError(&arduino.MultipleBoardsDetectedError{Port: port}, feedback.ErrBadArgument) + if len(detectedPort.GetMatchingBoards()) > 1 { + feedback.FatalError(&cmderrors.MultipleBoardsDetectedError{Port: port}, feedback.ErrBadArgument) } - if len(detectedPort.MatchingBoards) == 0 { - feedback.FatalError(&arduino.NoBoardsDetectedError{Port: port}, feedback.ErrBadArgument) + if len(detectedPort.GetMatchingBoards()) == 0 { + feedback.FatalError(&cmderrors.NoBoardsDetectedError{Port: port}, feedback.ErrBadArgument) } - return detectedPort.MatchingBoards[0].Fqbn, port + return detectedPort.GetMatchingBoards()[0].GetFqbn(), port } return "", nil } + +// IsPortFlagSet returns true if the port address is provided +func (p *Port) IsPortFlagSet() bool { + return p.address != "" +} diff --git a/internal/cli/arguments/pre_post_script.go b/internal/cli/arguments/pre_post_script.go index 99a54e02d94..8d492ec06c8 100644 --- a/internal/cli/arguments/pre_post_script.go +++ b/internal/cli/arguments/pre_post_script.go @@ -16,7 +16,8 @@ package arguments import ( - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -34,10 +35,10 @@ type PrePostScriptsFlags struct { // AddToCommand adds flags that can be used to force running or skipping // of post installation scripts func (p *PrePostScriptsFlags) AddToCommand(cmd *cobra.Command) { - cmd.Flags().BoolVar(&p.runPostInstall, "run-post-install", false, tr("Force run of post-install scripts (if the CLI is not running interactively).")) - cmd.Flags().BoolVar(&p.skipPostInstall, "skip-post-install", false, tr("Force skip of post-install scripts (if the CLI is running interactively).")) - cmd.Flags().BoolVar(&p.runPreUninstall, "run-pre-uninstall", false, tr("Force run of pre-uninstall scripts (if the CLI is not running interactively).")) - cmd.Flags().BoolVar(&p.skipPreUninstall, "skip-pre-uninstall", false, tr("Force skip of pre-uninstall scripts (if the CLI is running interactively).")) + cmd.Flags().BoolVar(&p.runPostInstall, "run-post-install", false, i18n.Tr("Force run of post-install scripts (if the CLI is not running interactively).")) + cmd.Flags().BoolVar(&p.skipPostInstall, "skip-post-install", false, i18n.Tr("Force skip of post-install scripts (if the CLI is running interactively).")) + cmd.Flags().BoolVar(&p.runPreUninstall, "run-pre-uninstall", false, i18n.Tr("Force run of pre-uninstall scripts (if the CLI is not running interactively).")) + cmd.Flags().BoolVar(&p.skipPreUninstall, "skip-pre-uninstall", false, i18n.Tr("Force skip of pre-uninstall scripts (if the CLI is running interactively).")) } // GetRunPostInstall returns the run-post-install flag value @@ -71,7 +72,7 @@ func (p *PrePostScriptsFlags) DetectSkipPostInstallValue() bool { return true } - if !configuration.IsInteractive { + if !feedback.IsInteractive() { logrus.Info("Not running from console, will skip post-install by default") return true } @@ -90,7 +91,7 @@ func (p *PrePostScriptsFlags) DetectSkipPreUninstallValue() bool { return true } - if !configuration.IsInteractive { + if !feedback.IsInteractive() { logrus.Info("Not running from console, will skip pre-uninstall by default") return true } diff --git a/internal/cli/arguments/profiles.go b/internal/cli/arguments/profiles.go index 67253332582..be7fd6a2acd 100644 --- a/internal/cli/arguments/profiles.go +++ b/internal/cli/arguments/profiles.go @@ -15,7 +15,11 @@ package arguments -import "github.com/spf13/cobra" +import ( + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/spf13/cobra" +) // Profile contains the profile flag data. // This is useful so all flags used by commands that need @@ -25,9 +29,15 @@ type Profile struct { } // AddToCommand adds the flags used to set fqbn to the specified Command -func (f *Profile) AddToCommand(cmd *cobra.Command) { - cmd.Flags().StringVarP(&f.profile, "profile", "m", "", tr("Sketch profile to use")) - // TODO: register autocompletion +func (f *Profile) AddToCommand(cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer) { + cmd.Flags().StringVarP(&f.profile, "profile", "m", "", i18n.Tr("Sketch profile to use")) + cmd.RegisterFlagCompletionFunc("profile", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + var sketchProfile string + if len(args) > 0 { + sketchProfile = args[0] + } + return GetSketchProfiles(cmd.Context(), srv, sketchProfile), cobra.ShellCompDirectiveDefault + }) } // Get returns the profile name diff --git a/internal/cli/arguments/programmer.go b/internal/cli/arguments/programmer.go index 4cb00edd8d9..a077adc1b5c 100644 --- a/internal/cli/arguments/programmer.go +++ b/internal/cli/arguments/programmer.go @@ -15,7 +15,13 @@ package arguments -import "github.com/spf13/cobra" +import ( + "context" + + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/spf13/cobra" +) // Programmer contains the programmer flag data. // This is useful so all flags used by commands that need @@ -25,14 +31,33 @@ type Programmer struct { } // AddToCommand adds the flags used to set the programmer to the specified Command -func (p *Programmer) AddToCommand(cmd *cobra.Command) { - cmd.Flags().StringVarP(&p.programmer, "programmer", "P", "", tr("Programmer to use, e.g: atmel_ice")) +func (p *Programmer) AddToCommand(cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer) { + cmd.Flags().StringVarP(&p.programmer, "programmer", "P", "", i18n.Tr("Programmer to use, e.g: atmel_ice")) cmd.RegisterFlagCompletionFunc("programmer", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return GetInstalledProgrammers(), cobra.ShellCompDirectiveDefault + return GetInstalledProgrammers(cmd.Context(), srv), cobra.ShellCompDirectiveDefault + }) +} + +// String returns the programmer specified by the user, or the default programmer +// for the given board if defined. +func (p *Programmer) String(ctx context.Context, inst *rpc.Instance, srv rpc.ArduinoCoreServiceServer, fqbn string) string { + if p.programmer != "" { + return p.programmer + } + if inst == nil || fqbn == "" { + return "" + } + details, err := srv.BoardDetails(ctx, &rpc.BoardDetailsRequest{ + Instance: inst, + Fqbn: fqbn, }) + if err != nil { + return "" + } + return details.GetDefaultProgrammerId() } -// String returns the programmer -func (p *Programmer) String() string { +// GetProgrammer returns the programmer specified by the user +func (p *Programmer) GetProgrammer() string { return p.programmer } diff --git a/internal/cli/arguments/reference.go b/internal/cli/arguments/reference.go index a870a0616a2..8c09b532a72 100644 --- a/internal/cli/arguments/reference.go +++ b/internal/cli/arguments/reference.go @@ -16,12 +16,13 @@ package arguments import ( - "fmt" + "context" + "errors" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/core" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" ) @@ -43,10 +44,11 @@ func (r *Reference) String() string { // ParseReferences is a convenient wrapper that operates on a slice of strings and // calls ParseReference for each of them. It returns at the first invalid argument. -func ParseReferences(args []string) ([]*Reference, error) { +func ParseReferences(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) ([]*Reference, error) { ret := []*Reference{} for _, arg := range args { - reference, err := ParseReference(arg) + // TODO: This is quite resource consuming (since it creates a new instance for each call) + reference, err := ParseReference(ctx, srv, arg) if err != nil { return nil, err } @@ -60,48 +62,47 @@ func ParseReferences(args []string) ([]*Reference, error) { // To achieve that, it tries to use github.com/arduino/arduino-cli/commands/core.GetPlatform // Note that the Reference is returned rightaway if the arg inserted by the user matches perfectly one in the response of core.GetPlatform // A MultiplePlatformsError is returned if the platform searched by the user matches multiple platforms -func ParseReference(arg string) (*Reference, error) { +func ParseReference(ctx context.Context, srv rpc.ArduinoCoreServiceServer, arg string) (*Reference, error) { logrus.Infof("Parsing reference %s", arg) ret := &Reference{} if arg == "" { - return nil, fmt.Errorf(tr("invalid empty core argument")) + return nil, errors.New(i18n.Tr("invalid empty core argument")) } + toks := strings.SplitN(arg, "@", 2) if toks[0] == "" { - return nil, fmt.Errorf(tr("invalid empty core reference '%s'"), arg) + return nil, errors.New(i18n.Tr("invalid empty core reference '%s'", arg)) } ret.PackageName = toks[0] if len(toks) > 1 { if toks[1] == "" { - return nil, fmt.Errorf(tr("invalid empty core version: '%s'"), arg) + return nil, errors.New(i18n.Tr("invalid empty core version: '%s'", arg)) } ret.Version = toks[1] } toks = strings.Split(ret.PackageName, ":") if len(toks) != 2 { - return nil, fmt.Errorf(tr("invalid item %s"), arg) + return nil, errors.New(i18n.Tr("invalid item %s", arg)) } if toks[0] == "" { - return nil, fmt.Errorf(tr("invalid empty core name '%s'"), arg) + return nil, errors.New(i18n.Tr("invalid empty core name '%s'", arg)) } - ret.PackageName = toks[0] if toks[1] == "" { - return nil, fmt.Errorf(tr("invalid empty core architecture '%s'"), arg) + return nil, errors.New(i18n.Tr("invalid empty core architecture '%s'", arg)) } + ret.PackageName = toks[0] ret.Architecture = toks[1] // Now that we have the required informations in `ret` we can // try to use core.PlatformList to optimize what the user typed // (by replacing the PackageName and Architecture in ret with the content of core.GetPlatform()) - platforms, _ := core.PlatformList(&rpc.PlatformListRequest{ - Instance: instance.CreateAndInit(), - UpdatableOnly: false, - All: true, // this is true because we want also the installable platforms + platforms, _ := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: instance.CreateAndInit(ctx, srv), }) foundPlatforms := []string{} - for _, platform := range platforms.InstalledPlatforms { - platformID := platform.GetId() + for _, platform := range platforms.GetSearchOutput() { + platformID := platform.GetMetadata().GetId() platformUser := ret.PackageName + ":" + ret.Architecture // At first we check if the platform the user is searching for matches an available one, // this way we do not need to adapt the casing and we can return it directly @@ -110,18 +111,18 @@ func ParseReference(arg string) (*Reference, error) { } if strings.EqualFold(platformUser, platformID) { logrus.Infof("Found possible match for reference %s -> %s", platformUser, platformID) - toks = strings.Split(platformID, ":") foundPlatforms = append(foundPlatforms, platformID) } } // replace the returned Reference only if only one occurrence is found, // otherwise return an error to the user because we don't know on which platform operate if len(foundPlatforms) == 0 { - return nil, &arduino.PlatformNotFoundError{Platform: arg} + return nil, &cmderrors.PlatformNotFoundError{Platform: arg} } if len(foundPlatforms) > 1 { - return nil, &arduino.MultiplePlatformsError{Platforms: foundPlatforms, UserPlatform: arg} + return nil, &cmderrors.MultiplePlatformsError{Platforms: foundPlatforms, UserPlatform: arg} } + toks = strings.Split(foundPlatforms[0], ":") ret.PackageName = toks[0] ret.Architecture = toks[1] return ret, nil diff --git a/internal/cli/arguments/reference_test.go b/internal/cli/arguments/reference_test.go index 29f20300c78..e55051cc768 100644 --- a/internal/cli/arguments/reference_test.go +++ b/internal/cli/arguments/reference_test.go @@ -16,9 +16,10 @@ package arguments_test import ( + "context" "testing" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -46,10 +47,6 @@ var badCores = []struct { {"", nil}, } -func init() { - configuration.Settings = configuration.Init("") -} - func TestArgsStringify(t *testing.T) { for _, core := range goodCores { require.Equal(t, core.in, core.expected.String()) @@ -57,14 +54,16 @@ func TestArgsStringify(t *testing.T) { } func TestParseReferenceCores(t *testing.T) { + srv := commands.NewArduinoCoreServer() + ctx := context.Background() for _, tt := range goodCores { - actual, err := arguments.ParseReference(tt.in) + actual, err := arguments.ParseReference(ctx, srv, tt.in) assert.Nil(t, err) assert.Equal(t, tt.expected, actual) } for _, tt := range badCores { - actual, err := arguments.ParseReference(tt.in) + actual, err := arguments.ParseReference(ctx, srv, tt.in) require.NotNil(t, err, "Testing bad core '%s'", tt.in) require.Equal(t, tt.expected, actual, "Testing bad core '%s'", tt.in) } @@ -76,7 +75,8 @@ func TestParseArgs(t *testing.T) { input = append(input, tt.in) } - refs, err := arguments.ParseReferences(input) + srv := commands.NewArduinoCoreServer() + refs, err := arguments.ParseReferences(context.Background(), srv, input) assert.Nil(t, err) assert.Equal(t, len(goodCores), len(refs)) diff --git a/internal/cli/arguments/show_properties.go b/internal/cli/arguments/show_properties.go index ecf3108b639..723ea94df91 100644 --- a/internal/cli/arguments/show_properties.go +++ b/internal/cli/arguments/show_properties.go @@ -16,8 +16,9 @@ package arguments import ( - "fmt" + "errors" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/spf13/cobra" ) @@ -48,7 +49,7 @@ func (p *ShowProperties) Get() (ShowPropertiesMode, error) { case "expanded": return ShowPropertiesExpanded, nil default: - return ShowPropertiesDisabled, fmt.Errorf(tr("invalid option '%s'.", p.arg)) + return ShowPropertiesDisabled, errors.New(i18n.Tr("invalid option '%s'.", p.arg)) } } @@ -56,7 +57,7 @@ func (p *ShowProperties) Get() (ShowPropertiesMode, error) { func (p *ShowProperties) AddToCommand(command *cobra.Command) { command.Flags().StringVar(&p.arg, "show-properties", "disabled", - tr(`Show build properties. The properties are expanded, use "--show-properties=unexpanded" if you want them exactly as they are defined.`), + i18n.Tr(`Show build properties. The properties are expanded, use "--show-properties=unexpanded" if you want them exactly as they are defined.`), ) command.Flags().Lookup("show-properties").NoOptDefVal = "expanded" // default if the flag is present with no value } diff --git a/internal/cli/arguments/sketch.go b/internal/cli/arguments/sketch.go index 4e670bab6ac..8a912e0dbc8 100644 --- a/internal/cli/arguments/sketch.go +++ b/internal/cli/arguments/sketch.go @@ -16,28 +16,46 @@ package arguments import ( - sk "github.com/arduino/arduino-cli/commands/sketch" + "context" + + f "github.com/arduino/arduino-cli/internal/algorithms" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" ) // InitSketchPath returns an instance of paths.Path pointing to sketchPath. // If sketchPath is an empty string returns the current working directory. -// In both cases it warns the user if he's using deprecated files func InitSketchPath(path string) (sketchPath *paths.Path) { if path != "" { sketchPath = paths.New(path) } else { wd, err := paths.Getwd() if err != nil { - feedback.Fatal(tr("Couldn't get current working directory: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Couldn't get current working directory: %v", err), feedback.ErrGeneric) } logrus.Infof("Reading sketch from dir: %s", wd) sketchPath = wd } - if msg := sk.WarnDeprecatedFiles(sketchPath); msg != "" { - feedback.Warning(msg) - } return sketchPath } + +// GetSketchProfiles is an helper function useful to autocomplete. +// It returns the profile names set in the sketch.yaml +func GetSketchProfiles(ctx context.Context, srv rpc.ArduinoCoreServiceServer, sketchPath string) []string { + if sketchPath == "" { + if wd, _ := paths.Getwd(); wd != nil && wd.String() != "" { + sketchPath = wd.String() + } else { + return nil + } + } + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath}) + if err != nil { + return nil + } + profiles := resp.GetSketch().GetProfiles() + return f.Map(profiles, (*rpc.SketchProfile).GetName) +} diff --git a/internal/cli/arguments/user_fields.go b/internal/cli/arguments/user_fields.go index 8f799d4c650..e9bf89c1ba4 100644 --- a/internal/cli/arguments/user_fields.go +++ b/internal/cli/arguments/user_fields.go @@ -25,11 +25,11 @@ import ( func AskForUserFields(userFields []*rpc.UserField) (map[string]string, error) { fields := map[string]string{} for _, f := range userFields { - value, err := feedback.InputUserField(f.Label, f.Secret) + value, err := feedback.InputUserField(f.GetLabel(), f.GetSecret()) if err != nil { return nil, err } - fields[f.Name] = value + fields[f.GetName()] = value } return fields, nil diff --git a/internal/cli/board/attach.go b/internal/cli/board/attach.go index f6536991ab7..871f0bbd5dc 100644 --- a/internal/cli/board/attach.go +++ b/internal/cli/board/attach.go @@ -20,45 +20,50 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/sketch" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -func initAttachCommand() *cobra.Command { +func initAttachCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var port arguments.Port var fqbn arguments.Fqbn + var programmer arguments.Programmer attachCommand := &cobra.Command{ - Use: fmt.Sprintf("attach [-p <%s>] [-b <%s>] [%s]", tr("port"), tr("FQBN"), tr("sketchPath")), - Short: tr("Attaches a sketch to a board."), - Long: tr("Sets the default values for port and FQBN. If no port or FQBN are specified, the current default port and FQBN are displayed."), + Use: fmt.Sprintf("attach [-p <%s>] [-b <%s>] [-P <%s>] [%s]", i18n.Tr("port"), i18n.Tr("FQBN"), i18n.Tr("programmer"), i18n.Tr("sketchPath")), + Short: i18n.Tr("Attaches a sketch to a board."), + Long: i18n.Tr("Sets the default values for port and FQBN. If no port, FQBN or programmer are specified, the current default port, FQBN and programmer are displayed."), Example: " " + os.Args[0] + " board attach -p /dev/ttyACM0\n" + " " + os.Args[0] + " board attach -p /dev/ttyACM0 HelloWorld\n" + - " " + os.Args[0] + " board attach -b arduino:samd:mkr1000", + " " + os.Args[0] + " board attach -b arduino:samd:mkr1000" + + " " + os.Args[0] + " board attach -P atmel_ice", Args: cobra.MaximumNArgs(1), Run: func(cmd *cobra.Command, args []string) { + ctx := cmd.Context() sketchPath := "" if len(args) > 0 { sketchPath = args[0] } - runAttachCommand(sketchPath, &port, fqbn.String()) + runAttachCommand(ctx, srv, sketchPath, &port, fqbn.String(), &programmer) }, } - fqbn.AddToCommand(attachCommand) - port.AddToCommand(attachCommand) + fqbn.AddToCommand(attachCommand, srv) + port.AddToCommand(attachCommand, srv) + programmer.AddToCommand(attachCommand, srv) return attachCommand } -func runAttachCommand(path string, port *arguments.Port, fqbn string) { +func runAttachCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, path string, port *arguments.Port, fqbn string, programmer *arguments.Programmer) { sketchPath := arguments.InitSketchPath(path) - portAddress, portProtocol, _ := port.GetPortAddressAndProtocol(nil, "", "") - newDefaults, err := sketch.SetSketchDefaults(context.Background(), &rpc.SetSketchDefaultsRequest{ + portAddress, portProtocol, _ := port.GetPortAddressAndProtocol(ctx, nil, srv, "", "") + newDefaults, err := srv.SetSketchDefaults(ctx, &rpc.SetSketchDefaultsRequest{ SketchPath: sketchPath.String(), DefaultFqbn: fqbn, + DefaultProgrammer: programmer.GetProgrammer(), DefaultPortAddress: portAddress, DefaultPortProtocol: portProtocol, }) @@ -67,7 +72,8 @@ func runAttachCommand(path string, port *arguments.Port, fqbn string) { } res := &boardAttachResult{ - Fqbn: newDefaults.GetDefaultFqbn(), + Fqbn: newDefaults.GetDefaultFqbn(), + Programmer: newDefaults.GetDefaultProgrammer(), } if newDefaults.GetDefaultPortAddress() != "" { res.Port = &boardAttachPortResult{ @@ -92,8 +98,9 @@ func (b *boardAttachPortResult) String() string { } type boardAttachResult struct { - Fqbn string `json:"fqbn,omitempty"` - Port *boardAttachPortResult `json:"port,omitempty"` + Fqbn string `json:"fqbn,omitempty"` + Programmer string `json:"programmer,omitempty"` + Port *boardAttachPortResult `json:"port,omitempty"` } func (b *boardAttachResult) Data() interface{} { @@ -101,10 +108,11 @@ func (b *boardAttachResult) Data() interface{} { } func (b *boardAttachResult) String() string { - if b.Port == nil && b.Fqbn == "" { - return tr("No default port or FQBN set") + if b.Port == nil && b.Fqbn == "" && b.Programmer == "" { + return i18n.Tr("No default port, FQBN or programmer set") } - res := fmt.Sprintf("%s: %s\n", tr("Default port set to"), b.Port) - res += fmt.Sprintf("%s: %s\n", tr("Default FQBN set to"), b.Fqbn) + res := fmt.Sprintf("%s: %s\n", i18n.Tr("Default port set to"), b.Port) + res += fmt.Sprintf("%s: %s\n", i18n.Tr("Default FQBN set to"), b.Fqbn) + res += fmt.Sprintf("%s: %s\n", i18n.Tr("Default programmer set to"), b.Programmer) return res } diff --git a/internal/cli/board/board.go b/internal/cli/board/board.go index 762d502f645..23bc050f071 100644 --- a/internal/cli/board/board.go +++ b/internal/cli/board/board.go @@ -18,27 +18,26 @@ package board import ( "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand created a new `board` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { boardCommand := &cobra.Command{ Use: "board", - Short: tr("Arduino board commands."), - Long: tr("Arduino board commands."), - Example: " # " + tr("Lists all connected boards.") + "\n" + + Short: i18n.Tr("Arduino board commands."), + Long: i18n.Tr("Arduino board commands."), + Example: " # " + i18n.Tr("Lists all connected boards.") + "\n" + " " + os.Args[0] + " board list", } - boardCommand.AddCommand(initAttachCommand()) - boardCommand.AddCommand(initDetailsCommand()) - boardCommand.AddCommand(initListCommand()) - boardCommand.AddCommand(initListAllCommand()) - boardCommand.AddCommand(initSearchCommand()) + boardCommand.AddCommand(initAttachCommand(srv)) + boardCommand.AddCommand(initDetailsCommand(srv)) + boardCommand.AddCommand(initListCommand(srv)) + boardCommand.AddCommand(initListAllCommand(srv)) + boardCommand.AddCommand(initSearchCommand(srv)) return boardCommand } diff --git a/internal/cli/board/details.go b/internal/cli/board/details.go index 52bde9c0872..5023050c579 100644 --- a/internal/cli/board/details.go +++ b/internal/cli/board/details.go @@ -20,43 +20,44 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/board" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/fatih/color" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initDetailsCommand() *cobra.Command { +func initDetailsCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var showFullDetails bool var listProgrammers bool var fqbn arguments.Fqbn var showProperties arguments.ShowProperties var detailsCommand = &cobra.Command{ - Use: fmt.Sprintf("details -b <%s>", tr("FQBN")), - Short: tr("Print details about a board."), - Long: tr("Show information about a board, in particular if the board has options to be specified in the FQBN."), + Use: fmt.Sprintf("details -b <%s>", i18n.Tr("FQBN")), + Short: i18n.Tr("Print details about a board."), + Long: i18n.Tr("Show information about a board, in particular if the board has options to be specified in the FQBN."), Example: " " + os.Args[0] + " board details -b arduino:avr:nano", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { - runDetailsCommand(fqbn.String(), showFullDetails, listProgrammers, showProperties) + runDetailsCommand(cmd.Context(), srv, fqbn.String(), showFullDetails, listProgrammers, showProperties) }, } - fqbn.AddToCommand(detailsCommand) - detailsCommand.Flags().BoolVarP(&showFullDetails, "full", "f", false, tr("Show full board details")) - detailsCommand.Flags().BoolVarP(&listProgrammers, "list-programmers", "", false, tr("Show list of available programmers")) + fqbn.AddToCommand(detailsCommand, srv) + detailsCommand.Flags().BoolVarP(&showFullDetails, "full", "f", false, i18n.Tr("Show full board details")) + detailsCommand.Flags().BoolVarP(&listProgrammers, "list-programmers", "", false, i18n.Tr("Show list of available programmers")) detailsCommand.MarkFlagRequired("fqbn") showProperties.AddToCommand(detailsCommand) return detailsCommand } -func runDetailsCommand(fqbn string, showFullDetails, listProgrammers bool, showProperties arguments.ShowProperties) { - inst := instance.CreateAndInit() +func runDetailsCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, fqbn string, showFullDetails, listProgrammers bool, showProperties arguments.ShowProperties) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli board details`") @@ -64,17 +65,17 @@ func runDetailsCommand(fqbn string, showFullDetails, listProgrammers bool, showP if err != nil { feedback.Fatal(err.Error(), feedback.ErrBadArgument) } - res, err := board.Details(context.Background(), &rpc.BoardDetailsRequest{ + res, err := srv.BoardDetails(ctx, &rpc.BoardDetailsRequest{ Instance: inst, Fqbn: fqbn, DoNotExpandBuildProperties: showPropertiesMode == arguments.ShowPropertiesUnexpanded, }) if err != nil { - feedback.Fatal(tr("Error getting board details: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error getting board details: %v", err), feedback.ErrGeneric) } feedback.PrintResult(detailsResult{ - details: res, + details: result.NewBoardDetailsResponse(res), listProgrammers: listProgrammers, showFullDetails: showFullDetails, showProperties: showPropertiesMode != arguments.ShowPropertiesDisabled, @@ -84,7 +85,7 @@ func runDetailsCommand(fqbn string, showFullDetails, listProgrammers bool, showP // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type detailsResult struct { - details *rpc.BoardDetailsResponse + details *result.BoardDetailsResponse listProgrammers bool showFullDetails bool showProperties bool @@ -99,7 +100,7 @@ func (dr detailsResult) String() string { if dr.showProperties { res := "" - for _, prop := range details.GetBuildProperties() { + for _, prop := range details.BuildProperties { res += fmt.Sprintln(prop) } return res @@ -107,9 +108,9 @@ func (dr detailsResult) String() string { if dr.listProgrammers { t := table.New() - t.AddRow(tr("Id"), tr("Programmer name")) + t.AddRow(i18n.Tr("Id"), i18n.Tr("Programmer name")) for _, programmer := range details.Programmers { - t.AddRow(programmer.GetId(), programmer.GetName()) + t.AddRow(programmer.Id, programmer.Name) } return t.Render() } @@ -135,68 +136,69 @@ func (dr detailsResult) String() string { } t.SetColumnWidthMode(1, table.Average) - t.AddRow(tr("Board name:"), details.Name) - t.AddRow(tr("FQBN:"), details.Fqbn) - addIfNotEmpty(tr("Board version:"), details.Version) - if details.GetDebuggingSupported() { - t.AddRow(tr("Debugging supported:"), table.NewCell("✔", color.New(color.FgGreen))) - } + t.AddRow(i18n.Tr("Board name:"), details.Name) + t.AddRow(i18n.Tr("FQBN:"), details.Fqbn) + addIfNotEmpty(i18n.Tr("Board version:"), details.Version) if details.Official { t.AddRow() // get some space from above - t.AddRow(tr("Official Arduino board:"), + t.AddRow(i18n.Tr("Official Arduino board:"), table.NewCell("✔", color.New(color.FgGreen))) } - for _, idp := range details.GetIdentificationProperties() { + for _, idp := range details.IdentificationProperties { + if idp.Properties == nil { + continue + } t.AddRow() // get some space from above - header := tr("Identification properties:") - for k, v := range idp.GetProperties() { - t.AddRow(header, k+"="+v) + header := i18n.Tr("Identification properties:") + keys := idp.Properties.Keys() + for _, k := range keys { + t.AddRow(header, k+"="+idp.Properties.Get(k)) header = "" } } t.AddRow() // get some space from above - addIfNotEmpty(tr("Package name:"), details.Package.Name) - addIfNotEmpty(tr("Package maintainer:"), details.Package.Maintainer) - addIfNotEmpty(tr("Package URL:"), details.Package.Url) - addIfNotEmpty(tr("Package website:"), details.Package.WebsiteUrl) - addIfNotEmpty(tr("Package online help:"), details.Package.Help.Online) + addIfNotEmpty(i18n.Tr("Package name:"), details.Package.Name) + addIfNotEmpty(i18n.Tr("Package maintainer:"), details.Package.Maintainer) + addIfNotEmpty(i18n.Tr("Package URL:"), details.Package.Url) + addIfNotEmpty(i18n.Tr("Package website:"), details.Package.WebsiteUrl) + addIfNotEmpty(i18n.Tr("Package online help:"), details.Package.Help.Online) t.AddRow() // get some space from above - addIfNotEmpty(tr("Platform name:"), details.Platform.Name) - addIfNotEmpty(tr("Platform category:"), details.Platform.Category) - addIfNotEmpty(tr("Platform architecture:"), details.Platform.Architecture) - addIfNotEmpty(tr("Platform URL:"), details.Platform.Url) - addIfNotEmpty(tr("Platform file name:"), details.Platform.ArchiveFilename) + addIfNotEmpty(i18n.Tr("Platform name:"), details.Platform.Name) + addIfNotEmpty(i18n.Tr("Platform category:"), details.Platform.Category) + addIfNotEmpty(i18n.Tr("Platform architecture:"), details.Platform.Architecture) + addIfNotEmpty(i18n.Tr("Platform URL:"), details.Platform.Url) + addIfNotEmpty(i18n.Tr("Platform file name:"), details.Platform.ArchiveFilename) if details.Platform.Size != 0 { - addIfNotEmpty(tr("Platform size (bytes):"), fmt.Sprint(details.Platform.Size)) + addIfNotEmpty(i18n.Tr("Platform size (bytes):"), fmt.Sprint(details.Platform.Size)) } - addIfNotEmpty(tr("Platform checksum:"), details.Platform.Checksum) + addIfNotEmpty(i18n.Tr("Platform checksum:"), details.Platform.Checksum) t.AddRow() // get some space from above tab.SetColumnWidthMode(1, table.Average) for _, tool := range details.ToolsDependencies { - tab.AddRow(tr("Required tool:"), tool.Packager+":"+tool.Name, tool.Version) + tab.AddRow(i18n.Tr("Required tool:"), tool.Packager+":"+tool.Name, tool.Version) if dr.showFullDetails { for _, sys := range tool.Systems { - tab.AddRow("", tr("OS:"), sys.Host) - tab.AddRow("", tr("File:"), sys.ArchiveFilename) - tab.AddRow("", tr("Size (bytes):"), fmt.Sprint(sys.Size)) - tab.AddRow("", tr("Checksum:"), sys.Checksum) - tab.AddRow("", tr("URL:"), sys.Url) + tab.AddRow("", i18n.Tr("OS:"), sys.Host) + tab.AddRow("", i18n.Tr("File:"), sys.ArchiveFilename) + tab.AddRow("", i18n.Tr("Size (bytes):"), fmt.Sprint(sys.Size)) + tab.AddRow("", i18n.Tr("Checksum:"), sys.Checksum) + tab.AddRow("", i18n.Tr("URL:"), sys.Url) tab.AddRow() // get some space from above } } } + green := color.New(color.FgGreen) tab.AddRow() // get some space from above for _, option := range details.ConfigOptions { - tab.AddRow(tr("Option:"), option.OptionLabel, "", option.Option) + tab.AddRow(i18n.Tr("Option:"), option.OptionLabel, "", option.Option) for _, value := range option.Values { - green := color.New(color.FgGreen) if value.Selected { tab.AddRow("", table.NewCell(value.ValueLabel, green), @@ -211,9 +213,13 @@ func (dr detailsResult) String() string { } } - tab.AddRow(tr("Programmers:"), tr("ID"), tr("Name")) + tab.AddRow(i18n.Tr("Programmers:"), i18n.Tr("ID"), i18n.Tr("Name"), "") for _, programmer := range details.Programmers { - tab.AddRow("", programmer.GetId(), programmer.GetName()) + if programmer.Id == details.DefaultProgrammerID { + tab.AddRow("", table.NewCell(programmer.Id, green), table.NewCell(programmer.Name, green), table.NewCell("✔ (default)", green)) + } else { + tab.AddRow("", programmer.Id, programmer.Name) + } } return t.Render() + tab.Render() diff --git a/internal/cli/board/list.go b/internal/cli/board/list.go index 65b0bd5e04d..ffc49431d21 100644 --- a/internal/cli/board/list.go +++ b/internal/cli/board/list.go @@ -22,134 +22,142 @@ import ( "os" "sort" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/commands/board" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initListCommand() *cobra.Command { +func initListCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var timeoutArg arguments.DiscoveryTimeout var watch bool var fqbn arguments.Fqbn listCommand := &cobra.Command{ Use: "list", - Short: tr("List connected boards."), - Long: tr("Detects and displays a list of boards connected to the current computer."), + Short: i18n.Tr("List connected boards."), + Long: i18n.Tr("Detects and displays a list of boards connected to the current computer."), Example: " " + os.Args[0] + " board list --discovery-timeout 10s", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { - runListCommand(watch, timeoutArg.Get().Milliseconds(), fqbn.String()) + runListCommand(cmd.Context(), srv, watch, timeoutArg.Get().Milliseconds(), fqbn.String()) }, } timeoutArg.AddToCommand(listCommand) - fqbn.AddToCommand(listCommand) - listCommand.Flags().BoolVarP(&watch, "watch", "w", false, tr("Command keeps running and prints list of connected boards whenever there is a change.")) + fqbn.AddToCommand(listCommand, srv) + listCommand.Flags().BoolVarP(&watch, "watch", "w", false, i18n.Tr("Command keeps running and prints list of connected boards whenever there is a change.")) return listCommand } // runListCommand detects and lists the connected arduino boards -func runListCommand(watch bool, timeout int64, fqbn string) { - inst := instance.CreateAndInit() +func runListCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, watch bool, timeout int64, fqbn string) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli board list`") if watch { - watchList(inst) + watchList(ctx, inst, srv) return } - ports, discoveryErrors, err := board.List(&rpc.BoardListRequest{ + list, err := srv.BoardList(ctx, &rpc.BoardListRequest{ Instance: inst, Timeout: timeout, Fqbn: fqbn, }) - var invalidFQBNErr *arduino.InvalidFQBNError + ports := list.GetPorts() + discoveryErrors := list.GetWarnings() + var invalidFQBNErr *cmderrors.InvalidFQBNError if errors.As(err, &invalidFQBNErr) { - feedback.Fatal(tr(err.Error()), feedback.ErrBadArgument) + feedback.Fatal(err.Error(), feedback.ErrBadArgument) } if err != nil { - feedback.Warning(tr("Error detecting boards: %v", err)) + feedback.Warning(i18n.Tr("Error detecting boards: %v", err)) } for _, err := range discoveryErrors { - feedback.Warning(tr("Error starting discovery: %v", err)) + feedback.Warning(i18n.Tr("Error starting discovery: %v", err)) } - feedback.PrintResult(result{ports}) + + feedback.PrintResult(listResult{result.NewDetectedPorts(ports)}) } -func watchList(inst *rpc.Instance) { - eventsChan, err := board.Watch(context.Background(), &rpc.BoardListWatchRequest{Instance: inst}) +func watchList(ctx context.Context, inst *rpc.Instance, srv rpc.ArduinoCoreServiceServer) { + stream, eventsChan := commands.BoardListWatchProxyToChan(ctx) + err := srv.BoardListWatch(&rpc.BoardListWatchRequest{Instance: inst}, stream) if err != nil { - feedback.Fatal(tr("Error detecting boards: %v", err), feedback.ErrNetwork) + feedback.Fatal(i18n.Tr("Error detecting boards: %v", err), feedback.ErrNetwork) } // This is done to avoid printing the header each time a new event is received if feedback.GetFormat() == feedback.Text { t := table.New() - t.SetHeader(tr("Port"), tr("Type"), tr("Event"), tr("Board Name"), tr("FQBN"), tr("Core")) + t.SetHeader(i18n.Tr("Port"), i18n.Tr("Type"), i18n.Tr("Event"), i18n.Tr("Board Name"), i18n.Tr("FQBN"), i18n.Tr("Core")) feedback.Print(t.Render()) } for event := range eventsChan { - feedback.PrintResult(watchEvent{ - Type: event.EventType, - Boards: event.Port.MatchingBoards, - Port: event.Port.Port, - Error: event.Error, - }) + if res := result.NewBoardListWatchResponse(event); res != nil { + feedback.PrintResult(watchEventResult{ + Type: res.EventType, + Boards: res.Port.MatchingBoards, + Port: res.Port.Port, + Error: res.Error, + }) + } } } // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation -type result struct { - ports []*rpc.DetectedPort +type listResult struct { + Ports []*result.DetectedPort `json:"detected_ports"` } -func (dr result) Data() interface{} { - return dr.ports +func (dr listResult) Data() interface{} { + return dr } -func (dr result) String() string { - if len(dr.ports) == 0 { - return tr("No boards found.") +func (dr listResult) String() string { + if len(dr.Ports) == 0 { + return i18n.Tr("No boards found.") } - sort.Slice(dr.ports, func(i, j int) bool { - x, y := dr.ports[i].Port, dr.ports[j].Port - return x.GetProtocol() < y.GetProtocol() || - (x.GetProtocol() == y.GetProtocol() && x.GetAddress() < y.GetAddress()) + sort.Slice(dr.Ports, func(i, j int) bool { + x, y := dr.Ports[i].Port, dr.Ports[j].Port + return x.Protocol < y.Protocol || + (x.Protocol == y.Protocol && x.Address < y.Address) }) t := table.New() - t.SetHeader(tr("Port"), tr("Protocol"), tr("Type"), tr("Board Name"), tr("FQBN"), tr("Core")) - for _, detectedPort := range dr.ports { + t.SetHeader(i18n.Tr("Port"), i18n.Tr("Protocol"), i18n.Tr("Type"), i18n.Tr("Board Name"), i18n.Tr("FQBN"), i18n.Tr("Core")) + for _, detectedPort := range dr.Ports { port := detectedPort.Port - protocol := port.GetProtocol() - address := port.GetAddress() - if port.GetProtocol() == "serial" { - address = port.GetAddress() + protocol := port.Protocol + address := port.Address + if port.Protocol == "serial" { + address = port.Address } - protocolLabel := port.GetProtocolLabel() - if boards := detectedPort.GetMatchingBoards(); len(boards) > 0 { + protocolLabel := port.ProtocolLabel + if boards := detectedPort.MatchingBoards; len(boards) > 0 { sort.Slice(boards, func(i, j int) bool { x, y := boards[i], boards[j] - return x.GetName() < y.GetName() || (x.GetName() == y.GetName() && x.GetFqbn() < y.GetFqbn()) + return x.Name < y.Name || (x.Name == y.Name && x.Fqbn < y.Fqbn) }) for _, b := range boards { - board := b.GetName() + board := b.Name // to improve the user experience, show on a dedicated column // the name of the core supporting the board detected var coreName = "" - fqbn, err := cores.ParseFQBN(b.GetFqbn()) + fqbn, err := cores.ParseFQBN(b.Fqbn) if err == nil { coreName = fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch) } @@ -161,7 +169,7 @@ func (dr result) String() string { protocol = "" } } else { - board := tr("Unknown") + board := i18n.Tr("Unknown") fqbn := "" coreName := "" t.AddRow(address, protocol, protocolLabel, board, fqbn, coreName) @@ -170,23 +178,23 @@ func (dr result) String() string { return t.Render() } -type watchEvent struct { - Type string `json:"eventType"` - Boards []*rpc.BoardListItem `json:"matching_boards,omitempty"` - Port *rpc.Port `json:"port,omitempty"` - Error string `json:"error,omitempty"` +type watchEventResult struct { + Type string `json:"eventType"` + Boards []*result.BoardListItem `json:"matching_boards,omitempty"` + Port *result.Port `json:"port,omitempty"` + Error string `json:"error,omitempty"` } -func (dr watchEvent) Data() interface{} { +func (dr watchEventResult) Data() interface{} { return dr } -func (dr watchEvent) String() string { +func (dr watchEventResult) String() string { t := table.New() event := map[string]string{ - "add": tr("Connected"), - "remove": tr("Disconnected"), + "add": i18n.Tr("Connected"), + "remove": i18n.Tr("Disconnected"), }[dr.Type] address := fmt.Sprintf("%s://%s", dr.Port.Protocol, dr.Port.Address) @@ -197,15 +205,15 @@ func (dr watchEvent) String() string { if boards := dr.Boards; len(boards) > 0 { sort.Slice(boards, func(i, j int) bool { x, y := boards[i], boards[j] - return x.GetName() < y.GetName() || (x.GetName() == y.GetName() && x.GetFqbn() < y.GetFqbn()) + return x.Name < y.Name || (x.Name == y.Name && x.Fqbn < y.Fqbn) }) for _, b := range boards { - board := b.GetName() + board := b.Name // to improve the user experience, show on a dedicated column // the name of the core supporting the board detected var coreName = "" - fqbn, err := cores.ParseFQBN(b.GetFqbn()) + fqbn, err := cores.ParseFQBN(b.Fqbn) if err == nil { coreName = fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch) } diff --git a/internal/cli/board/listall.go b/internal/cli/board/listall.go index 0f47cba710a..aeb46c84061 100644 --- a/internal/cli/board/listall.go +++ b/internal/cli/board/listall.go @@ -21,55 +21,58 @@ import ( "os" "sort" - "github.com/arduino/arduino-cli/commands/board" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) var showHiddenBoard bool -func initListAllCommand() *cobra.Command { +func initListAllCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var listAllCommand = &cobra.Command{ - Use: fmt.Sprintf("listall [%s]", tr("boardname")), - Short: tr("List all known boards and their corresponding FQBN."), - Long: tr(`List all boards that have the support platform installed. You can search + Use: fmt.Sprintf("listall [%s]", i18n.Tr("boardname")), + Short: i18n.Tr("List all known boards and their corresponding FQBN."), + Long: i18n.Tr(`List all boards that have the support platform installed. You can search for a specific board if you specify the board name`), Example: "" + " " + os.Args[0] + " board listall\n" + " " + os.Args[0] + " board listall zero", Args: cobra.ArbitraryArgs, - Run: runListAllCommand, + Run: func(cmd *cobra.Command, args []string) { + runListAllCommand(cmd.Context(), args, srv) + }, } - listAllCommand.Flags().BoolVarP(&showHiddenBoard, "show-hidden", "a", false, tr("Show also boards marked as 'hidden' in the platform")) + listAllCommand.Flags().BoolVarP(&showHiddenBoard, "show-hidden", "a", false, i18n.Tr("Show also boards marked as 'hidden' in the platform")) return listAllCommand } // runListAllCommand list all installed boards -func runListAllCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runListAllCommand(ctx context.Context, args []string, srv rpc.ArduinoCoreServiceServer) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli board listall`") - list, err := board.ListAll(context.Background(), &rpc.BoardListAllRequest{ + list, err := srv.BoardListAll(ctx, &rpc.BoardListAllRequest{ Instance: inst, SearchArgs: args, IncludeHiddenBoards: showHiddenBoard, }) if err != nil { - feedback.Fatal(tr("Error listing boards: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error listing boards: %v", err), feedback.ErrGeneric) } - feedback.PrintResult(resultAll{list}) + feedback.PrintResult(resultAll{result.NewBoardListAllResponse(list)}) } // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type resultAll struct { - list *rpc.BoardListAllResponse + list *result.BoardListAllResponse } func (dr resultAll) Data() interface{} { @@ -77,18 +80,23 @@ func (dr resultAll) Data() interface{} { } func (dr resultAll) String() string { + t := table.New() + t.SetHeader(i18n.Tr("Board Name"), i18n.Tr("FQBN"), "") + + if dr.list == nil || len(dr.list.Boards) == 0 { + return t.Render() + } + sort.Slice(dr.list.Boards, func(i, j int) bool { - return dr.list.Boards[i].GetName() < dr.list.Boards[j].GetName() + return dr.list.Boards[i].Name < dr.list.Boards[j].Name }) - t := table.New() - t.SetHeader(tr("Board Name"), tr("FQBN"), "") - for _, item := range dr.list.GetBoards() { + for _, item := range dr.list.Boards { hidden := "" if item.IsHidden { - hidden = tr("(hidden)") + hidden = i18n.Tr("(hidden)") } - t.AddRow(item.GetName(), item.GetFqbn(), hidden) + t.AddRow(item.Name, item.Fqbn, hidden) } return t.Render() } diff --git a/internal/cli/board/search.go b/internal/cli/board/search.go index 102e9ea1dae..5df42f6009c 100644 --- a/internal/cli/board/search.go +++ b/internal/cli/board/search.go @@ -22,70 +22,78 @@ import ( "sort" "strings" - "github.com/arduino/arduino-cli/commands/board" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initSearchCommand() *cobra.Command { +func initSearchCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var searchCommand = &cobra.Command{ - Use: fmt.Sprintf("search [%s]", tr("boardname")), - Short: tr("Search for a board in the Boards Manager."), - Long: tr(`Search for a board in the Boards Manager using the specified keywords.`), + Use: fmt.Sprintf("search [%s]", i18n.Tr("boardname")), + Short: i18n.Tr("Search for a board in the Boards Manager."), + Long: i18n.Tr(`Search for a board in the Boards Manager using the specified keywords.`), Example: "" + " " + os.Args[0] + " board search\n" + " " + os.Args[0] + " board search zero", Args: cobra.ArbitraryArgs, - Run: runSearchCommand, + Run: func(cmd *cobra.Command, args []string) { + runSearchCommand(cmd.Context(), srv, args) + }, } - searchCommand.Flags().BoolVarP(&showHiddenBoard, "show-hidden", "a", false, tr("Show also boards marked as 'hidden' in the platform")) + searchCommand.Flags().BoolVarP(&showHiddenBoard, "show-hidden", "a", false, i18n.Tr("Show also boards marked as 'hidden' in the platform")) return searchCommand } -func runSearchCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runSearchCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli board search`") - res, err := board.Search(context.Background(), &rpc.BoardSearchRequest{ + res, err := srv.BoardSearch(ctx, &rpc.BoardSearchRequest{ Instance: inst, SearchArgs: strings.Join(args, " "), IncludeHiddenBoards: showHiddenBoard, }) if err != nil { - feedback.Fatal(tr("Error searching boards: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error searching boards: %v", err), feedback.ErrGeneric) } - feedback.PrintResult(searchResults{res.Boards}) + feedback.PrintResult(searchResults{result.NewBoardListItems(res.GetBoards())}) } // output from this command requires special formatting so we create a dedicated // feedback.Result implementation type searchResults struct { - boards []*rpc.BoardListItem + Boards []*result.BoardListItem `json:"boards"` } func (r searchResults) Data() interface{} { - return r.boards + return r } func (r searchResults) String() string { - sort.Slice(r.boards, func(i, j int) bool { - return r.boards[i].GetName() < r.boards[j].GetName() - }) + if len(r.Boards) == 0 { + return "" + } t := table.New() - t.SetHeader(tr("Board Name"), tr("FQBN"), tr("Platform ID"), "") - for _, item := range r.boards { + t.SetHeader(i18n.Tr("Board Name"), i18n.Tr("FQBN"), i18n.Tr("Platform ID"), "") + + sort.Slice(r.Boards, func(i, j int) bool { + return r.Boards[i].Name < r.Boards[j].Name + }) + + for _, item := range r.Boards { hidden := "" if item.IsHidden { - hidden = tr("(hidden)") + hidden = i18n.Tr("(hidden)") } - t.AddRow(item.GetName(), item.GetFqbn(), item.Platform.Id, hidden) + t.AddRow(item.Name, item.Fqbn, item.Platform.Metadata.Id, hidden) } return t.Render() } diff --git a/internal/cli/burnbootloader/burnbootloader.go b/internal/cli/burnbootloader/burnbootloader.go index 23cd9a5006e..5187036aabc 100644 --- a/internal/cli/burnbootloader/burnbootloader.go +++ b/internal/cli/burnbootloader/burnbootloader.go @@ -17,13 +17,15 @@ package burnbootloader import ( "context" + "errors" "os" - "github.com/arduino/arduino-cli/commands/upload" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -40,49 +42,59 @@ var ( ) // NewCommand created a new `burn-bootloader` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { burnBootloaderCommand := &cobra.Command{ Use: "burn-bootloader", - Short: tr("Upload the bootloader."), - Long: tr("Upload the bootloader on the board using an external programmer."), + Short: i18n.Tr("Upload the bootloader."), + Long: i18n.Tr("Upload the bootloader on the board using an external programmer."), Example: " " + os.Args[0] + " burn-bootloader -b arduino:avr:uno -P atmel_ice", - Args: cobra.MaximumNArgs(1), - Run: runBootloaderCommand, + Args: cobra.NoArgs, + Run: func(cmd *cobra.Command, args []string) { + runBootloaderCommand(cmd.Context(), srv) + }, } - fqbn.AddToCommand(burnBootloaderCommand) - port.AddToCommand(burnBootloaderCommand) - programmer.AddToCommand(burnBootloaderCommand) - burnBootloaderCommand.Flags().BoolVarP(&verify, "verify", "t", false, tr("Verify uploaded binary after the upload.")) - burnBootloaderCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, tr("Turns on verbose mode.")) - burnBootloaderCommand.Flags().BoolVar(&dryRun, "dry-run", false, tr("Do not perform the actual upload, just log out actions")) + fqbn.AddToCommand(burnBootloaderCommand, srv) + port.AddToCommand(burnBootloaderCommand, srv) + programmer.AddToCommand(burnBootloaderCommand, srv) + burnBootloaderCommand.Flags().BoolVarP(&verify, "verify", "t", false, i18n.Tr("Verify uploaded binary after the upload.")) + burnBootloaderCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, i18n.Tr("Turns on verbose mode.")) + burnBootloaderCommand.Flags().BoolVar(&dryRun, "dry-run", false, i18n.Tr("Do not perform the actual upload, just log out actions")) burnBootloaderCommand.Flags().MarkHidden("dry-run") return burnBootloaderCommand } -func runBootloaderCommand(command *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runBootloaderCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { + instance := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli burn-bootloader`") // We don't need a Sketch to upload a board's bootloader - discoveryPort, err := port.GetPort(instance, "", "") + discoveryPort, err := port.GetPort(ctx, instance, srv, "", "") if err != nil { - feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error during Upload: %v", err), feedback.ErrGeneric) } stdOut, stdErr, res := feedback.OutputStreams() - if _, err := upload.BurnBootloader(context.Background(), &rpc.BurnBootloaderRequest{ + stream := commands.BurnBootloaderToServerStreams(ctx, stdOut, stdErr) + if err := srv.BurnBootloader(&rpc.BurnBootloaderRequest{ Instance: instance, Fqbn: fqbn.String(), Port: discoveryPort, Verbose: verbose, Verify: verify, - Programmer: programmer.String(), + Programmer: programmer.String(ctx, instance, srv, fqbn.String()), DryRun: dryRun, - }, stdOut, stdErr); err != nil { - feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrGeneric) + }, stream); err != nil { + errcode := feedback.ErrGeneric + if errors.Is(err, &cmderrors.ProgrammerRequiredForUploadError{}) { + errcode = feedback.ErrMissingProgrammer + } + if errors.Is(err, &cmderrors.MissingProgrammerError{}) { + errcode = feedback.ErrMissingProgrammer + } + feedback.Fatal(i18n.Tr("Error during Upload: %v", err), errcode) } feedback.PrintResult(res()) } diff --git a/internal/cli/cache/cache.go b/internal/cli/cache/cache.go index 1d8394f03bc..38b12c3c0fa 100644 --- a/internal/cli/cache/cache.go +++ b/internal/cli/cache/cache.go @@ -18,23 +18,22 @@ package cache import ( "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand created a new `cache` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { cacheCommand := &cobra.Command{ Use: "cache", - Short: tr("Arduino cache commands."), - Long: tr("Arduino cache commands."), - Example: "# " + tr("Clean caches.") + "\n" + + Short: i18n.Tr("Arduino cache commands."), + Long: i18n.Tr("Arduino cache commands."), + Example: "# " + i18n.Tr("Clean caches.") + "\n" + " " + os.Args[0] + " cache clean\n\n", } - cacheCommand.AddCommand(initCleanCommand()) + cacheCommand.AddCommand(initCleanCommand(srv)) return cacheCommand } diff --git a/internal/cli/cache/clean.go b/internal/cli/cache/clean.go index f5fbb18c4ec..d5bfead5ac3 100644 --- a/internal/cli/cache/clean.go +++ b/internal/cli/cache/clean.go @@ -16,32 +16,35 @@ package cache import ( + "context" "os" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initCleanCommand() *cobra.Command { +func initCleanCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { cleanCommand := &cobra.Command{ Use: "clean", - Short: tr("Delete Boards/Library Manager download cache."), - Long: tr("Delete contents of the `directories.downloads` folder, where archive files are staged during installation of libraries and boards platforms."), + Short: i18n.Tr("Delete Boards/Library Manager download cache."), + Long: i18n.Tr("Delete contents of the downloads cache folder, where archive files are staged during installation of libraries and boards platforms."), Example: " " + os.Args[0] + " cache clean", Args: cobra.NoArgs, - Run: runCleanCommand, + Run: func(cmd *cobra.Command, args []string) { + runCleanCommand(cmd.Context(), srv) + }, } return cleanCommand } -func runCleanCommand(cmd *cobra.Command, args []string) { +func runCleanCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { logrus.Info("Executing `arduino-cli cache clean`") - cachePath := configuration.DownloadsDir(configuration.Settings) - err := cachePath.RemoveAll() + _, err := srv.CleanDownloadCacheDirectory(ctx, &rpc.CleanDownloadCacheDirectoryRequest{}) if err != nil { - feedback.Fatal(tr("Error cleaning caches: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error cleaning caches: %v", err), feedback.ErrGeneric) } } diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 19a92767acf..91651b03c23 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -16,13 +16,12 @@ package cli import ( + "context" "fmt" "io" "os" "strings" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/board" "github.com/arduino/arduino-cli/internal/cli/burnbootloader" "github.com/arduino/arduino-cli/internal/cli/cache" @@ -43,7 +42,9 @@ import ( "github.com/arduino/arduino-cli/internal/cli/upgrade" "github.com/arduino/arduino-cli/internal/cli/upload" "github.com/arduino/arduino-cli/internal/cli/version" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/arduino-cli/internal/inventory" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" versioninfo "github.com/arduino/arduino-cli/version" "github.com/fatih/color" "github.com/mattn/go-colorable" @@ -53,79 +54,137 @@ import ( semver "go.bug.st/relaxed-semver" ) -var ( - verbose bool - outputFormat string - configFile string - updaterMessageChan chan *semver.Version = make(chan *semver.Version) -) - // NewCommand creates a new ArduinoCli command root -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { cobra.AddTemplateFunc("tr", i18n.Tr) - // ArduinoCli is the root command - arduinoCli := &cobra.Command{ - Use: "arduino-cli", - Short: tr("Arduino CLI."), - Long: tr("Arduino Command Line Interface (arduino-cli)."), - Example: fmt.Sprintf(" %s <%s> [%s...]", os.Args[0], tr("command"), tr("flags")), - PersistentPreRun: preRun, - PersistentPostRun: postRun, - } + var updaterMessageChan chan *semver.Version - arduinoCli.SetUsageTemplate(getUsageTemplate()) + var ( + verbose bool + noColor bool + logLevel string + logFile string + logFormat string + jsonOutput bool + outputFormat string + additionalUrls []string + ) - createCliCommandTree(arduinoCli) + resp, err := srv.ConfigurationGet(context.Background(), &rpc.ConfigurationGetRequest{}) + if err != nil { + panic("Error creating configuration: " + err.Error()) + } + settings := resp.GetConfiguration() + + defaultLogFile := settings.GetLogging().GetFile() + defaultLogFormat := settings.GetLogging().GetFormat() + defaultLogLevel := settings.GetLogging().GetLevel() + defaultAdditionalURLs := settings.GetBoardManager().GetAdditionalUrls() + defaultOutputNoColor := settings.GetOutput().GetNoColor() + + cmd := &cobra.Command{ + Use: "arduino-cli", + Short: i18n.Tr("Arduino CLI."), + Long: i18n.Tr("Arduino Command Line Interface (arduino-cli)."), + Example: fmt.Sprintf(" %s <%s> [%s...]", os.Args[0], i18n.Tr("command"), i18n.Tr("flags")), + PersistentPreRun: func(cmd *cobra.Command, args []string) { + ctx := cmd.Context() + + config.ApplyGlobalFlagsToConfiguration(ctx, cmd, srv) + + if jsonOutput { + outputFormat = "json" + } + if outputFormat != "text" { + cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { + feedback.Fatal(i18n.Tr("Should show help message, but it is available only in TEXT mode."), feedback.ErrBadArgument) + }) + } + + preRun(verbose, outputFormat, logLevel, logFile, logFormat, noColor, settings) + + // Log the configuration file used + if configFile := config.GetConfigFile(ctx); configFile != "" { + logrus.Infof("Using config file: %s", configFile) + } else { + logrus.Info("Config file not found, using default values") + } + + if cmd.Name() != "version" { + updaterMessageChan = make(chan *semver.Version) + go func() { + res, err := srv.CheckForArduinoCLIUpdates(ctx, &rpc.CheckForArduinoCLIUpdatesRequest{}) + if err != nil { + logrus.Warnf("Error checking for updates: %v", err) + updaterMessageChan <- nil + return + } + if v := res.GetNewestVersion(); v == "" { + updaterMessageChan <- nil + } else if latest, err := semver.Parse(v); err != nil { + logrus.Warnf("Error parsing version: %v", err) + } else { + logrus.Infof("New version available: %s", v) + updaterMessageChan <- latest + } + }() + } + }, + PersistentPostRun: func(cmd *cobra.Command, args []string) { + if updaterMessageChan != nil { + if latestVersion := <-updaterMessageChan; latestVersion != nil { + // Notify the user a new version is available + updater.NotifyNewVersionIsAvailable(latestVersion.String()) + } + } + }, + } - return arduinoCli -} + cmd.SetUsageTemplate(getUsageTemplate()) -// this is here only for testing -func createCliCommandTree(cmd *cobra.Command) { - cmd.AddCommand(board.NewCommand()) - cmd.AddCommand(cache.NewCommand()) - cmd.AddCommand(compile.NewCommand()) + cmd.AddCommand(board.NewCommand(srv)) + cmd.AddCommand(cache.NewCommand(srv)) + cmd.AddCommand(compile.NewCommand(srv, settings)) cmd.AddCommand(completion.NewCommand()) - cmd.AddCommand(config.NewCommand()) - cmd.AddCommand(core.NewCommand()) - cmd.AddCommand(daemon.NewCommand()) + cmd.AddCommand(config.NewCommand(srv, settings)) + cmd.AddCommand(core.NewCommand(srv)) + cmd.AddCommand(daemon.NewCommand(srv, settings)) cmd.AddCommand(generatedocs.NewCommand()) - cmd.AddCommand(lib.NewCommand()) - cmd.AddCommand(monitor.NewCommand()) - cmd.AddCommand(outdated.NewCommand()) - cmd.AddCommand(sketch.NewCommand()) - cmd.AddCommand(update.NewCommand()) - cmd.AddCommand(upgrade.NewCommand()) - cmd.AddCommand(upload.NewCommand()) - cmd.AddCommand(debug.NewCommand()) - cmd.AddCommand(burnbootloader.NewCommand()) - cmd.AddCommand(version.NewCommand()) + cmd.AddCommand(lib.NewCommand(srv, settings)) + cmd.AddCommand(monitor.NewCommand(srv)) + cmd.AddCommand(outdated.NewCommand(srv)) + cmd.AddCommand(sketch.NewCommand(srv)) + cmd.AddCommand(update.NewCommand(srv)) + cmd.AddCommand(upgrade.NewCommand(srv)) + cmd.AddCommand(upload.NewCommand(srv)) + cmd.AddCommand(debug.NewCommand(srv)) + cmd.AddCommand(burnbootloader.NewCommand(srv)) + cmd.AddCommand(version.NewCommand(srv)) cmd.AddCommand(feedback.NewCommand()) - cmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, tr("Print the logs on the standard output.")) + cmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, i18n.Tr("Print the logs on the standard output.")) cmd.Flag("verbose").Hidden = true - cmd.PersistentFlags().BoolVar(&verbose, "log", false, tr("Print the logs on the standard output.")) + cmd.PersistentFlags().BoolVar(&verbose, "log", false, i18n.Tr("Print the logs on the standard output.")) validLogLevels := []string{"trace", "debug", "info", "warn", "error", "fatal", "panic"} - cmd.PersistentFlags().String("log-level", "", tr("Messages with this level and above will be logged. Valid levels are: %s", strings.Join(validLogLevels, ", "))) - cmd.RegisterFlagCompletionFunc("log-level", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return validLogLevels, cobra.ShellCompDirectiveDefault - }) - cmd.PersistentFlags().String("log-file", "", tr("Path to the file where logs will be written.")) + cmd.PersistentFlags().StringVar(&logLevel, "log-level", defaultLogLevel, i18n.Tr("Messages with this level and above will be logged. Valid levels are: %s", strings.Join(validLogLevels, ", "))) + cmd.RegisterFlagCompletionFunc("log-level", cobra.FixedCompletions(validLogLevels, cobra.ShellCompDirectiveDefault)) + cmd.PersistentFlags().StringVar(&logFile, "log-file", defaultLogFile, i18n.Tr("Path to the file where logs will be written.")) validLogFormats := []string{"text", "json"} - cmd.PersistentFlags().String("log-format", "", tr("The output format for the logs, can be: %s", strings.Join(validLogFormats, ", "))) - cmd.RegisterFlagCompletionFunc("log-format", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return validLogFormats, cobra.ShellCompDirectiveDefault - }) - validOutputFormats := []string{"text", "json", "jsonmini", "yaml"} - cmd.PersistentFlags().StringVar(&outputFormat, "format", "text", tr("The output format for the logs, can be: %s", strings.Join(validOutputFormats, ", "))) - cmd.RegisterFlagCompletionFunc("format", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return validOutputFormats, cobra.ShellCompDirectiveDefault - }) - cmd.PersistentFlags().StringVar(&configFile, "config-file", "", tr("The custom config file (if not specified the default will be used).")) - cmd.PersistentFlags().StringSlice("additional-urls", []string{}, tr("Comma-separated list of additional URLs for the Boards Manager.")) - cmd.PersistentFlags().Bool("no-color", false, "Disable colored output.") - configuration.BindFlags(cmd, configuration.Settings) + cmd.PersistentFlags().StringVar(&logFormat, "log-format", defaultLogFormat, i18n.Tr("The output format for the logs, can be: %s", strings.Join(validLogFormats, ", "))) + cmd.RegisterFlagCompletionFunc("log-format", cobra.FixedCompletions(validLogFormats, cobra.ShellCompDirectiveDefault)) + validOutputFormats := []string{"text", "json", "jsonmini"} + cmd.PersistentFlags().StringVar(&outputFormat, "format", "text", i18n.Tr("The command output format, can be: %s", strings.Join(validOutputFormats, ", "))) + cmd.RegisterFlagCompletionFunc("format", cobra.FixedCompletions(validOutputFormats, cobra.ShellCompDirectiveDefault)) + cmd.Flag("format").Hidden = true + cmd.PersistentFlags().BoolVar(&jsonOutput, "json", false, i18n.Tr("Print the output in JSON format.")) + cmd.PersistentFlags().StringSliceVar(&additionalUrls, "additional-urls", defaultAdditionalURLs, i18n.Tr("Comma-separated list of additional URLs for the Boards Manager.")) + cmd.PersistentFlags().BoolVar(&noColor, "no-color", defaultOutputNoColor, "Disable colored output.") + + // We are not using cobra to parse this flag, because we manually parse it in main.go. + // Just leaving it here so cobra will not complain about it. + cmd.PersistentFlags().String("config-file", "", i18n.Tr("The custom config file (if not specified the default will be used).")) + return cmd } // convert the string passed to the `--log-level` option to the corresponding @@ -144,35 +203,22 @@ func toLogLevel(s string) (t logrus.Level, found bool) { return } -func preRun(cmd *cobra.Command, args []string) { - configFile := configuration.Settings.ConfigFileUsed() - - // initialize inventory - err := inventory.Init(configuration.DataDir(configuration.Settings).String()) - if err != nil { - feedback.Fatal(fmt.Sprintf("Error: %v", err), feedback.ErrBadArgument) - } - - // https://no-color.org/ - color.NoColor = configuration.Settings.GetBool("output.no_color") || os.Getenv("NO_COLOR") != "" +func preRun(verbose bool, outputFormat string, logLevel, logFile, logFormat string, noColor bool, settings *rpc.Configuration) { + // + // Prepare the Feedback system + // // Set default feedback output to colorable + color.NoColor = noColor || os.Getenv("NO_COLOR") != "" // https://no-color.org/ feedback.SetOut(colorable.NewColorableStdout()) feedback.SetErr(colorable.NewColorableStderr()) - updaterMessageChan = make(chan *semver.Version) - go func() { - if cmd.Name() == "version" { - // The version command checks by itself if there's a new available version - updaterMessageChan <- nil - } - // Starts checking for updates - currentVersion, err := semver.Parse(versioninfo.VersionInfo.VersionString) - if err != nil { - updaterMessageChan <- nil - } - updaterMessageChan <- updater.CheckForUpdate(currentVersion) - }() + // use the output format to configure the Feedback + format, ok := feedback.ParseOutputFormat(outputFormat) + if !ok { + feedback.Fatal(i18n.Tr("Invalid output format: %s", outputFormat), feedback.ErrBadArgument) + } + feedback.SetFormat(format) // // Prepare logging @@ -191,17 +237,16 @@ func preRun(cmd *cobra.Command, args []string) { } // set the Logger format - logFormat := strings.ToLower(configuration.Settings.GetString("logging.format")) + logFormat = strings.ToLower(logFormat) if logFormat == "json" { logrus.SetFormatter(&logrus.JSONFormatter{}) } // should we log to file? - logFile := configuration.Settings.GetString("logging.file") if logFile != "" { file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { - feedback.Fatal(tr("Unable to open file for logging: %s", logFile), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Unable to open file for logging: %s", logFile), feedback.ErrGeneric) } // we use a hook so we don't get color codes in the log file @@ -213,49 +258,20 @@ func preRun(cmd *cobra.Command, args []string) { } // configure logging filter - if lvl, found := toLogLevel(configuration.Settings.GetString("logging.level")); !found { - feedback.Fatal(tr("Invalid option for --log-level: %s", configuration.Settings.GetString("logging.level")), feedback.ErrBadArgument) + if logrusLevel, found := toLogLevel(logLevel); !found { + feedback.Fatal(i18n.Tr("Invalid logging level: %s", logLevel), feedback.ErrBadArgument) } else { - logrus.SetLevel(lvl) - } - - // - // Prepare the Feedback system - // - - // check the right output format was passed - format, found := feedback.ParseOutputFormat(outputFormat) - if !found { - feedback.Fatal(tr("Invalid output format: %s", outputFormat), feedback.ErrBadArgument) + logrus.SetLevel(logrusLevel) } - // use the output format to configure the Feedback - feedback.SetFormat(format) - - // // Print some status info and check command is consistent - // - - if configFile != "" { - logrus.Infof("Using config file: %s", configFile) - } else { - logrus.Info("Config file not found, using default values") - } - logrus.Info(versioninfo.VersionInfo.Application + " version " + versioninfo.VersionInfo.VersionString) - if outputFormat != "text" { - cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { - logrus.Warn("Calling help on JSON format") - feedback.Fatal(tr("Invalid Call : should show Help, but it is available only in TEXT mode."), feedback.ErrBadArgument) - }) - } -} - -func postRun(cmd *cobra.Command, args []string) { - latestVersion := <-updaterMessageChan - if latestVersion != nil { - // Notify the user a new version is available - updater.NotifyNewVersionIsAvailable(latestVersion.String()) + // + // Initialize inventory + // + err := inventory.Init(settings.GetDirectories().GetData()) + if err != nil { + feedback.Fatal(fmt.Sprintf("Error: %v", err), feedback.ErrInitializingInventory) } } diff --git a/internal/cli/compile/compile.go b/internal/cli/compile/compile.go index 4ed8ab6638e..25cea1427bb 100644 --- a/internal/cli/compile/compile.go +++ b/internal/cli/compile/compile.go @@ -16,7 +16,6 @@ package compile import ( - "context" "encoding/json" "errors" "fmt" @@ -24,18 +23,15 @@ import ( "os" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/compile" - "github.com/arduino/arduino-cli/commands/core" - "github.com/arduino/arduino-cli/commands/sketch" - "github.com/arduino/arduino-cli/commands/upload" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/arduino/arduino-cli/version" "github.com/arduino/go-paths-helper" "github.com/fatih/color" @@ -60,6 +56,7 @@ var ( uploadAfterCompile bool // Upload the binary after the compilation. portArgs arguments.Port // Upload port, e.g.: COM10 or /dev/ttyACM0. verify bool // Upload, verify uploaded binary after the upload. + exportBinaries bool // If set built binaries will be exported to the sketch folder exportDir string // The compiled binary is written to this file optimizeForDebug bool // Optimize compile output for debug, not for release programmer arguments.Programmer // Use the specified programmer to upload @@ -67,88 +64,89 @@ var ( compilationDatabaseOnly bool // Only create compilation database without actually compiling sourceOverrides string // Path to a .json file that contains a set of replacements of the sketch source code. dumpProfile bool // Create and print a profile configuration from the build + jobs int32 // Max number of parallel jobs // library and libraries sound similar but they're actually different. // library expects a path to the root folder of one single library. // libraries expects a path to a directory containing multiple libraries, similarly to the <directories.user>/libraries path. library []string // List of paths to libraries root folders. Can be used multiple times for different libraries libraries []string // List of custom libraries dir paths separated by commas. Or can be used multiple times for multiple libraries paths. skipLibrariesDiscovery bool - tr = i18n.Tr ) // NewCommand created a new `compile` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer, settings *rpc.Configuration) *cobra.Command { compileCommand := &cobra.Command{ Use: "compile", - Short: tr("Compiles Arduino sketches."), - Long: tr("Compiles Arduino sketches."), + Short: i18n.Tr("Compiles Arduino sketches."), + Long: i18n.Tr("Compiles Arduino sketches."), Example: "" + " " + os.Args[0] + " compile -b arduino:avr:uno /home/user/Arduino/MySketch\n" + " " + os.Args[0] + ` compile -b arduino:avr:uno --build-property "build.extra_flags=\"-DMY_DEFINE=\"hello world\"\"" /home/user/Arduino/MySketch` + "\n" + " " + os.Args[0] + ` compile -b arduino:avr:uno --build-property "build.extra_flags=-DPIN=2 \"-DMY_DEFINE=\"hello world\"\"" /home/user/Arduino/MySketch` + "\n" + " " + os.Args[0] + ` compile -b arduino:avr:uno --build-property build.extra_flags=-DPIN=2 --build-property "compiler.cpp.extra_flags=\"-DSSID=\"hello world\"\"" /home/user/Arduino/MySketch` + "\n", Args: cobra.MaximumNArgs(1), - Run: runCompileCommand, + Run: func(cmd *cobra.Command, args []string) { + runCompileCommand(cmd, args, srv) + }, } - fqbnArg.AddToCommand(compileCommand) - profileArg.AddToCommand(compileCommand) - compileCommand.Flags().BoolVar(&dumpProfile, "dump-profile", false, tr("Create and print a profile configuration from the build.")) + fqbnArg.AddToCommand(compileCommand, srv) + profileArg.AddToCommand(compileCommand, srv) + compileCommand.Flags().BoolVar(&dumpProfile, "dump-profile", false, i18n.Tr("Create and print a profile configuration from the build.")) showPropertiesArg.AddToCommand(compileCommand) - compileCommand.Flags().BoolVar(&preprocess, "preprocess", false, tr("Print preprocessed code to stdout instead of compiling.")) - compileCommand.Flags().StringVar(&buildCachePath, "build-cache-path", "", tr("Builds of 'core.a' are saved into this path to be cached and reused.")) - compileCommand.Flags().StringVarP(&exportDir, "output-dir", "", "", tr("Save build artifacts in this directory.")) + compileCommand.Flags().BoolVar(&preprocess, "preprocess", false, i18n.Tr("Print preprocessed code to stdout instead of compiling.")) + compileCommand.Flags().StringVar(&buildCachePath, "build-cache-path", "", i18n.Tr("Builds of 'core.a' are saved into this path to be cached and reused.")) + compileCommand.Flags().StringVar(&exportDir, "output-dir", "", i18n.Tr("Save build artifacts in this directory.")) compileCommand.Flags().StringVar(&buildPath, "build-path", "", - tr("Path where to save compiled files. If omitted, a directory will be created in the default temporary path of your OS.")) + i18n.Tr("Path where to save compiled files. If omitted, a directory will be created in the default temporary path of your OS.")) compileCommand.Flags().StringSliceVar(&buildProperties, "build-properties", []string{}, - tr("List of custom build properties separated by commas. Or can be used multiple times for multiple properties.")) + i18n.Tr("List of custom build properties separated by commas. Or can be used multiple times for multiple properties.")) compileCommand.Flags().StringArrayVar(&buildProperties, "build-property", []string{}, - tr("Override a build property with a custom value. Can be used multiple times for multiple properties.")) + i18n.Tr("Override a build property with a custom value. Can be used multiple times for multiple properties.")) compileCommand.Flags().StringVar(&keysKeychain, "keys-keychain", "", - tr("The path of the dir to search for the custom keys to sign and encrypt a binary. Used only by the platforms that support it.")) + i18n.Tr("The path of the dir to search for the custom keys to sign and encrypt a binary. Used only by the platforms that support it.")) compileCommand.Flags().StringVar(&signKey, "sign-key", "", - tr("The name of the custom signing key to use to sign a binary during the compile process. Used only by the platforms that support it.")) + i18n.Tr("The name of the custom signing key to use to sign a binary during the compile process. Used only by the platforms that support it.")) compileCommand.Flags().StringVar(&encryptKey, "encrypt-key", "", - tr("The name of the custom encryption key to use to encrypt a binary during the compile process. Used only by the platforms that support it.")) + i18n.Tr("The name of the custom encryption key to use to encrypt a binary during the compile process. Used only by the platforms that support it.")) compileCommand.Flags().StringVar(&warnings, "warnings", "none", - tr(`Optional, can be: %s. Used to tell gcc which warning level to use (-W flag).`, "none, default, more, all")) - compileCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, tr("Optional, turns on verbose mode.")) - compileCommand.Flags().BoolVar(&quiet, "quiet", false, tr("Optional, suppresses almost every output.")) - compileCommand.Flags().BoolVarP(&uploadAfterCompile, "upload", "u", false, tr("Upload the binary after the compilation.")) - portArgs.AddToCommand(compileCommand) - compileCommand.Flags().BoolVarP(&verify, "verify", "t", false, tr("Verify uploaded binary after the upload.")) + i18n.Tr(`Optional, can be: %s. Used to tell gcc which warning level to use (-W flag).`, "none, default, more, all")) + compileCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, i18n.Tr("Optional, turns on verbose mode.")) + compileCommand.Flags().BoolVar(&quiet, "quiet", false, i18n.Tr("Optional, suppresses almost every output.")) + compileCommand.Flags().BoolVarP(&uploadAfterCompile, "upload", "u", false, i18n.Tr("Upload the binary after the compilation.")) + portArgs.AddToCommand(compileCommand, srv) + compileCommand.Flags().BoolVarP(&verify, "verify", "t", false, i18n.Tr("Verify uploaded binary after the upload.")) compileCommand.Flags().StringSliceVar(&library, "library", []string{}, - tr("Path to a single library’s root folder. Can be used multiple times or entries can be comma separated.")) + i18n.Tr("Path to a single library’s root folder. Can be used multiple times or entries can be comma separated.")) compileCommand.Flags().StringSliceVar(&libraries, "libraries", []string{}, - tr("Path to a collection of libraries. Can be used multiple times or entries can be comma separated.")) - compileCommand.Flags().BoolVar(&optimizeForDebug, "optimize-for-debug", false, tr("Optional, optimize compile output for debugging, rather than for release.")) - programmer.AddToCommand(compileCommand) - compileCommand.Flags().BoolVar(&compilationDatabaseOnly, "only-compilation-database", false, tr("Just produce the compilation database, without actually compiling. All build commands are skipped except pre* hooks.")) - compileCommand.Flags().BoolVar(&clean, "clean", false, tr("Optional, cleanup the build folder and do not use any cached build.")) - // We must use the following syntax for this flag since it's also bound to settings. - // This must be done because the value is set when the binding is accessed from viper. Accessing from cobra would only - // read the value if the flag is set explicitly by the user. - compileCommand.Flags().BoolP("export-binaries", "e", false, tr("If set built binaries will be exported to the sketch folder.")) - compileCommand.Flags().StringVar(&sourceOverrides, "source-override", "", tr("Optional. Path to a .json file that contains a set of replacements of the sketch source code.")) + i18n.Tr("Path to a collection of libraries. Can be used multiple times or entries can be comma separated.")) + compileCommand.Flags().BoolVar(&optimizeForDebug, "optimize-for-debug", false, i18n.Tr("Optional, optimize compile output for debugging, rather than for release.")) + programmer.AddToCommand(compileCommand, srv) + compileCommand.Flags().BoolVar(&compilationDatabaseOnly, "only-compilation-database", false, i18n.Tr("Just produce the compilation database, without actually compiling. All build commands are skipped except pre* hooks.")) + compileCommand.Flags().BoolVar(&clean, "clean", false, i18n.Tr("Optional, cleanup the build folder and do not use any cached build.")) + compileCommand.Flags().BoolVarP(&exportBinaries, "export-binaries", "e", settings.GetSketch().GetAlwaysExportBinaries(), + i18n.Tr("If set built binaries will be exported to the sketch folder.")) + compileCommand.Flags().StringVar(&sourceOverrides, "source-override", "", i18n.Tr("Optional. Path to a .json file that contains a set of replacements of the sketch source code.")) compileCommand.Flag("source-override").Hidden = true compileCommand.Flags().BoolVar(&skipLibrariesDiscovery, "skip-libraries-discovery", false, "Skip libraries discovery. This flag is provided only for use in language server and other, very specific, use cases. Do not use for normal compiles") compileCommand.Flag("skip-libraries-discovery").Hidden = true - configuration.Settings.BindPFlag("sketch.always_export_binaries", compileCommand.Flags().Lookup("export-binaries")) + compileCommand.Flags().Int32VarP(&jobs, "jobs", "j", 0, i18n.Tr("Max number of parallel compiles. If set to 0 the number of available CPUs cores will be used.")) - compileCommand.Flags().MarkDeprecated("build-properties", tr("please use --build-property instead.")) + compileCommand.Flags().MarkDeprecated("build-properties", i18n.Tr("please use --build-property instead.")) return compileCommand } -func runCompileCommand(cmd *cobra.Command, args []string) { +func runCompileCommand(cmd *cobra.Command, args []string, srv rpc.ArduinoCoreServiceServer) { logrus.Info("Executing `arduino-cli compile`") + ctx := cmd.Context() if profileArg.Get() != "" { if len(libraries) > 0 { - feedback.Fatal(tr("You cannot use the %s flag while compiling with a profile.", "--libraries"), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("You cannot use the %s flag while compiling with a profile.", "--libraries"), feedback.ErrBadArgument) } if len(library) > 0 { - feedback.Fatal(tr("You cannot use the %s flag while compiling with a profile.", "--library"), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("You cannot use the %s flag while compiling with a profile.", "--library"), feedback.ErrBadArgument) } } @@ -158,26 +156,27 @@ func runCompileCommand(cmd *cobra.Command, args []string) { } sketchPath := arguments.InitSketchPath(path) - - sk, err := sketch.LoadSketch(context.Background(), &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) if err != nil { feedback.FatalError(err, feedback.ErrGeneric) } + sk := resp.GetSketch() + feedback.WarnAboutDeprecatedFiles(sk) var inst *rpc.Instance - var profile *rpc.Profile + var profile *rpc.SketchProfile if profileArg.Get() == "" { - inst, profile = instance.CreateAndInitWithProfile(sk.GetDefaultProfile().GetName(), sketchPath) + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, sk.GetDefaultProfile().GetName(), sketchPath) } else { - inst, profile = instance.CreateAndInitWithProfile(profileArg.Get(), sketchPath) + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, profileArg.Get(), sketchPath) } if fqbnArg.String() == "" { fqbnArg.Set(profile.GetFqbn()) } - fqbn, port := arguments.CalculateFQBNAndPort(&portArgs, &fqbnArg, inst, sk.GetDefaultFqbn(), sk.GetDefaultPort(), sk.GetDefaultProtocol()) + fqbn, port := arguments.CalculateFQBNAndPort(ctx, &portArgs, &fqbnArg, inst, srv, sk.GetDefaultFqbn(), sk.GetDefaultPort(), sk.GetDefaultProtocol()) if keysKeychain != "" || signKey != "" || encryptKey != "" { arguments.CheckFlagsMandatory(cmd, "keys-keychain", "sign-key", "encrypt-key") @@ -187,20 +186,20 @@ func runCompileCommand(cmd *cobra.Command, args []string) { if sourceOverrides != "" { data, err := paths.New(sourceOverrides).ReadFile() if err != nil { - feedback.Fatal(tr("Error opening source code overrides data file: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error opening source code overrides data file: %v", err), feedback.ErrGeneric) } var o struct { Overrides map[string]string `json:"overrides"` } if err := json.Unmarshal(data, &o); err != nil { - feedback.Fatal(tr("Error: invalid source code overrides data file: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error: invalid source code overrides data file: %v", err), feedback.ErrGeneric) } overrides = o.Overrides } showProperties, err := showPropertiesArg.Get() if err != nil { - feedback.Fatal(tr("Error parsing --show-properties flag: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error parsing --show-properties flag: %v", err), feedback.ErrGeneric) } var stdOut, stdErr io.Writer @@ -214,7 +213,7 @@ func runCompileCommand(cmd *cobra.Command, args []string) { var libraryAbs []string for _, libPath := range paths.NewPathList(library...) { if libPath, err = libPath.Abs(); err != nil { - feedback.Fatal(tr("Error converting path to absolute: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error converting path to absolute: %v", err), feedback.ErrGeneric) } libraryAbs = append(libraryAbs, libPath.String()) } @@ -231,6 +230,7 @@ func runCompileCommand(cmd *cobra.Command, args []string) { Warnings: warnings, Verbose: verbose, Quiet: quiet, + ExportBinaries: &exportBinaries, ExportDir: exportDir, Libraries: libraries, OptimizeForDebug: optimizeForDebug, @@ -243,30 +243,41 @@ func runCompileCommand(cmd *cobra.Command, args []string) { EncryptKey: encryptKey, SkipLibrariesDiscovery: skipLibrariesDiscovery, DoNotExpandBuildProperties: showProperties == arguments.ShowPropertiesUnexpanded, + Jobs: jobs, } - compileRes, compileError := compile.Compile(context.Background(), compileRequest, stdOut, stdErr, nil) + server, builderResCB := commands.CompilerServerToStreams(ctx, stdOut, stdErr, nil) + compileError := srv.Compile(compileRequest, server) + builderRes := builderResCB() var uploadRes *rpc.UploadResult if compileError == nil && uploadAfterCompile { - userFieldRes, err := upload.SupportedUserFields(context.Background(), &rpc.SupportedUserFieldsRequest{ + userFieldRes, err := srv.SupportedUserFields(ctx, &rpc.SupportedUserFieldsRequest{ Instance: inst, Fqbn: fqbn, - Protocol: port.Protocol, + Protocol: port.GetProtocol(), }) if err != nil { - feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error during Upload: %v", err), feedback.ErrGeneric) } fields := map[string]string{} - if len(userFieldRes.UserFields) > 0 { - feedback.Print(tr("Uploading to specified board using %s protocol requires the following info:", port.Protocol)) - if f, err := arguments.AskForUserFields(userFieldRes.UserFields); err != nil { + if len(userFieldRes.GetUserFields()) > 0 { + feedback.Print(i18n.Tr("Uploading to specified board using %s protocol requires the following info:", port.GetProtocol())) + if f, err := arguments.AskForUserFields(userFieldRes.GetUserFields()); err != nil { feedback.FatalError(err, feedback.ErrBadArgument) } else { fields = f } } + prog := profile.GetProgrammer() + if prog == "" || programmer.GetProgrammer() != "" { + prog = programmer.String(ctx, inst, srv, fqbn) + } + if prog == "" { + prog = sk.GetDefaultProgrammer() + } + uploadRequest := &rpc.UploadRequest{ Instance: inst, Fqbn: fqbn, @@ -275,14 +286,22 @@ func runCompileCommand(cmd *cobra.Command, args []string) { Verbose: verbose, Verify: verify, ImportDir: buildPath, - Programmer: programmer.String(), + Programmer: prog, UserFields: fields, } - if res, err := upload.Upload(context.Background(), uploadRequest, stdOut, stdErr); err != nil { - feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrGeneric) + stream, streamRes := commands.UploadToServerStreams(ctx, stdOut, stdErr) + if err := srv.Upload(uploadRequest, stream); err != nil { + errcode := feedback.ErrGeneric + if errors.Is(err, &cmderrors.ProgrammerRequiredForUploadError{}) { + errcode = feedback.ErrMissingProgrammer + } + if errors.Is(err, &cmderrors.MissingProgrammerError{}) { + errcode = feedback.ErrMissingProgrammer + } + feedback.Fatal(i18n.Tr("Error during Upload: %v", err), errcode) } else { - uploadRes = res + uploadRes = streamRes() } } @@ -292,8 +311,8 @@ func runCompileCommand(cmd *cobra.Command, args []string) { libs := "" hasVendoredLibs := false - for _, lib := range compileRes.GetUsedLibraries() { - if lib.Location != rpc.LibraryLocation_LIBRARY_LOCATION_USER && lib.Location != rpc.LibraryLocation_LIBRARY_LOCATION_UNMANAGED { + for _, lib := range builderRes.GetUsedLibraries() { + if lib.GetLocation() != rpc.LibraryLocation_LIBRARY_LOCATION_USER && lib.GetLocation() != rpc.LibraryLocation_LIBRARY_LOCATION_UNMANAGED { continue } if lib.GetVersion() == "" { @@ -304,8 +323,8 @@ func runCompileCommand(cmd *cobra.Command, args []string) { } if hasVendoredLibs { msg := "\n" - msg += tr("WARNING: The sketch is compiled using one or more custom libraries.") + "\n" - msg += tr("Currently, Build Profiles only support libraries available through Arduino Library Manager.") + msg += i18n.Tr("WARNING: The sketch is compiled using one or more custom libraries.") + "\n" + msg += i18n.Tr("Currently, Build Profiles only support libraries available through Arduino Library Manager.") feedback.Warning(msg) } @@ -317,15 +336,15 @@ func runCompileCommand(cmd *cobra.Command, args []string) { profileOut += fmt.Sprintln(" " + newProfileName + ":") profileOut += fmt.Sprintln(" fqbn: " + compileRequest.GetFqbn()) profileOut += fmt.Sprintln(" platforms:") - boardPlatform := compileRes.GetBoardPlatform() + boardPlatform := builderRes.GetBoardPlatform() profileOut += fmt.Sprintln(" - platform: " + boardPlatform.GetId() + " (" + boardPlatform.GetVersion() + ")") if url := boardPlatform.GetPackageUrl(); url != "" { profileOut += fmt.Sprintln(" platform_index_url: " + url) } - if buildPlatform := compileRes.GetBuildPlatform(); buildPlatform != nil && - buildPlatform.Id != boardPlatform.Id && - buildPlatform.Version != boardPlatform.Version { + if buildPlatform := builderRes.GetBuildPlatform(); buildPlatform != nil && + buildPlatform.GetId() != boardPlatform.GetId() && + buildPlatform.GetVersion() != boardPlatform.GetVersion() { profileOut += fmt.Sprintln(" - platform: " + buildPlatform.GetId() + " (" + buildPlatform.GetVersion() + ")") if url := buildPlatform.GetPackageUrl(); url != "" { profileOut += fmt.Sprintln(" platform_index_url: " + url) @@ -340,10 +359,12 @@ func runCompileCommand(cmd *cobra.Command, args []string) { stdIO := stdIORes() res := &compileResult{ - CompilerOut: stdIO.Stdout, - CompilerErr: stdIO.Stderr, - BuilderResult: compileRes, - UploadResult: uploadRes, + CompilerOut: stdIO.Stdout, + CompilerErr: stdIO.Stderr, + BuilderResult: result.NewBuilderResult(builderRes), + UploadResult: updatedUploadPortResult{ + UpdatedUploadPort: result.NewPort(uploadRes.GetUpdatedUploadPort()), + }, ProfileOut: profileOut, Success: compileError == nil, showPropertiesMode: showProperties, @@ -351,31 +372,30 @@ func runCompileCommand(cmd *cobra.Command, args []string) { } if compileError != nil { - res.Error = tr("Error during build: %v", compileError) + res.Error = i18n.Tr("Error during build: %v", compileError) // Check the error type to give the user better feedback on how // to resolve it - var platformErr *arduino.PlatformNotFoundError + var platformErr *cmderrors.PlatformNotFoundError if errors.As(compileError, &platformErr) { split := strings.Split(platformErr.Platform, ":") if len(split) < 2 { - panic(tr("Platform ID is not correct")) + panic(i18n.Tr("Platform ID is not correct")) } if profileArg.String() == "" { res.Error += fmt.Sprintln() - if platform, err := core.PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: platformErr.Platform, - AllVersions: false, + if platform, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: platformErr.Platform, }); err != nil { res.Error += err.Error() } else if len(platform.GetSearchOutput()) > 0 { suggestion := fmt.Sprintf("`%s core install %s`", version.VersionInfo.Application, platformErr.Platform) - res.Error += tr("Try running %s", suggestion) + res.Error += i18n.Tr("Try running %s", suggestion) } else { - res.Error += tr("Platform %s is not found in any known index\nMaybe you need to add a 3rd party URL?", platformErr.Platform) + res.Error += i18n.Tr("Platform %s is not found in any known index\nMaybe you need to add a 3rd party URL?", platformErr.Platform) } } } @@ -384,15 +404,18 @@ func runCompileCommand(cmd *cobra.Command, args []string) { feedback.PrintResult(res) } -type compileResult struct { - CompilerOut string `json:"compiler_out"` - CompilerErr string `json:"compiler_err"` - BuilderResult *rpc.CompileResponse `json:"builder_result"` - UploadResult *rpc.UploadResult `json:"upload_result"` - Success bool `json:"success"` - ProfileOut string `json:"profile_out,omitempty"` - Error string `json:"error,omitempty"` +type updatedUploadPortResult struct { + UpdatedUploadPort *result.Port `json:"updated_upload_port,omitempty"` +} +type compileResult struct { + CompilerOut string `json:"compiler_out"` + CompilerErr string `json:"compiler_err"` + BuilderResult *result.BuilderResult `json:"builder_result"` + UploadResult updatedUploadPortResult `json:"upload_result"` + Success bool `json:"success"` + ProfileOut string `json:"profile_out,omitempty"` + Error string `json:"error,omitempty"` showPropertiesMode arguments.ShowPropertiesMode hideStats bool } @@ -402,8 +425,8 @@ func (r *compileResult) Data() interface{} { } func (r *compileResult) String() string { - if r.showPropertiesMode != arguments.ShowPropertiesDisabled { - return strings.Join(r.BuilderResult.GetBuildProperties(), fmt.Sprintln()) + if r.BuilderResult != nil && r.showPropertiesMode != arguments.ShowPropertiesDisabled { + return strings.Join(r.BuilderResult.BuildProperties, fmt.Sprintln()) } if r.hideStats { @@ -419,38 +442,38 @@ func (r *compileResult) String() string { if r.CompilerOut != "" || r.CompilerErr != "" { res += fmt.Sprintln() } - if len(build.GetUsedLibraries()) > 0 { + if build != nil && len(build.UsedLibraries) > 0 { libraries := table.New() libraries.SetHeader( - table.NewCell(tr("Used library"), titleColor), - table.NewCell(tr("Version"), titleColor), - table.NewCell(tr("Path"), pathColor)) - for _, l := range build.GetUsedLibraries() { + table.NewCell(i18n.Tr("Used library"), titleColor), + table.NewCell(i18n.Tr("Version"), titleColor), + table.NewCell(i18n.Tr("Path"), pathColor)) + for _, l := range build.UsedLibraries { libraries.AddRow( - table.NewCell(l.GetName(), nameColor), - l.GetVersion(), - table.NewCell(l.GetInstallDir(), pathColor)) + table.NewCell(l.Name, nameColor), + l.Version, + table.NewCell(l.InstallDir, pathColor)) } res += fmt.Sprintln(libraries.Render()) } - - if boardPlatform := build.GetBoardPlatform(); boardPlatform != nil { + if build != nil && build.BoardPlatform != nil { + boardPlatform := build.BoardPlatform platforms := table.New() platforms.SetHeader( - table.NewCell(tr("Used platform"), titleColor), - table.NewCell(tr("Version"), titleColor), - table.NewCell(tr("Path"), pathColor)) + table.NewCell(i18n.Tr("Used platform"), titleColor), + table.NewCell(i18n.Tr("Version"), titleColor), + table.NewCell(i18n.Tr("Path"), pathColor)) platforms.AddRow( - table.NewCell(boardPlatform.GetId(), nameColor), - boardPlatform.GetVersion(), - table.NewCell(boardPlatform.GetInstallDir(), pathColor)) - if buildPlatform := build.GetBuildPlatform(); buildPlatform != nil && + table.NewCell(boardPlatform.Id, nameColor), + boardPlatform.Version, + table.NewCell(boardPlatform.InstallDir, pathColor)) + if buildPlatform := build.BuildPlatform; buildPlatform != nil && buildPlatform.Id != boardPlatform.Id && buildPlatform.Version != boardPlatform.Version { platforms.AddRow( - table.NewCell(buildPlatform.GetId(), nameColor), - buildPlatform.GetVersion(), - table.NewCell(buildPlatform.GetInstallDir(), pathColor)) + table.NewCell(buildPlatform.Id, nameColor), + buildPlatform.Version, + table.NewCell(buildPlatform.InstallDir, pathColor)) } res += fmt.Sprintln(platforms.Render()) } diff --git a/internal/cli/completion/completion.go b/internal/cli/completion/completion.go index 0dd05f8e315..da3e19c397b 100644 --- a/internal/cli/completion/completion.go +++ b/internal/cli/completion/completion.go @@ -18,8 +18,8 @@ package completion import ( "os" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -35,13 +35,13 @@ func NewCommand() *cobra.Command { Use: "completion [bash|zsh|fish|powershell] [--no-descriptions]", ValidArgs: []string{"bash", "zsh", "fish", "powershell"}, Args: cobra.ExactArgs(1), - Short: tr("Generates completion scripts"), - Long: tr("Generates completion scripts for various shells"), + Short: i18n.Tr("Generates completion scripts"), + Long: i18n.Tr("Generates completion scripts for various shells"), Example: " " + os.Args[0] + " completion bash > completion.sh\n" + " " + "source completion.sh", Run: runCompletionCommand, } - completionCommand.Flags().BoolVar(&completionNoDesc, "no-descriptions", false, tr("Disable completion description for shells that support it")) + completionCommand.Flags().BoolVar(&completionNoDesc, "no-descriptions", false, i18n.Tr("Disable completion description for shells that support it")) return completionCommand } @@ -53,7 +53,7 @@ func runCompletionCommand(cmd *cobra.Command, args []string) { feedback.Fatal(err.Error(), feedback.ErrGeneric) } if completionNoDesc && (args[0] == "powershell") { - feedback.Fatal(tr("Error: command description is not supported by %v", args[0]), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error: command description is not supported by %v", args[0]), feedback.ErrGeneric) } switch args[0] { case "bash": diff --git a/internal/cli/config/add.go b/internal/cli/config/add.go index d375a0c578e..d4950fd691b 100644 --- a/internal/cli/config/add.go +++ b/internal/cli/config/add.go @@ -16,90 +16,66 @@ package config import ( + "context" + "encoding/json" "os" - "reflect" + "slices" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -// // TODO: When update to go 1.18 or later, convert to generic -// // to allow uniquify() on any slice that supports -// // `comparable` -// // See https://gosamples.dev/generics-remove-duplicates-slice/ -// func uniquify[T comparable](s []T) []T { -// // use a map, which enforces unique keys -// inResult := make(map[T]bool) -// var result []T -// // loop through input slice **in order**, -// // to ensure output retains that order -// // (except that it removes duplicates) -// for i := 0; i < len(s); i++ { -// // attempt to use the element as a key -// if _, ok := inResult[s[i]]; !ok { -// // if key didn't exist in map, -// // add to map and append to result -// inResult[s[i]] = true -// result = append(result, s[i]) -// } -// } -// return result -// } - -func uniquifyStringSlice(s []string) []string { - // use a map, which enforces unique keys - inResult := make(map[string]bool) - var result []string - // loop through input slice **in order**, - // to ensure output retains that order - // (except that it removes duplicates) - for i := 0; i < len(s); i++ { - // attempt to use the element as a key - if _, ok := inResult[s[i]]; !ok { - // if key didn't exist in map, - // add to map and append to result - inResult[s[i]] = true - result = append(result, s[i]) - } - } - return result -} - -func initAddCommand() *cobra.Command { +func initAddCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { addCommand := &cobra.Command{ Use: "add", - Short: tr("Adds one or more values to a setting."), - Long: tr("Adds one or more values to a setting."), + Short: i18n.Tr("Adds one or more values to a setting."), + Long: i18n.Tr("Adds one or more values to a setting."), Example: "" + " " + os.Args[0] + " config add board_manager.additional_urls https://example.com/package_example_index.json\n" + " " + os.Args[0] + " config add board_manager.additional_urls https://example.com/package_example_index.json https://another-url.com/package_another_index.json\n", Args: cobra.MinimumNArgs(2), - Run: runAddCommand, + Run: func(cmd *cobra.Command, args []string) { + ctx := cmd.Context() + runAddCommand(ctx, srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return GetConfigurationKeys(), cobra.ShellCompDirectiveDefault + ctx := cmd.Context() + return getAllArraySettingsKeys(ctx, srv), cobra.ShellCompDirectiveDefault }, } return addCommand } -func runAddCommand(cmd *cobra.Command, args []string) { +func runAddCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli config add`") key := args[0] - kind := validateKey(key) - if kind != reflect.Slice { - msg := tr("The key '%[1]v' is not a list of items, can't add to it.\nMaybe use '%[2]s'?", key, "config set") + if !slices.Contains(getAllArraySettingsKeys(ctx, srv), key) { + msg := i18n.Tr("The key '%[1]v' is not a list of items, can't add to it.\nMaybe use '%[2]s'?", key, "config set") feedback.Fatal(msg, feedback.ErrGeneric) } - v := configuration.Settings.GetStringSlice(key) - v = append(v, args[1:]...) - v = uniquifyStringSlice(v) - configuration.Settings.Set(key, v) + var currentValues []string + if resp, err := srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: key}); err != nil { + feedback.Fatal(i18n.Tr("Cannot get the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } else if err := json.Unmarshal([]byte(resp.GetEncodedValue()), ¤tValues); err != nil { + feedback.Fatal(i18n.Tr("Cannot get the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } - if err := configuration.Settings.WriteConfig(); err != nil { - feedback.Fatal(tr("Can't write config file: %v", err), feedback.ErrGeneric) + for _, arg := range args[1:] { + if !slices.Contains(currentValues, arg) { + currentValues = append(currentValues, arg) + } } + + if newValuesJSON, err := json.Marshal(currentValues); err != nil { + feedback.Fatal(i18n.Tr("Cannot remove the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } else if _, err := srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{Key: key, EncodedValue: string(newValuesJSON)}); err != nil { + feedback.Fatal(i18n.Tr("Cannot remove the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } + + saveConfiguration(ctx, srv) } diff --git a/internal/cli/config/config.go b/internal/cli/config/config.go index ee0e8922852..d05f43ff77c 100644 --- a/internal/cli/config/config.go +++ b/internal/cli/config/config.go @@ -16,44 +16,78 @@ package config import ( + "context" "os" - "reflect" + "strings" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand created a new `config` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer, settings *rpc.Configuration) *cobra.Command { configCommand := &cobra.Command{ Use: "config", - Short: tr("Arduino configuration commands."), + Short: i18n.Tr("Arduino configuration commands."), Example: " " + os.Args[0] + " config init", } - configCommand.AddCommand(initAddCommand()) - configCommand.AddCommand(initDeleteCommand()) - configCommand.AddCommand(initDumpCommand()) + configCommand.AddCommand(initAddCommand(srv)) + configCommand.AddCommand(initDeleteCommand(srv)) + configCommand.AddCommand(initDumpCommand(srv)) + configCommand.AddCommand(initGetCommand(srv)) configCommand.AddCommand(initInitCommand()) - configCommand.AddCommand(initRemoveCommand()) - configCommand.AddCommand(initSetCommand()) + configCommand.AddCommand(initRemoveCommand(srv)) + configCommand.AddCommand(initSetCommand(srv)) return configCommand } -// GetConfigurationKeys is an helper function useful to autocomplete. -// It returns a list of configuration keys which can be changed -func GetConfigurationKeys() []string { - var res []string - keys := configuration.Settings.AllKeys() - for _, key := range keys { - kind, _ := typeOf(key) - if kind == reflect.Slice { - res = append(res, key) - } +func getAllSettingsKeys(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + res, _ := srv.SettingsEnumerate(ctx, &rpc.SettingsEnumerateRequest{}) + allKeys := f.Map(res.GetEntries(), (*rpc.SettingsEnumerateResponse_Entry).GetKey) + return allKeys +} + +func getAllArraySettingsKeys(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + res, _ := srv.SettingsEnumerate(ctx, &rpc.SettingsEnumerateRequest{}) + arrayEntries := f.Filter(res.GetEntries(), func(e *rpc.SettingsEnumerateResponse_Entry) bool { + return strings.HasPrefix(e.GetType(), "[]") + }) + arrayKeys := f.Map(arrayEntries, (*rpc.SettingsEnumerateResponse_Entry).GetKey) + return arrayKeys +} + +type ctxValue string + +// GetConfigFile returns the configuration file path from the context +func GetConfigFile(ctx context.Context) string { + res := ctx.Value(ctxValue("config_file")) + if res == nil { + return "" + } + return res.(string) +} + +// SetConfigFile sets the configuration file path in the context +func SetConfigFile(ctx context.Context, configFile string) context.Context { + return context.WithValue(ctx, ctxValue("config_file"), configFile) +} + +func saveConfiguration(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { + var outConfig []byte + if res, err := srv.ConfigurationSave(ctx, &rpc.ConfigurationSaveRequest{SettingsFormat: "yaml"}); err != nil { + feedback.Fatal(i18n.Tr("Error writing to file: %v", err), feedback.ErrGeneric) + } else { + outConfig = []byte(res.GetEncodedSettings()) + } + + configFile := GetConfigFile(ctx) + if err := paths.New(configFile).WriteFile(outConfig); err != nil { + feedback.Fatal(i18n.Tr("Error writing to file: %v", err), feedback.ErrGeneric) } - return res } diff --git a/internal/cli/config/delete.go b/internal/cli/config/delete.go index 794a513a858..e0ff13a1455 100644 --- a/internal/cli/config/delete.go +++ b/internal/cli/config/delete.go @@ -16,44 +16,44 @@ package config import ( + "context" "os" - "github.com/arduino/arduino-cli/commands/daemon" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" - "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initDeleteCommand() *cobra.Command { +func initDeleteCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { deleteCommand := &cobra.Command{ Use: "delete", - Short: tr("Deletes a settings key and all its sub keys."), - Long: tr("Deletes a settings key and all its sub keys."), + Short: i18n.Tr("Deletes a settings key and all its sub keys."), + Long: i18n.Tr("Deletes a settings key and all its sub keys."), Example: "" + " " + os.Args[0] + " config delete board_manager\n" + " " + os.Args[0] + " config delete board_manager.additional_urls", Args: cobra.ExactArgs(1), - Run: runDeleteCommand, + Run: func(cmd *cobra.Command, args []string) { + ctx := cmd.Context() + runDeleteCommand(ctx, srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return configuration.Settings.AllKeys(), cobra.ShellCompDirectiveDefault + ctx := cmd.Context() + return getAllSettingsKeys(ctx, srv), cobra.ShellCompDirectiveDefault }, } return deleteCommand } -func runDeleteCommand(cmd *cobra.Command, args []string) { +func runDeleteCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli config delete`") - toDelete := args[0] - svc := daemon.SettingsService{} - _, err := svc.Delete(cmd.Context(), &settings.DeleteRequest{Key: toDelete}) - if err != nil { - feedback.Fatal(tr("Cannot delete the key %[1]s: %[2]v", toDelete, err), feedback.ErrGeneric) - } - _, err = svc.Write(cmd.Context(), &settings.WriteRequest{FilePath: configuration.Settings.ConfigFileUsed()}) - if err != nil { - feedback.Fatal(tr("Cannot write the file %[1]s: %[2]v", configuration.Settings.ConfigFileUsed(), err), feedback.ErrGeneric) + key := args[0] + if _, err := srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{Key: key, EncodedValue: ""}); err != nil { + feedback.Fatal(i18n.Tr("Cannot delete the key %[1]s: %[2]v", key, err), feedback.ErrGeneric) } + + saveConfiguration(ctx, srv) } diff --git a/internal/cli/config/dump.go b/internal/cli/config/dump.go index 9e36a6f577a..6b78e83e83d 100644 --- a/internal/cli/config/dump.go +++ b/internal/cli/config/dump.go @@ -18,45 +18,64 @@ package config import ( "os" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "gopkg.in/yaml.v3" ) -func initDumpCommand() *cobra.Command { +func initDumpCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var dumpCommand = &cobra.Command{ Use: "dump", - Short: tr("Prints the current configuration"), - Long: tr("Prints the current configuration."), + Short: i18n.Tr("Prints the current configuration"), + Long: i18n.Tr("Prints the current configuration."), Example: " " + os.Args[0] + " config dump", Args: cobra.NoArgs, - Run: runDumpCommand, + Run: func(cmd *cobra.Command, args []string) { + logrus.Info("Executing `arduino-cli config dump`") + res := &rawResult{} + switch feedback.GetFormat() { + case feedback.JSON, feedback.MinifiedJSON: + resp, err := srv.ConfigurationSave(cmd.Context(), &rpc.ConfigurationSaveRequest{SettingsFormat: "json"}) + if err != nil { + logrus.Fatalf("Error creating configuration: %v", err) + } + res.rawJSON = []byte(resp.GetEncodedSettings()) + case feedback.Text: + resp, err := srv.ConfigurationSave(cmd.Context(), &rpc.ConfigurationSaveRequest{SettingsFormat: "yaml"}) + if err != nil { + logrus.Fatalf("Error creating configuration: %v", err) + } + res.rawYAML = []byte(resp.GetEncodedSettings()) + default: + logrus.Fatalf("Unsupported format: %v", feedback.GetFormat()) + } + feedback.PrintResult(dumpResult{Config: res}) + }, } return dumpCommand } -func runDumpCommand(cmd *cobra.Command, args []string) { - logrus.Info("Executing `arduino-cli config dump`") - feedback.PrintResult(dumpResult{configuration.Settings.AllSettings()}) +type rawResult struct { + rawJSON []byte + rawYAML []byte +} + +func (r *rawResult) MarshalJSON() ([]byte, error) { + // it is already encoded in rawJSON field + return r.rawJSON, nil } -// output from this command requires special formatting, let's create a dedicated -// feedback.Result implementation type dumpResult struct { - data map[string]interface{} + Config *rawResult `json:"config"` } func (dr dumpResult) Data() interface{} { - return dr.data + return dr } func (dr dumpResult) String() string { - bs, err := yaml.Marshal(dr.data) - if err != nil { - // Should never happen - panic(tr("unable to marshal config to YAML: %v", err)) - } - return string(bs) + // In case of text output do not wrap the output in outer JSON or YAML structure + return string(dr.Config.rawYAML) } diff --git a/internal/cli/config/get.go b/internal/cli/config/get.go new file mode 100644 index 00000000000..8ac4451ee9f --- /dev/null +++ b/internal/cli/config/get.go @@ -0,0 +1,88 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package config + +import ( + "context" + "encoding/json" + "fmt" + "os" + + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + "gopkg.in/yaml.v3" +) + +func initGetCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { + getCommand := &cobra.Command{ + Use: "get", + Short: i18n.Tr("Gets a settings key value."), + Long: i18n.Tr("Gets a settings key value."), + Example: "" + + " " + os.Args[0] + " config get logging\n" + + " " + os.Args[0] + " config get daemon.port\n" + + " " + os.Args[0] + " config get board_manager.additional_urls", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + runGetCommand(cmd.Context(), srv, args) + }, + ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + ctx := cmd.Context() + return getAllSettingsKeys(ctx, srv), cobra.ShellCompDirectiveDefault + }, + } + return getCommand +} + +func runGetCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { + logrus.Info("Executing `arduino-cli config get`") + + for _, toGet := range args { + resp, err := srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: toGet}) + if err != nil { + feedback.Fatal(i18n.Tr("Cannot get the configuration key %[1]s: %[2]v", toGet, err), feedback.ErrGeneric) + } + var result getResult + if err := json.Unmarshal([]byte(resp.GetEncodedValue()), &result.resp); err != nil { + // Should never happen... + panic(fmt.Sprintf("Cannot parse JSON for key %[1]s: %[2]v", toGet, err)) + } + feedback.PrintResult(result) + } +} + +// output from this command may require special formatting. +// create a dedicated feedback.Result implementation to safely handle +// any changes to the configuration.Settings struct. +type getResult struct { + resp interface{} +} + +func (gr getResult) Data() interface{} { + return gr.resp +} + +func (gr getResult) String() string { + gs, err := yaml.Marshal(gr.resp) + if err != nil { + // Should never happen + panic(i18n.Tr("unable to marshal config to YAML: %v", err)) + } + return string(gs) +} diff --git a/internal/cli/config/init.go b/internal/cli/config/init.go index 471905c54cc..85491492d21 100644 --- a/internal/cli/config/init.go +++ b/internal/cli/config/init.go @@ -16,16 +16,19 @@ package config import ( + "context" + "encoding/json" "os" "strings" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "github.com/spf13/viper" ) var ( @@ -39,10 +42,10 @@ const defaultFileName = "arduino-cli.yaml" func initInitCommand() *cobra.Command { initCommand := &cobra.Command{ Use: "init", - Short: tr("Writes current configuration to a configuration file."), - Long: tr("Creates or updates the configuration file in the data directory or custom directory with the current configuration settings."), + Short: i18n.Tr("Writes current configuration to a configuration file."), + Long: i18n.Tr("Creates or updates the configuration file in the data directory or custom directory with the current configuration settings."), Example: "" + - " # " + tr("Writes current configuration to the configuration file in the data directory.") + "\n" + + " # " + i18n.Tr("Writes current configuration to the configuration file in the data directory.") + "\n" + " " + os.Args[0] + " config init\n" + " " + os.Args[0] + " config init --dest-dir /home/user/MyDirectory\n" + " " + os.Args[0] + " config init --dest-file /home/user/MyDirectory/my_settings.yaml", @@ -50,66 +53,130 @@ func initInitCommand() *cobra.Command { PreRun: func(cmd *cobra.Command, args []string) { arguments.CheckFlagsConflicts(cmd, "dest-file", "dest-dir") }, - Run: runInitCommand, + Run: func(cmd *cobra.Command, args []string) { + runInitCommand(cmd.Context(), cmd) + }, } - initCommand.Flags().StringVar(&destDir, "dest-dir", "", tr("Sets where to save the configuration file.")) - initCommand.Flags().StringVar(&destFile, "dest-file", "", tr("Sets where to save the configuration file.")) - initCommand.Flags().BoolVar(&overwrite, "overwrite", false, tr("Overwrite existing config file.")) + initCommand.Flags().StringVar(&destDir, "dest-dir", "", i18n.Tr("Sets where to save the configuration file.")) + initCommand.Flags().StringVar(&destFile, "dest-file", "", i18n.Tr("Sets where to save the configuration file.")) + initCommand.Flags().BoolVar(&overwrite, "overwrite", false, i18n.Tr("Overwrite existing config file.")) return initCommand } -func runInitCommand(cmd *cobra.Command, args []string) { +func runInitCommand(ctx context.Context, cmd *cobra.Command) { logrus.Info("Executing `arduino-cli config init`") var configFileAbsPath *paths.Path - var absPath *paths.Path + var configFileDir *paths.Path var err error switch { case destFile != "": configFileAbsPath, err = paths.New(destFile).Abs() if err != nil { - feedback.Fatal(tr("Cannot find absolute path: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Cannot find absolute path: %v", err), feedback.ErrGeneric) } + configFileDir = configFileAbsPath.Parent() - absPath = configFileAbsPath.Parent() - case destDir == "": - destDir = configuration.Settings.GetString("directories.Data") - fallthrough - default: - absPath, err = paths.New(destDir).Abs() + case destDir != "": + configFileDir, err = paths.New(destDir).Abs() if err != nil { - feedback.Fatal(tr("Cannot find absolute path: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Cannot find absolute path: %v", err), feedback.ErrGeneric) } - configFileAbsPath = absPath.Join(defaultFileName) + configFileAbsPath = configFileDir.Join(defaultFileName) + + default: + configFileAbsPath = paths.New(GetConfigFile(ctx)) + configFileDir = configFileAbsPath.Parent() } if !overwrite && configFileAbsPath.Exist() { - feedback.Fatal(tr("Config file already exists, use --overwrite to discard the existing one."), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Config file already exists, use --overwrite to discard the existing one."), feedback.ErrGeneric) + } + + logrus.Infof("Writing config file to: %s", configFileDir) + + if err := configFileDir.MkdirAll(); err != nil { + feedback.Fatal(i18n.Tr("Cannot create config file directory: %v", err), feedback.ErrGeneric) } - logrus.Infof("Writing config file to: %s", absPath) + tmpSrv := commands.NewArduinoCoreServer() - if err := absPath.MkdirAll(); err != nil { - feedback.Fatal(tr("Cannot create config file directory: %v", err), feedback.ErrGeneric) + if _, err := tmpSrv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{SettingsFormat: "yaml", EncodedSettings: ""}); err != nil { + feedback.Fatal(i18n.Tr("Error creating configuration: %v", err), feedback.ErrGeneric) } - newSettings := viper.New() - configuration.SetDefaults(newSettings) - configuration.BindFlags(cmd, newSettings) + // Ensure to always output an empty array for additional urls + if _, err := tmpSrv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{ + Key: "board_manager.additional_urls", EncodedValue: "[]", + }); err != nil { + feedback.Fatal(i18n.Tr("Error creating configuration: %v", err), feedback.ErrGeneric) + } + + ApplyGlobalFlagsToConfiguration(ctx, cmd, tmpSrv) + + resp, err := tmpSrv.ConfigurationSave(ctx, &rpc.ConfigurationSaveRequest{SettingsFormat: "yaml"}) + if err != nil { + feedback.Fatal(i18n.Tr("Error creating configuration: %v", err), feedback.ErrGeneric) + } + + if err := configFileAbsPath.WriteFile([]byte(resp.GetEncodedSettings())); err != nil { + feedback.Fatal(i18n.Tr("Cannot create config file: %v", err), feedback.ErrGeneric) + } - for _, url := range newSettings.GetStringSlice("board_manager.additional_urls") { - if strings.Contains(url, ",") { - feedback.Fatal(tr("Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n%s", url), - feedback.ErrGeneric) + feedback.PrintResult(initResult{ConfigFileAbsPath: configFileAbsPath}) +} + +// ApplyGlobalFlagsToConfiguration overrides server settings with the flags from the command line +func ApplyGlobalFlagsToConfiguration(ctx context.Context, cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer) { + set := func(k string, v any) { + if jsonValue, err := json.Marshal(v); err != nil { + feedback.Fatal(i18n.Tr("Error creating configuration: %v", err), feedback.ErrGeneric) + } else if _, err := srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{ + Key: k, EncodedValue: string(jsonValue), + }); err != nil { + feedback.Fatal(i18n.Tr("Error creating configuration: %v", err), feedback.ErrGeneric) } + } - if err := newSettings.WriteConfigAs(configFileAbsPath.String()); err != nil { - feedback.Fatal(tr("Cannot create config file: %v", err), feedback.ErrGeneric) + if f := cmd.Flags().Lookup("log-level"); f.Changed { + logLevel, _ := cmd.Flags().GetString("log-level") + set("logging.level", logLevel) + } + if f := cmd.Flags().Lookup("log-file"); f.Changed { + logFile, _ := cmd.Flags().GetString("log-file") + set("logging.file", logFile) + } + if f := cmd.Flags().Lookup("no-color"); f.Changed { + noColor, _ := cmd.Flags().GetBool("no-color") + set("output.no_color", noColor) + } + if f := cmd.Flags().Lookup("additional-urls"); f.Changed { + urls, _ := cmd.Flags().GetStringSlice("additional-urls") + for _, url := range urls { + if strings.Contains(url, ",") { + feedback.Fatal( + i18n.Tr("Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n%s", url), + feedback.ErrBadArgument) + } + } + set("board_manager.additional_urls", urls) } +} + +// output from this command requires special formatting, let's create a dedicated +// feedback.Result implementation +type initResult struct { + ConfigFileAbsPath *paths.Path `json:"config_path"` +} + +func (dr initResult) Data() interface{} { + return dr +} - msg := tr("Config file written to: %s", configFileAbsPath.String()) +func (dr initResult) String() string { + msg := i18n.Tr("Config file written to: %s", dr.ConfigFileAbsPath.String()) logrus.Info(msg) - feedback.Print(msg) + return msg } diff --git a/internal/cli/config/remove.go b/internal/cli/config/remove.go index 1be518448e4..45592e5a058 100644 --- a/internal/cli/config/remove.go +++ b/internal/cli/config/remove.go @@ -16,56 +16,64 @@ package config import ( + "context" + "encoding/json" "os" - "reflect" + "slices" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initRemoveCommand() *cobra.Command { +func initRemoveCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { removeCommand := &cobra.Command{ Use: "remove", - Short: tr("Removes one or more values from a setting."), - Long: tr("Removes one or more values from a setting."), + Short: i18n.Tr("Removes one or more values from a setting."), + Long: i18n.Tr("Removes one or more values from a setting."), Example: "" + " " + os.Args[0] + " config remove board_manager.additional_urls https://example.com/package_example_index.json\n" + " " + os.Args[0] + " config remove board_manager.additional_urls https://example.com/package_example_index.json https://another-url.com/package_another_index.json\n", Args: cobra.MinimumNArgs(2), - Run: runRemoveCommand, + Run: func(cmd *cobra.Command, args []string) { + ctx := cmd.Context() + runRemoveCommand(ctx, srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return GetConfigurationKeys(), cobra.ShellCompDirectiveDefault + ctx := cmd.Context() + return getAllArraySettingsKeys(ctx, srv), cobra.ShellCompDirectiveDefault }, } return removeCommand } -func runRemoveCommand(cmd *cobra.Command, args []string) { +func runRemoveCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli config remove`") key := args[0] - kind := validateKey(key) - if kind != reflect.Slice { - msg := tr("The key '%[1]v' is not a list of items, can't remove from it.\nMaybe use '%[2]s'?", key, "config delete") + if !slices.Contains(getAllArraySettingsKeys(ctx, srv), key) { + msg := i18n.Tr("The key '%[1]v' is not a list of items, can't remove from it.\nMaybe use '%[2]s'?", key, "config delete") feedback.Fatal(msg, feedback.ErrGeneric) } - mappedValues := map[string]bool{} - for _, v := range configuration.Settings.GetStringSlice(key) { - mappedValues[v] = true + var currentValues []string + if resp, err := srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: key}); err != nil { + feedback.Fatal(i18n.Tr("Cannot get the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } else if err := json.Unmarshal([]byte(resp.GetEncodedValue()), ¤tValues); err != nil { + feedback.Fatal(i18n.Tr("Cannot get the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) } + for _, arg := range args[1:] { - delete(mappedValues, arg) + currentValues = slices.DeleteFunc(currentValues, func(in string) bool { return in == arg }) } - values := []string{} - for k := range mappedValues { - values = append(values, k) - } - configuration.Settings.Set(key, values) - if err := configuration.Settings.WriteConfig(); err != nil { - feedback.Fatal(tr("Can't write config file: %v", err), feedback.ErrGeneric) + if newValuesJSON, err := json.Marshal(currentValues); err != nil { + feedback.Fatal(i18n.Tr("Cannot remove the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } else if _, err := srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{Key: key, EncodedValue: string(newValuesJSON)}); err != nil { + feedback.Fatal(i18n.Tr("Cannot remove the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) } + + saveConfiguration(ctx, srv) } diff --git a/internal/cli/config/set.go b/internal/cli/config/set.go index f620fa183f5..34c1d3168e2 100644 --- a/internal/cli/config/set.go +++ b/internal/cli/config/set.go @@ -16,61 +16,63 @@ package config import ( + "context" + "encoding/json" "os" - "reflect" - "strconv" - "github.com/arduino/arduino-cli/configuration" + f "github.com/arduino/arduino-cli/internal/algorithms" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initSetCommand() *cobra.Command { +func initSetCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { setCommand := &cobra.Command{ Use: "set", - Short: tr("Sets a setting value."), - Long: tr("Sets a setting value."), + Short: i18n.Tr("Sets a setting value."), + Long: i18n.Tr("Sets a setting value."), Example: "" + " " + os.Args[0] + " config set logging.level trace\n" + " " + os.Args[0] + " config set logging.file my-log.txt\n" + " " + os.Args[0] + " config set sketch.always_export_binaries true\n" + " " + os.Args[0] + " config set board_manager.additional_urls https://example.com/package_example_index.json https://another-url.com/package_another_index.json", Args: cobra.MinimumNArgs(2), - Run: runSetCommand, + Run: func(cmd *cobra.Command, args []string) { + runSetCommand(cmd.Context(), srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return configuration.Settings.AllKeys(), cobra.ShellCompDirectiveDefault + ctx := cmd.Context() + return getAllSettingsKeys(ctx, srv), cobra.ShellCompDirectiveDefault }, } return setCommand } -func runSetCommand(cmd *cobra.Command, args []string) { +func runSetCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli config set`") - key := args[0] - kind := validateKey(key) - if kind != reflect.Slice && len(args) > 2 { - feedback.Fatal(tr("Can't set multiple values in key %v", key), feedback.ErrGeneric) + req := &rpc.SettingsSetValueRequest{ + Key: args[0], } - - var value interface{} - switch kind { - case reflect.Slice: - value = uniquifyStringSlice(args[1:]) - case reflect.String: - value = args[1] - case reflect.Bool: - var err error - value, err = strconv.ParseBool(args[1]) + if len(args) == 2 { + // Single value + req.EncodedValue = args[1] + req.ValueFormat = "cli" + } else { + // Uniq Array + jsonValues, err := json.Marshal(f.Uniq(args[1:])) if err != nil { - feedback.Fatal(tr("error parsing value: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error setting value: %v", err), feedback.ErrGeneric) } + req.EncodedValue = string(jsonValues) + req.ValueFormat = "json" } - configuration.Settings.Set(key, value) - - if err := configuration.Settings.WriteConfig(); err != nil { - feedback.Fatal(tr("Writing config file: %v", err), feedback.ErrGeneric) + if _, err := srv.SettingsSetValue(ctx, req); err != nil { + feedback.Fatal(i18n.Tr("Error setting value: %v", err), feedback.ErrGeneric) } + + saveConfiguration(ctx, srv) } diff --git a/internal/cli/config/validate.go b/internal/cli/config/validate.go deleted file mode 100644 index f494bfaac0b..00000000000 --- a/internal/cli/config/validate.go +++ /dev/null @@ -1,61 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package config - -import ( - "fmt" - "reflect" - - "github.com/arduino/arduino-cli/internal/cli/feedback" -) - -var validMap = map[string]reflect.Kind{ - "board_manager.additional_urls": reflect.Slice, - "daemon.port": reflect.String, - "directories.data": reflect.String, - "directories.downloads": reflect.String, - "directories.user": reflect.String, - "directories.builtin.tools": reflect.String, - "directories.builtin.libraries": reflect.String, - "library.enable_unsafe_install": reflect.Bool, - "locale": reflect.String, - "logging.file": reflect.String, - "logging.format": reflect.String, - "logging.level": reflect.String, - "sketch.always_export_binaries": reflect.Bool, - "metrics.addr": reflect.String, - "metrics.enabled": reflect.Bool, - "network.proxy": reflect.String, - "network.user_agent_ext": reflect.String, - "output.no_color": reflect.Bool, - "updater.enable_notification": reflect.Bool, -} - -func typeOf(key string) (reflect.Kind, error) { - t, ok := validMap[key] - if !ok { - return reflect.Invalid, fmt.Errorf(tr("Settings key doesn't exist")) - } - return t, nil -} - -func validateKey(key string) reflect.Kind { - kind, err := typeOf(key) - if err != nil { - feedback.FatalError(err, feedback.ErrGeneric) - } - return kind -} diff --git a/internal/cli/configuration/board_manager.go b/internal/cli/configuration/board_manager.go new file mode 100644 index 00000000000..22f982f5404 --- /dev/null +++ b/internal/cli/configuration/board_manager.go @@ -0,0 +1,23 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +func (settings *Settings) BoardManagerAdditionalUrls() []string { + if urls, ok, _ := settings.GetStringSliceOk("board_manager.additional_urls"); ok { + return urls + } + return settings.Defaults.GetStringSlice("board_manager.additional_urls") +} diff --git a/internal/cli/configuration/build_cache.go b/internal/cli/configuration/build_cache.go new file mode 100644 index 00000000000..f7ea225d54c --- /dev/null +++ b/internal/cli/configuration/build_cache.go @@ -0,0 +1,56 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +import ( + "time" + + "github.com/arduino/go-paths-helper" +) + +// GetCompilationsBeforeBuildCachePurge returns the number of compilations before the build cache is purged. +func (s *Settings) GetCompilationsBeforeBuildCachePurge() uint { + if res, ok, _ := s.GetUintOk("build_cache.compilations_before_purge"); ok { + return res + } + return s.Defaults.GetUint("build_cache.compilations_before_purge") +} + +// GetBuildCacheTTL returns the time-to-live of the build cache (i.e. the minimum age to wait before purging the cache). +func (s *Settings) GetBuildCacheTTL() time.Duration { + if res, ok, _ := s.GetDurationOk("build_cache.ttl"); ok { + return res + } + return s.Defaults.GetDuration("build_cache.ttl") +} + +// GetBuildCachePath returns the path to the build cache. +func (s *Settings) GetBuildCachePath() (*paths.Path, bool) { + p, ok, _ := s.GetStringOk("build_cache.path") + if !ok { + return nil, false + } + return paths.New(p), true +} + +// GetBuildCacheExtraPaths returns the extra paths to the build cache. +// Those paths are visited to look for precompiled items if not found elsewhere. +func (s *Settings) GetBuildCacheExtraPaths() paths.PathList { + if p, ok, _ := s.GetStringSliceOk("build_cache.extra_paths"); ok { + return paths.NewPathList(p...) + } + return nil +} diff --git a/internal/cli/configuration/configuration.go b/internal/cli/configuration/configuration.go new file mode 100644 index 00000000000..8ceef039af6 --- /dev/null +++ b/internal/cli/configuration/configuration.go @@ -0,0 +1,117 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +import ( + "os" + "path/filepath" + "runtime" + + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/go-configmap" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/go-win32-utils" +) + +// Settings contains the configuration of the Arduino CLI core service +type Settings struct { + *configmap.Map + Defaults *configmap.Map +} + +// NewSettings creates a new instance of Settings with the default values set +func NewSettings() *Settings { + res := &Settings{ + Map: configmap.New(), + Defaults: configmap.New(), + } + SetDefaults(res) + return res +} + +// getDefaultArduinoDataDir returns the full path to the default arduino folder +func getDefaultArduinoDataDir() string { + userHomeDir, err := os.UserHomeDir() + if err != nil { + feedback.Warning(i18n.Tr("Unable to get user home dir: %v", err)) + return "." + } + + switch runtime.GOOS { + case "linux": + return filepath.Join(userHomeDir, ".arduino15") + case "darwin": + return filepath.Join(userHomeDir, "Library", "Arduino15") + case "windows": + localAppDataPath, err := win32.GetLocalAppDataFolder() + if err != nil { + feedback.Warning(i18n.Tr("Unable to get Local App Data Folder: %v", err)) + return "." + } + return filepath.Join(localAppDataPath, "Arduino15") + default: + return "." + } +} + +// getDefaultUserDir returns the full path to the default user folder +func getDefaultUserDir() string { + userHomeDir, err := os.UserHomeDir() + if err != nil { + feedback.Warning(i18n.Tr("Unable to get user home dir: %v", err)) + return "." + } + + switch runtime.GOOS { + case "linux": + return filepath.Join(userHomeDir, "Arduino") + case "darwin": + return filepath.Join(userHomeDir, "Documents", "Arduino") + case "windows": + documentsPath, err := win32.GetDocumentsFolder() + if err != nil { + feedback.Warning(i18n.Tr("Unable to get Documents Folder: %v", err)) + return "." + } + return filepath.Join(documentsPath, "Arduino") + default: + return "." + } +} + +// FindConfigFileInArgsFallbackOnEnv returns the config file path using the +// argument '--config-file' (if specified), if empty looks for the ARDUINO_CONFIG_FILE env, +// or looking in the current working dir +func FindConfigFileInArgsFallbackOnEnv(args []string) string { + // Look for '--config-file' argument + for i, arg := range args { + if arg == "--config-file" { + if len(args) > i+1 { + return args[i+1] + } + } + } + if p, ok := os.LookupEnv("ARDUINO_CONFIG_FILE"); ok { + return p + } + if p, ok := os.LookupEnv("ARDUINO_DIRECTORIES_DATA"); ok { + return filepath.Join(p, "arduino-cli.yaml") + } + if p, ok := os.LookupEnv("ARDUINO_DATA_DIR"); ok { + return filepath.Join(p, "arduino-cli.yaml") + } + return filepath.Join(getDefaultArduinoDataDir(), "arduino-cli.yaml") +} diff --git a/configuration/configuration.schema.json b/internal/cli/configuration/configuration.schema.json similarity index 94% rename from configuration/configuration.schema.json rename to internal/cli/configuration/configuration.schema.json index a273353967b..2f696904972 100644 --- a/configuration/configuration.schema.json +++ b/internal/cli/configuration/configuration.schema.json @@ -20,6 +20,17 @@ "build_cache": { "description": "configuration options related to the compilation cache", "properties": { + "path": { + "description": "the path to the build cache, default is `$TMP/arduino`.", + "type": "string" + }, + "extra_paths": { + "description": "a list of paths to look for precompiled artifacts if not found on `build_cache.path` setting.", + "type": "array", + "items": { + "type": "string" + } + }, "compilations_before_purge": { "description": "interval, in number of compilations, at which the cache is purged, defaults to `10`. When `0` the cache is never purged.", "type": "integer", diff --git a/configuration/configuration_schema_test.go b/internal/cli/configuration/configuration_schema_test.go similarity index 100% rename from configuration/configuration_schema_test.go rename to internal/cli/configuration/configuration_schema_test.go diff --git a/internal/cli/configuration/configuration_test.go b/internal/cli/configuration/configuration_test.go new file mode 100644 index 00000000000..23af3a964e1 --- /dev/null +++ b/internal/cli/configuration/configuration_test.go @@ -0,0 +1,65 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +import ( + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestInit(t *testing.T) { + settings := NewSettings() + + require.Equal(t, "info", settings.Defaults.GetString("logging.level")) + require.Equal(t, "text", settings.Defaults.GetString("logging.format")) + + require.Empty(t, settings.Defaults.GetStringSlice("board_manager.additional_urls")) + + require.NotEmpty(t, settings.Defaults.GetString("directories.data")) + require.Empty(t, settings.Defaults.GetString("directories.downloads")) + require.NotEmpty(t, settings.DownloadsDir().String()) + require.NotEmpty(t, settings.Defaults.GetString("directories.user")) + + require.Equal(t, "50051", settings.Defaults.GetString("daemon.port")) + + require.Equal(t, true, settings.Defaults.GetBool("metrics.enabled")) + require.Equal(t, ":9090", settings.Defaults.GetString("metrics.addr")) +} + +func TestFindConfigFile(t *testing.T) { + defaultConfigFile := filepath.Join(getDefaultArduinoDataDir(), "arduino-cli.yaml") + configFile := FindConfigFileInArgsFallbackOnEnv([]string{"--config-file"}) + require.Equal(t, defaultConfigFile, configFile) + + configFile = FindConfigFileInArgsFallbackOnEnv([]string{"--config-file", "some/path/to/config"}) + require.Equal(t, "some/path/to/config", configFile) + + configFile = FindConfigFileInArgsFallbackOnEnv([]string{"--config-file", "some/path/to/config/arduino-cli.yaml"}) + require.Equal(t, "some/path/to/config/arduino-cli.yaml", configFile) + + configFile = FindConfigFileInArgsFallbackOnEnv([]string{}) + require.Equal(t, defaultConfigFile, configFile) + + t.Setenv("ARDUINO_CONFIG_FILE", "some/path/to/config") + configFile = FindConfigFileInArgsFallbackOnEnv([]string{}) + require.Equal(t, "some/path/to/config", configFile) + + // when both env and flag are specified flag takes precedence + configFile = FindConfigFileInArgsFallbackOnEnv([]string{"--config-file", "flag/path"}) + require.Equal(t, "flag/path", configFile) +} diff --git a/executils/executils_windows.go b/internal/cli/configuration/daemon.go similarity index 73% rename from executils/executils_windows.go rename to internal/cli/configuration/daemon.go index bfb5fb1bdb3..9ae053c2aee 100644 --- a/executils/executils_windows.go +++ b/internal/cli/configuration/daemon.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,13 +13,11 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package executils +package configuration -import ( - "os/exec" - "syscall" -) - -func tellCommandNotToSpawnShell(oscmd *exec.Cmd) { - oscmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} +func (s *Settings) DaemonPort() string { + if port, ok, _ := s.GetStringOk("daemon.port"); ok { + return port + } + return s.Defaults.GetString("daemon.port") } diff --git a/internal/cli/configuration/defaults.go b/internal/cli/configuration/defaults.go new file mode 100644 index 00000000000..953bd4762f5 --- /dev/null +++ b/internal/cli/configuration/defaults.go @@ -0,0 +1,95 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +import ( + "os" + "time" +) + +// SetDefaults sets the default values for certain keys +func SetDefaults(settings *Settings) { + setKeyTypeSchema := func(k string, v any) { + settings.SetKeyTypeSchema(k, v) + settings.Defaults.SetKeyTypeSchema(k, v) + } + setDefaultValueAndKeyTypeSchema := func(k string, v any) { + setKeyTypeSchema(k, v) + settings.Defaults.Set(k, v) + } + + // logging + setDefaultValueAndKeyTypeSchema("logging.level", "info") + setDefaultValueAndKeyTypeSchema("logging.format", "text") + setKeyTypeSchema("logging.file", "") + + // Libraries + setDefaultValueAndKeyTypeSchema("library.enable_unsafe_install", false) + + // Boards Manager + setDefaultValueAndKeyTypeSchema("board_manager.additional_urls", []string{}) + + // arduino directories + setDefaultValueAndKeyTypeSchema("directories.data", getDefaultArduinoDataDir()) + setDefaultValueAndKeyTypeSchema("directories.downloads", "") + setDefaultValueAndKeyTypeSchema("directories.user", getDefaultUserDir()) + setKeyTypeSchema("directories.builtin.libraries", "") + + // Sketch compilation + setDefaultValueAndKeyTypeSchema("sketch.always_export_binaries", false) + setDefaultValueAndKeyTypeSchema("build_cache.ttl", (time.Hour * 24 * 30).String()) + setDefaultValueAndKeyTypeSchema("build_cache.compilations_before_purge", uint(10)) + setKeyTypeSchema("build_cache.path", "") + setKeyTypeSchema("build_cache.extra_paths", []string{}) + + // daemon settings + setDefaultValueAndKeyTypeSchema("daemon.port", "50051") + + // metrics settings + setDefaultValueAndKeyTypeSchema("metrics.enabled", true) + setDefaultValueAndKeyTypeSchema("metrics.addr", ":9090") + + // output settings + setDefaultValueAndKeyTypeSchema("output.no_color", false) + + // updater settings + setDefaultValueAndKeyTypeSchema("updater.enable_notification", true) + + // network settings + setKeyTypeSchema("network.proxy", "") + setKeyTypeSchema("network.user_agent_ext", "") + + // locale + setDefaultValueAndKeyTypeSchema("locale", "en") +} + +// InjectEnvVars change settings based on the environment variables values +func InjectEnvVars(settings *Settings) { + // Bind env vars + settings.InjectEnvVars(os.Environ(), "ARDUINO") + + // Bind env aliases to keep backward compatibility + setIfEnvExists := func(key, env string) { + if v, ok := os.LookupEnv(env); ok { + settings.SetFromCLIArgs(key, v) + } + } + setIfEnvExists("library.enable_unsafe_install", "ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL") + setIfEnvExists("directories.user", "ARDUINO_SKETCHBOOK_DIR") + setIfEnvExists("directories.downloads", "ARDUINO_DOWNLOADS_DIR") + setIfEnvExists("directories.data", "ARDUINO_DATA_DIR") + setIfEnvExists("sketch.always_export_binaries", "ARDUINO_SKETCH_ALWAYS_EXPORT_BINARIES") +} diff --git a/configuration/directories.go b/internal/cli/configuration/directories.go similarity index 50% rename from configuration/directories.go rename to internal/cli/configuration/directories.go index 9a69548ceef..a58aa21f885 100644 --- a/configuration/directories.go +++ b/internal/cli/configuration/directories.go @@ -17,24 +17,18 @@ package configuration import ( "github.com/arduino/go-paths-helper" - "github.com/spf13/viper" ) // HardwareDirectories returns all paths that may contains hardware packages. -func HardwareDirectories(settings *viper.Viper) paths.PathList { +func (settings *Settings) HardwareDirectories() paths.PathList { res := paths.PathList{} - if settings.IsSet("directories.Data") { - packagesDir := PackagesDir(Settings) - if packagesDir.IsDir() { - res.Add(packagesDir) - } + if packagesDir := settings.PackagesDir(); packagesDir.IsDir() { + res.Add(packagesDir) } - if settings.IsSet("directories.User") { - skDir := paths.New(settings.GetString("directories.User")) - hwDir := skDir.Join("hardware") - if hwDir.IsDir() { + if userDir, ok, _ := settings.GetStringOk("directories.user"); ok { + if hwDir := paths.New(userDir, "hardware"); hwDir.IsDir() { res.Add(hwDir) } } @@ -42,41 +36,53 @@ func HardwareDirectories(settings *viper.Viper) paths.PathList { return res } -// BuiltinToolsDirectories returns all paths that may contains bundled-tools. -func BuiltinToolsDirectories(settings *viper.Viper) paths.PathList { - return paths.NewPathList(settings.GetStringSlice("directories.builtin.Tools")...) -} - // IDEBuiltinLibrariesDir returns the IDE-bundled libraries path. Usually // this directory is present in the Arduino IDE. -func IDEBuiltinLibrariesDir(settings *viper.Viper) *paths.Path { - return paths.New(Settings.GetString("directories.builtin.Libraries")) +func (settings *Settings) IDEBuiltinLibrariesDir() *paths.Path { + if builtinLibsDir, ok, _ := settings.GetStringOk("directories.builtin.libraries"); ok { + return paths.New(builtinLibsDir) + } + return nil } // LibrariesDir returns the full path to the user directory containing // custom libraries -func LibrariesDir(settings *viper.Viper) *paths.Path { - return paths.New(settings.GetString("directories.User")).Join("libraries") +func (settings *Settings) LibrariesDir() *paths.Path { + return settings.UserDir().Join("libraries") +} + +// UserDir returns the full path to the user directory +func (settings *Settings) UserDir() *paths.Path { + if userDir, ok, _ := settings.GetStringOk("directories.user"); ok { + return paths.New(userDir) + } + return paths.New(settings.Defaults.GetString("directories.user")) } // PackagesDir returns the full path to the packages folder -func PackagesDir(settings *viper.Viper) *paths.Path { - return DataDir(settings).Join("packages") +func (settings *Settings) PackagesDir() *paths.Path { + return settings.DataDir().Join("packages") } // ProfilesCacheDir returns the full path to the profiles cache directory // (it contains all the platforms and libraries used to compile a sketch // using profiles) -func ProfilesCacheDir(settings *viper.Viper) *paths.Path { - return DataDir(settings).Join("internal") +func (settings *Settings) ProfilesCacheDir() *paths.Path { + return settings.DataDir().Join("internal") } // DataDir returns the full path to the data directory -func DataDir(settings *viper.Viper) *paths.Path { - return paths.New(settings.GetString("directories.Data")) +func (settings *Settings) DataDir() *paths.Path { + if dataDir, ok, _ := settings.GetStringOk("directories.data"); ok { + return paths.New(dataDir) + } + return paths.New(settings.Defaults.GetString("directories.data")) } // DownloadsDir returns the full path to the download cache directory -func DownloadsDir(settings *viper.Viper) *paths.Path { - return paths.New(settings.GetString("directories.Downloads")) +func (settings *Settings) DownloadsDir() *paths.Path { + if downloadDir, ok, _ := settings.GetStringOk("directories.downloads"); ok { + return paths.New(downloadDir) + } + return settings.DataDir().Join("staging") } diff --git a/executils/executils_darwin.go b/internal/cli/configuration/libraries.go similarity index 78% rename from executils/executils_darwin.go rename to internal/cli/configuration/libraries.go index 92e65d3d28b..6dc73b9b0d6 100644 --- a/executils/executils_darwin.go +++ b/internal/cli/configuration/libraries.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,9 +13,8 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package executils +package configuration -import "os/exec" - -func tellCommandNotToSpawnShell(_ *exec.Cmd) { +func (s *Settings) LibraryEnableUnsafeInstall() bool { + return s.GetBool("library.enable_unsafe_install") } diff --git a/executils/executils_freebsd.go b/internal/cli/configuration/locale.go similarity index 81% rename from executils/executils_freebsd.go rename to internal/cli/configuration/locale.go index 92e65d3d28b..e292ea8f170 100644 --- a/executils/executils_freebsd.go +++ b/internal/cli/configuration/locale.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,9 +13,8 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package executils +package configuration -import "os/exec" - -func tellCommandNotToSpawnShell(_ *exec.Cmd) { +func (s *Settings) Locale() string { + return s.Defaults.GetString("locale") } diff --git a/configuration/term.go b/internal/cli/configuration/logging.go similarity index 50% rename from configuration/term.go rename to internal/cli/configuration/logging.go index 5d83f50e7fa..73f1bacab35 100644 --- a/configuration/term.go +++ b/internal/cli/configuration/logging.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -15,14 +15,28 @@ package configuration -import ( - "os" +import "github.com/arduino/go-paths-helper" - "github.com/mattn/go-isatty" -) +func (s *Settings) LoggingLevel() string { + if l, ok, _ := s.GetStringOk("logging.level"); ok { + return l + } + return s.Defaults.GetString("logging.level") +} -// IsInteractive is set to true if the CLI is interactive (it can receive inputs from terminal/console) -var IsInteractive = isatty.IsTerminal(os.Stdin.Fd()) || isatty.IsCygwinTerminal(os.Stdin.Fd()) +func (s *Settings) LoggingFormat() string { + if l, ok, _ := s.GetStringOk("logging.format"); ok { + return l + } + return s.Defaults.GetString("logging.format") +} -// HasConsole is set to true if the CLI outputs to a terminal/console -var HasConsole = isatty.IsTerminal(os.Stdout.Fd()) || isatty.IsCygwinTerminal(os.Stdout.Fd()) +func (s *Settings) LoggingFile() *paths.Path { + if l, ok, _ := s.GetStringOk("logging.file"); ok && l != "" { + return paths.New(l) + } + if l, ok, _ := s.Defaults.GetStringOk("logging.file"); ok && l != "" { + return paths.New(l) + } + return nil +} diff --git a/internal/cli/configuration/network.go b/internal/cli/configuration/network.go new file mode 100644 index 00000000000..9ffcdf8bd25 --- /dev/null +++ b/internal/cli/configuration/network.go @@ -0,0 +1,109 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +import ( + "errors" + "fmt" + "net/http" + "net/url" + "os" + "runtime" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/version" + "go.bug.st/downloader/v2" +) + +// UserAgent returns the user agent (mainly used by HTTP clients) +func (settings *Settings) UserAgent() string { + subComponent := "" + if settings != nil { + subComponent = settings.GetString("network.user_agent_ext") + } + if subComponent != "" { + subComponent = " " + subComponent + } + + extendedUA := os.Getenv("ARDUINO_CLI_USER_AGENT_EXTENSION") + if extendedUA != "" { + extendedUA = " " + extendedUA + } + + return fmt.Sprintf("%s/%s%s (%s; %s; %s) Commit:%s%s", + version.VersionInfo.Application, + version.VersionInfo.VersionString, + subComponent, + runtime.GOARCH, runtime.GOOS, runtime.Version(), + version.VersionInfo.Commit, + extendedUA) +} + +// ExtraUserAgent returns the extended user-agent section provided via configuration settings +func (settings *Settings) ExtraUserAgent() string { + return settings.GetString("network.user_agent_ext") +} + +// NetworkProxy returns the proxy configuration (mainly used by HTTP clients) +func (settings *Settings) NetworkProxy() (*url.URL, error) { + if proxyConfig, ok, _ := settings.GetStringOk("network.proxy"); !ok { + return nil, nil + } else if proxy, err := url.Parse(proxyConfig); err != nil { + return nil, errors.New(i18n.Tr("Invalid network.proxy '%[1]s': %[2]s", proxyConfig, err)) + } else { + return proxy, nil + } +} + +// NewHttpClient returns a new http client for use in the arduino-cli +func (settings *Settings) NewHttpClient() (*http.Client, error) { + proxy, err := settings.NetworkProxy() + if err != nil { + return nil, err + } + return &http.Client{ + Transport: &httpClientRoundTripper{ + transport: &http.Transport{ + Proxy: http.ProxyURL(proxy), + }, + userAgent: settings.UserAgent(), + }, + }, nil +} + +type httpClientRoundTripper struct { + transport http.RoundTripper + userAgent string +} + +func (h *httpClientRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + req.Header.Add("User-Agent", h.userAgent) + return h.transport.RoundTrip(req) +} + +// DownloaderConfig returns the downloader configuration based on current settings. +func (settings *Settings) DownloaderConfig() (downloader.Config, error) { + httpClient, err := settings.NewHttpClient() + if err != nil { + return downloader.Config{}, &cmderrors.InvalidArgumentError{ + Message: i18n.Tr("Could not connect via HTTP"), + Cause: err} + } + return downloader.Config{ + HttpClient: *httpClient, + }, nil +} diff --git a/arduino/httpclient/httpclient_test.go b/internal/cli/configuration/network_test.go similarity index 77% rename from arduino/httpclient/httpclient_test.go rename to internal/cli/configuration/network_test.go index a2dbc61c291..6c8a7def80d 100644 --- a/arduino/httpclient/httpclient_test.go +++ b/internal/cli/configuration/network_test.go @@ -13,16 +13,16 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package httpclient +package configuration_test import ( "fmt" "io" "net/http" "net/http/httptest" - "net/url" "testing" + "github.com/arduino/arduino-cli/internal/cli/configuration" "github.com/stretchr/testify/require" ) @@ -32,9 +32,10 @@ func TestUserAgentHeader(t *testing.T) { })) defer ts.Close() - client := NewWithConfig(&Config{ - UserAgent: "test-user-agent", - }) + settings := configuration.NewSettings() + require.NoError(t, settings.Set("network.user_agent_ext", "test-user-agent")) + client, err := settings.NewHttpClient() + require.NoError(t, err) request, err := http.NewRequest("GET", ts.URL, nil) require.NoError(t, err) @@ -45,7 +46,8 @@ func TestUserAgentHeader(t *testing.T) { b, err := io.ReadAll(response.Body) require.NoError(t, err) - require.Equal(t, "test-user-agent", string(b)) + fmt.Println("RESPONSE:", string(b)) + require.Contains(t, string(b), "test-user-agent") } func TestProxy(t *testing.T) { @@ -54,13 +56,11 @@ func TestProxy(t *testing.T) { })) defer ts.Close() - proxyURL, err := url.Parse(ts.URL) + settings := configuration.NewSettings() + settings.Set("network.proxy", ts.URL) + client, err := settings.NewHttpClient() require.NoError(t, err) - client := NewWithConfig(&Config{ - Proxy: proxyURL, - }) - request, err := http.NewRequest("GET", "http://arduino.cc", nil) require.NoError(t, err) diff --git a/executils/executils_linux.go b/internal/cli/configuration/output.go similarity index 81% rename from executils/executils_linux.go rename to internal/cli/configuration/output.go index 92e65d3d28b..67ae5e72d99 100644 --- a/executils/executils_linux.go +++ b/internal/cli/configuration/output.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,9 +13,8 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package executils +package configuration -import "os/exec" - -func tellCommandNotToSpawnShell(_ *exec.Cmd) { +func (s *Settings) NoColor() bool { + return s.GetBool("output.no_color") } diff --git a/internal/cli/configuration/sketch.go b/internal/cli/configuration/sketch.go new file mode 100644 index 00000000000..27638b67df5 --- /dev/null +++ b/internal/cli/configuration/sketch.go @@ -0,0 +1,25 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +// SketchAlwaysExportBinaries returns true if the compile command should +// export binaries by default. +func (settings *Settings) SketchAlwaysExportBinaries() bool { + if res, ok, _ := settings.GetBoolOk("sketch.always_export_binaries"); ok { + return res + } + return settings.Defaults.GetBool("sketch.always_export_binaries") +} diff --git a/internal/cli/configuration/updater.go b/internal/cli/configuration/updater.go new file mode 100644 index 00000000000..3f553782254 --- /dev/null +++ b/internal/cli/configuration/updater.go @@ -0,0 +1,23 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +func (s *Settings) UpdaterEnableNotification() bool { + if en, ok, _ := s.GetBoolOk("updater.enable_notification"); ok { + return en + } + return s.GetBool("updater.enable_notification") +} diff --git a/internal/cli/core/core.go b/internal/cli/core/core.go index f040d3e2efc..c966db14e93 100644 --- a/internal/cli/core/core.go +++ b/internal/cli/core/core.go @@ -18,28 +18,27 @@ package core import ( "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand created a new `core` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { coreCommand := &cobra.Command{ Use: "core", - Short: tr("Arduino core operations."), - Long: tr("Arduino core operations."), + Short: i18n.Tr("Arduino core operations."), + Long: i18n.Tr("Arduino core operations."), Example: " " + os.Args[0] + " core update-index", } - coreCommand.AddCommand(initDownloadCommand()) - coreCommand.AddCommand(initInstallCommand()) - coreCommand.AddCommand(initListCommand()) - coreCommand.AddCommand(initUpdateIndexCommand()) - coreCommand.AddCommand(initUpgradeCommand()) - coreCommand.AddCommand(initUninstallCommand()) - coreCommand.AddCommand(initSearchCommand()) + coreCommand.AddCommand(initDownloadCommand(srv)) + coreCommand.AddCommand(initInstallCommand(srv)) + coreCommand.AddCommand(initListCommand(srv)) + coreCommand.AddCommand(initUpdateIndexCommand(srv)) + coreCommand.AddCommand(initUpgradeCommand(srv)) + coreCommand.AddCommand(initUninstallCommand(srv)) + coreCommand.AddCommand(initSearchCommand(srv)) return coreCommand } diff --git a/internal/cli/core/download.go b/internal/cli/core/download.go index daa87f04ef2..c4e7ee8732c 100644 --- a/internal/cli/core/download.go +++ b/internal/cli/core/download.go @@ -20,40 +20,43 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/core" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initDownloadCommand() *cobra.Command { +func initDownloadCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { downloadCommand := &cobra.Command{ - Use: fmt.Sprintf("download [%s:%s[@%s]]...", tr("PACKAGER"), tr("ARCH"), tr("VERSION")), - Short: tr("Downloads one or more cores and corresponding tool dependencies."), - Long: tr("Downloads one or more cores and corresponding tool dependencies."), + Use: fmt.Sprintf("download [%s:%s[@%s]]...", i18n.Tr("PACKAGER"), i18n.Tr("ARCH"), i18n.Tr("VERSION")), + Short: i18n.Tr("Downloads one or more cores and corresponding tool dependencies."), + Long: i18n.Tr("Downloads one or more cores and corresponding tool dependencies."), Example: "" + - " " + os.Args[0] + " core download arduino:samd # " + tr("download the latest version of Arduino SAMD core.") + "\n" + - " " + os.Args[0] + " core download arduino:samd@1.6.9 # " + tr("download a specific version (in this case 1.6.9)."), + " " + os.Args[0] + " core download arduino:samd # " + i18n.Tr("download the latest version of Arduino SAMD core.") + "\n" + + " " + os.Args[0] + " core download arduino:samd@1.6.9 # " + i18n.Tr("download a specific version (in this case 1.6.9)."), Args: cobra.MinimumNArgs(1), - Run: runDownloadCommand, + Run: func(cmd *cobra.Command, args []string) { + runDownloadCommand(cmd.Context(), srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstallableCores(), cobra.ShellCompDirectiveDefault + return arguments.GetInstallableCores(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } return downloadCommand } -func runDownloadCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runDownloadCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli core download`") - platformsRefs, err := arguments.ParseReferences(args) + platformsRefs, err := arguments.ParseReferences(ctx, srv, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } for i, platformRef := range platformsRefs { @@ -63,9 +66,9 @@ func runDownloadCommand(cmd *cobra.Command, args []string) { Architecture: platformRef.Architecture, Version: platformRef.Version, } - _, err := core.PlatformDownload(context.Background(), platformDownloadreq, feedback.ProgressBar()) - if err != nil { - feedback.Fatal(tr("Error downloading %[1]s: %[2]v", args[i], err), feedback.ErrNetwork) + stream := commands.PlatformDownloadStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + if err := srv.PlatformDownload(platformDownloadreq, stream); err != nil { + feedback.Fatal(i18n.Tr("Error downloading %[1]s: %[2]v", args[i], err), feedback.ErrNetwork) } } } diff --git a/internal/cli/core/install.go b/internal/cli/core/install.go index 8193a8b4344..8a0e7284d35 100644 --- a/internal/cli/core/install.go +++ b/internal/cli/core/install.go @@ -20,49 +20,50 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/core" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initInstallCommand() *cobra.Command { +func initInstallCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var noOverwrite bool var scriptFlags arguments.PrePostScriptsFlags installCommand := &cobra.Command{ - Use: fmt.Sprintf("install %s:%s[@%s]...", tr("PACKAGER"), tr("ARCH"), tr("VERSION")), - Short: tr("Installs one or more cores and corresponding tool dependencies."), - Long: tr("Installs one or more cores and corresponding tool dependencies."), - Example: " # " + tr("download the latest version of Arduino SAMD core.") + "\n" + + Use: fmt.Sprintf("install %s:%s[@%s]...", i18n.Tr("PACKAGER"), i18n.Tr("ARCH"), i18n.Tr("VERSION")), + Short: i18n.Tr("Installs one or more cores and corresponding tool dependencies."), + Long: i18n.Tr("Installs one or more cores and corresponding tool dependencies."), + Example: " # " + i18n.Tr("download the latest version of Arduino SAMD core.") + "\n" + " " + os.Args[0] + " core install arduino:samd\n\n" + - " # " + tr("download a specific version (in this case 1.6.9).") + "\n" + + " # " + i18n.Tr("download a specific version (in this case 1.6.9).") + "\n" + " " + os.Args[0] + " core install arduino:samd@1.6.9", Args: cobra.MinimumNArgs(1), PreRun: func(cmd *cobra.Command, args []string) { arguments.CheckFlagsConflicts(cmd, "run-post-install", "skip-post-install") }, Run: func(cmd *cobra.Command, args []string) { - runInstallCommand(args, scriptFlags, noOverwrite) + runInstallCommand(cmd.Context(), srv, args, scriptFlags, noOverwrite) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstallableCores(), cobra.ShellCompDirectiveDefault + return arguments.GetInstallableCores(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } scriptFlags.AddToCommand(installCommand) - installCommand.Flags().BoolVar(&noOverwrite, "no-overwrite", false, tr("Do not overwrite already installed platforms.")) + installCommand.Flags().BoolVar(&noOverwrite, "no-overwrite", false, i18n.Tr("Do not overwrite already installed platforms.")) return installCommand } -func runInstallCommand(args []string, scriptFlags arguments.PrePostScriptsFlags, noOverwrite bool) { - inst := instance.CreateAndInit() +func runInstallCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, scriptFlags arguments.PrePostScriptsFlags, noOverwrite bool) { logrus.Info("Executing `arduino-cli core install`") + inst := instance.CreateAndInit(ctx, srv) - platformsRefs, err := arguments.ParseReferences(args) + platformsRefs, err := arguments.ParseReferences(ctx, srv, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } for _, platformRef := range platformsRefs { @@ -75,9 +76,9 @@ func runInstallCommand(args []string, scriptFlags arguments.PrePostScriptsFlags, NoOverwrite: noOverwrite, SkipPreUninstall: scriptFlags.DetectSkipPreUninstallValue(), } - _, err := core.PlatformInstall(context.Background(), platformInstallRequest, feedback.ProgressBar(), feedback.TaskProgress()) - if err != nil { - feedback.Fatal(tr("Error during install: %v", err), feedback.ErrGeneric) + stream := commands.PlatformInstallStreamResponseToCallbackFunction(ctx, feedback.ProgressBar(), feedback.TaskProgress()) + if err := srv.PlatformInstall(platformInstallRequest, stream); err != nil { + feedback.Fatal(i18n.Tr("Error during install: %v", err), feedback.ErrGeneric) } } } diff --git a/internal/cli/core/list.go b/internal/cli/core/list.go index 4645295b063..24bae8a82ab 100644 --- a/internal/cli/core/list.go +++ b/internal/cli/core/list.go @@ -16,83 +16,111 @@ package core import ( - "fmt" + "context" "os" - "github.com/arduino/arduino-cli/commands/core" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initListCommand() *cobra.Command { +func initListCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var updatableOnly bool var all bool listCommand := &cobra.Command{ Use: "list", - Short: tr("Shows the list of installed platforms."), - Long: tr("Shows the list of installed platforms."), + Short: i18n.Tr("Shows the list of installed platforms."), + Long: i18n.Tr("Shows the list of installed platforms."), Example: " " + os.Args[0] + " core list", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { - runListCommand(args, all, updatableOnly) + runListCommand(cmd.Context(), srv, all, updatableOnly) }, } - listCommand.Flags().BoolVar(&updatableOnly, "updatable", false, tr("List updatable platforms.")) - listCommand.Flags().BoolVar(&all, "all", false, tr("If set return all installable and installed cores, including manually installed.")) + listCommand.Flags().BoolVar(&updatableOnly, "updatable", false, i18n.Tr("List updatable platforms.")) + listCommand.Flags().BoolVar(&all, "all", false, i18n.Tr("If set return all installable and installed cores, including manually installed.")) return listCommand } -func runListCommand(args []string, all bool, updatableOnly bool) { - inst := instance.CreateAndInit() +func runListCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, all bool, updatableOnly bool) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli core list`") - List(inst, all, updatableOnly) + List(ctx, srv, inst, all, updatableOnly) } // List gets and prints a list of installed platforms. -func List(inst *rpc.Instance, all bool, updatableOnly bool) { - platforms := GetList(inst, all, updatableOnly) - feedback.PrintResult(installedResult{platforms}) +func List(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance, all bool, updatableOnly bool) { + platforms := GetList(ctx, srv, inst, all, updatableOnly) + feedback.PrintResult(newCoreListResult(platforms, updatableOnly)) } // GetList returns a list of installed platforms. -func GetList(inst *rpc.Instance, all bool, updatableOnly bool) []*rpc.Platform { - platforms, err := core.PlatformList(&rpc.PlatformListRequest{ - Instance: inst, - UpdatableOnly: updatableOnly, - All: all, +func GetList(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance, all bool, updatableOnly bool) []*rpc.PlatformSummary { + platforms, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + ManuallyInstalled: true, }) if err != nil { - feedback.Fatal(tr("Error listing platforms: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error listing platforms: %v", err), feedback.ErrGeneric) } - return platforms.InstalledPlatforms + + // If both `all` and `updatableOnly` are set, `all` takes precedence. + if all { + return platforms.GetSearchOutput() + } + + result := []*rpc.PlatformSummary{} + for _, platform := range platforms.GetSearchOutput() { + if platform.GetInstalledVersion() == "" && !platform.GetMetadata().GetManuallyInstalled() { + continue + } + if updatableOnly && platform.GetInstalledVersion() == platform.GetLatestVersion() { + continue + } + result = append(result, platform) + } + return result } -// output from this command requires special formatting, let's create a dedicated -// feedback.Result implementation -type installedResult struct { - platforms []*rpc.Platform +func newCoreListResult(in []*rpc.PlatformSummary, updatableOnly bool) *coreListResult { + res := &coreListResult{updatableOnly: updatableOnly} + for _, platformSummary := range in { + res.Platforms = append(res.Platforms, result.NewPlatformSummary(platformSummary)) + } + return res } -func (ir installedResult) Data() interface{} { - return ir.platforms +type coreListResult struct { + Platforms []*result.PlatformSummary `json:"platforms"` + updatableOnly bool } -func (ir installedResult) String() string { - if len(ir.platforms) == 0 { - return tr("No platforms installed.") +// Data implements Result interface +func (ir coreListResult) Data() interface{} { + return ir +} + +// String implements Result interface +func (ir coreListResult) String() string { + if len(ir.Platforms) == 0 { + if ir.updatableOnly { + return i18n.Tr("All platforms are up to date.") + } + return i18n.Tr("No platforms installed.") } t := table.New() - t.SetHeader(tr("ID"), tr("Installed"), tr("Latest"), tr("Name")) - for _, p := range ir.platforms { - name := p.Name - if p.Deprecated { - name = fmt.Sprintf("[%s] %s", tr("DEPRECATED"), name) + t.SetHeader(i18n.Tr("ID"), i18n.Tr("Installed"), i18n.Tr("Latest"), i18n.Tr("Name")) + for _, platform := range ir.Platforms { + latestVersion := platform.LatestVersion.String() + if latestVersion == "" { + latestVersion = "n/a" } - t.AddRow(p.Id, p.Installed, p.Latest, name) + t.AddRow(platform.Id, platform.InstalledVersion, latestVersion, platform.GetPlatformName()) } return t.Render() diff --git a/internal/cli/core/search.go b/internal/cli/core/search.go index 0259d35bf44..590fce9e62d 100644 --- a/internal/cli/core/search.go +++ b/internal/cli/core/search.go @@ -19,148 +19,121 @@ import ( "context" "fmt" "os" - "path" "strings" "time" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/utils" "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/core" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -var ( - allVersions bool -) - -func initSearchCommand() *cobra.Command { +func initSearchCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { + var allVersions bool searchCommand := &cobra.Command{ - Use: fmt.Sprintf("search <%s...>", tr("keywords")), - Short: tr("Search for a core in Boards Manager."), - Long: tr("Search for a core in Boards Manager using the specified keywords."), + Use: fmt.Sprintf("search <%s...>", i18n.Tr("keywords")), + Short: i18n.Tr("Search for a core in Boards Manager."), + Long: i18n.Tr("Search for a core in Boards Manager using the specified keywords."), Example: " " + os.Args[0] + " core search MKRZero -a -v", Args: cobra.ArbitraryArgs, - Run: runSearchCommand, + Run: func(cmd *cobra.Command, args []string) { + runSearchCommand(cmd.Context(), srv, args, allVersions) + }, } - searchCommand.Flags().BoolVarP(&allVersions, "all", "a", false, tr("Show all available core versions.")) + searchCommand.Flags().BoolVarP(&allVersions, "all", "a", false, i18n.Tr("Show all available core versions.")) return searchCommand } // indexUpdateInterval specifies the time threshold over which indexes are updated -const indexUpdateInterval = "24h" +const indexUpdateInterval = 24 * time.Hour -func runSearchCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runSearchCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, allVersions bool) { + inst := instance.CreateAndInit(ctx, srv) - if indexesNeedUpdating(indexUpdateInterval) { - err := commands.UpdateIndex(context.Background(), &rpc.UpdateIndexRequest{Instance: inst}, feedback.ProgressBar()) - if err != nil { - feedback.FatalError(err, feedback.ErrGeneric) + stream, res := commands.UpdateIndexStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + err := srv.UpdateIndex( + &rpc.UpdateIndexRequest{Instance: inst, UpdateIfOlderThanSecs: int64(indexUpdateInterval.Seconds())}, + stream) + if err != nil { + feedback.FatalError(err, feedback.ErrGeneric) + } + for _, idxRes := range res().GetUpdatedIndexes() { + if idxRes.GetStatus() == rpc.IndexUpdateReport_STATUS_UPDATED { + // At least one index has been updated, reinitialize the instance + instance.Init(ctx, srv, inst) + break } - instance.Init(inst) } arguments := strings.ToLower(strings.Join(args, " ")) logrus.Infof("Executing `arduino-cli core search` with args: '%s'", arguments) - resp, err := core.PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: arguments, - AllVersions: allVersions, + resp, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: arguments, }) if err != nil { - feedback.Fatal(tr("Error searching for platforms: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error searching for platforms: %v", err), feedback.ErrGeneric) } coreslist := resp.GetSearchOutput() - feedback.PrintResult(searchResults{coreslist}) + feedback.PrintResult(newSearchResult(coreslist, allVersions)) } // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type searchResults struct { - platforms []*rpc.Platform + Platforms []*result.PlatformSummary `json:"platforms"` + allVersions bool +} + +func newSearchResult(in []*rpc.PlatformSummary, allVersions bool) *searchResults { + res := &searchResults{ + Platforms: make([]*result.PlatformSummary, len(in)), + allVersions: allVersions, + } + for i, platformSummary := range in { + res.Platforms[i] = result.NewPlatformSummary(platformSummary) + } + return res } func (sr searchResults) Data() interface{} { - return sr.platforms + return sr } func (sr searchResults) String() string { - if len(sr.platforms) > 0 { - t := table.New() - t.SetHeader(tr("ID"), tr("Version"), tr("Name")) - for _, item := range sr.platforms { - name := item.GetName() - if item.Deprecated { - name = fmt.Sprintf("[%s] %s", tr("DEPRECATED"), name) - } - t.AddRow(item.GetId(), item.GetLatest(), name) - } - return t.Render() + if len(sr.Platforms) == 0 { + return i18n.Tr("No platforms matching your search.") } - return tr("No platforms matching your search.") -} -// indexesNeedUpdating returns whether one or more index files need updating. -// A duration string must be provided to calculate the time threshold -// used to update the indexes, if the duration is not valid a default -// of 24 hours is used. -// Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". -func indexesNeedUpdating(duration string) bool { - indexpath := configuration.DataDir(configuration.Settings) + t := table.New() + t.SetHeader(i18n.Tr("ID"), i18n.Tr("Version"), i18n.Tr("Name")) - now := time.Now() - modTimeThreshold, err := time.ParseDuration(duration) - if err != nil { - feedback.Fatal(tr("Invalid timeout: %s", err), feedback.ErrBadArgument) - } - - urls := []string{globals.DefaultIndexURL} - urls = append(urls, configuration.Settings.GetStringSlice("board_manager.additional_urls")...) - for _, u := range urls { - URL, err := utils.URLParse(u) - if err != nil { - continue + addRow := func(platform *result.PlatformSummary, release *result.PlatformRelease) { + if release == nil { + t.AddRow(platform.Id, "n/a", platform.GetPlatformName()) + return } + t.AddRow(platform.Id, release.Version, release.FormatName()) + } - if URL.Scheme == "file" { - // No need to update local files + for _, platform := range sr.Platforms { + // When allVersions is not requested we only show the latest compatible version + if !sr.allVersions { + addRow(platform, platform.GetLatestRelease()) continue } - // should handle: - // - package_index.json - // - package_index.json.sig - // - package_index.json.gz - // - package_index.tar.bz2 - indexFileName := path.Base(URL.Path) - indexFileName = strings.TrimSuffix(indexFileName, ".tar.bz2") - indexFileName = strings.TrimSuffix(indexFileName, ".gz") - indexFileName = strings.TrimSuffix(indexFileName, ".sig") - indexFileName = strings.TrimSuffix(indexFileName, ".json") - // and obtain package_index.json as result - coreIndexPath := indexpath.Join(indexFileName + ".json") - if coreIndexPath.NotExist() { - return true - } - - info, err := coreIndexPath.Stat() - if err != nil { - return true - } - - if now.After(info.ModTime().Add(modTimeThreshold)) { - return true + for _, release := range platform.Releases.Values() { + addRow(platform, release) } } - return false + return t.Render() } diff --git a/internal/cli/core/uninstall.go b/internal/cli/core/uninstall.go index 10992ef9bdf..b939c5789e6 100644 --- a/internal/cli/core/uninstall.go +++ b/internal/cli/core/uninstall.go @@ -20,57 +20,59 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/core" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUninstallCommand() *cobra.Command { +func initUninstallCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var preUninstallFlags arguments.PrePostScriptsFlags uninstallCommand := &cobra.Command{ - Use: fmt.Sprintf("uninstall %s:%s ...", tr("PACKAGER"), tr("ARCH")), - Short: tr("Uninstalls one or more cores and corresponding tool dependencies if no longer used."), - Long: tr("Uninstalls one or more cores and corresponding tool dependencies if no longer used."), + Use: fmt.Sprintf("uninstall %s:%s ...", i18n.Tr("PACKAGER"), i18n.Tr("ARCH")), + Short: i18n.Tr("Uninstalls one or more cores and corresponding tool dependencies if no longer used."), + Long: i18n.Tr("Uninstalls one or more cores and corresponding tool dependencies if no longer used."), Example: " " + os.Args[0] + " core uninstall arduino:samd\n", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - runUninstallCommand(args, preUninstallFlags) + runUninstallCommand(cmd.Context(), srv, args, preUninstallFlags) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetUninstallableCores(), cobra.ShellCompDirectiveDefault + return arguments.GetUninstallableCores(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } preUninstallFlags.AddToCommand(uninstallCommand) return uninstallCommand } -func runUninstallCommand(args []string, preUninstallFlags arguments.PrePostScriptsFlags) { - inst := instance.CreateAndInit() +func runUninstallCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, preUninstallFlags arguments.PrePostScriptsFlags) { logrus.Info("Executing `arduino-cli core uninstall`") + inst := instance.CreateAndInit(ctx, srv) - platformsRefs, err := arguments.ParseReferences(args) + platformsRefs, err := arguments.ParseReferences(ctx, srv, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } for _, platformRef := range platformsRefs { if platformRef.Version != "" { - feedback.Fatal(tr("Invalid parameter %s: version not allowed", platformRef), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid parameter %s: version not allowed", platformRef), feedback.ErrBadArgument) } } for _, platformRef := range platformsRefs { - _, err := core.PlatformUninstall(context.Background(), &rpc.PlatformUninstallRequest{ + req := &rpc.PlatformUninstallRequest{ Instance: inst, PlatformPackage: platformRef.PackageName, Architecture: platformRef.Architecture, SkipPreUninstall: preUninstallFlags.DetectSkipPreUninstallValue(), - }, feedback.NewTaskProgressCB()) - if err != nil { - feedback.Fatal(tr("Error during uninstall: %v", err), feedback.ErrGeneric) + } + stream := commands.PlatformUninstallStreamResponseToCallbackFunction(ctx, feedback.NewTaskProgressCB()) + if err := srv.PlatformUninstall(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error during uninstall: %v", err), feedback.ErrGeneric) } } } diff --git a/internal/cli/core/update_index.go b/internal/cli/core/update_index.go index 548ff9113da..d18e006defb 100644 --- a/internal/cli/core/update_index.go +++ b/internal/cli/core/update_index.go @@ -21,34 +21,54 @@ import ( "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUpdateIndexCommand() *cobra.Command { +func initUpdateIndexCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { updateIndexCommand := &cobra.Command{ Use: "update-index", - Short: tr("Updates the index of cores."), - Long: tr("Updates the index of cores to the latest version."), + Short: i18n.Tr("Updates the index of cores."), + Long: i18n.Tr("Updates the index of cores to the latest version."), Example: " " + os.Args[0] + " core update-index", Args: cobra.NoArgs, - Run: runUpdateIndexCommand, + Run: func(cmd *cobra.Command, args []string) { + runUpdateIndexCommand(cmd.Context(), srv) + }, } return updateIndexCommand } -func runUpdateIndexCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runUpdateIndexCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { logrus.Info("Executing `arduino-cli core update-index`") - UpdateIndex(inst) + inst := instance.CreateAndInit(ctx, srv) + resp := UpdateIndex(ctx, srv, inst) + + feedback.PrintResult(&updateIndexResult{result.NewUpdateIndexResponse_ResultResult(resp)}) } // UpdateIndex updates the index of platforms. -func UpdateIndex(inst *rpc.Instance) { - err := commands.UpdateIndex(context.Background(), &rpc.UpdateIndexRequest{Instance: inst}, feedback.ProgressBar()) +func UpdateIndex(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance) *rpc.UpdateIndexResponse_Result { + stream, res := commands.UpdateIndexStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + err := srv.UpdateIndex(&rpc.UpdateIndexRequest{Instance: inst}, stream) if err != nil { feedback.FatalError(err, feedback.ErrGeneric) } + return res() +} + +type updateIndexResult struct { + *result.UpdateIndexResponse_ResultResult +} + +func (r *updateIndexResult) Data() interface{} { + return r +} + +func (r *updateIndexResult) String() string { + return "" } diff --git a/internal/cli/core/upgrade.go b/internal/cli/core/upgrade.go index f8484dc985b..ee65e47e806 100644 --- a/internal/cli/core/upgrade.go +++ b/internal/cli/core/upgrade.go @@ -21,82 +21,97 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/core" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUpgradeCommand() *cobra.Command { +func initUpgradeCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var postInstallFlags arguments.PrePostScriptsFlags upgradeCommand := &cobra.Command{ - Use: fmt.Sprintf("upgrade [%s:%s] ...", tr("PACKAGER"), tr("ARCH")), - Short: tr("Upgrades one or all installed platforms to the latest version."), - Long: tr("Upgrades one or all installed platforms to the latest version."), + Use: fmt.Sprintf("upgrade [%s:%s] ...", i18n.Tr("PACKAGER"), i18n.Tr("ARCH")), + Short: i18n.Tr("Upgrades one or all installed platforms to the latest version."), + Long: i18n.Tr("Upgrades one or all installed platforms to the latest version."), Example: "" + - " # " + tr("upgrade everything to the latest version") + "\n" + + " # " + i18n.Tr("upgrade everything to the latest version") + "\n" + " " + os.Args[0] + " core upgrade\n\n" + - " # " + tr("upgrade arduino:samd to the latest version") + "\n" + + " # " + i18n.Tr("upgrade arduino:samd to the latest version") + "\n" + " " + os.Args[0] + " core upgrade arduino:samd", Run: func(cmd *cobra.Command, args []string) { - runUpgradeCommand(args, postInstallFlags.DetectSkipPostInstallValue(), postInstallFlags.DetectSkipPreUninstallValue()) + runUpgradeCommand(cmd.Context(), srv, args, postInstallFlags.DetectSkipPostInstallValue(), postInstallFlags.DetectSkipPreUninstallValue()) }, } postInstallFlags.AddToCommand(upgradeCommand) return upgradeCommand } -func runUpgradeCommand(args []string, skipPostInstall bool, skipPreUninstall bool) { - inst := instance.CreateAndInit() +func runUpgradeCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, skipPostInstall bool, skipPreUninstall bool) { logrus.Info("Executing `arduino-cli core upgrade`") - Upgrade(inst, args, skipPostInstall, skipPreUninstall) + inst := instance.CreateAndInit(ctx, srv) + Upgrade(ctx, srv, inst, args, skipPostInstall, skipPreUninstall) } // Upgrade upgrades one or all installed platforms to the latest version. -func Upgrade(inst *rpc.Instance, args []string, skipPostInstall bool, skipPreUninstall bool) { +func Upgrade(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance, args []string, skipPostInstall bool, skipPreUninstall bool) { // if no platform was passed, upgrade allthethings if len(args) == 0 { - targets, err := core.PlatformList(&rpc.PlatformListRequest{ - Instance: inst, - UpdatableOnly: true, + platforms, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, }) if err != nil { - feedback.Fatal(tr("Error retrieving core list: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error retrieving core list: %v", err), feedback.ErrGeneric) } - if len(targets.InstalledPlatforms) == 0 { - feedback.Print(tr("All the cores are already at the latest version")) + targets := []*rpc.Platform{} + for _, platform := range platforms.GetSearchOutput() { + if platform.GetInstalledVersion() == "" { + continue + } + // if it's not updatable, skip it + latestRelease := platform.GetLatestRelease() + if latestRelease != nil && platform.GetInstalledVersion() != latestRelease.GetVersion() { + targets = append(targets, &rpc.Platform{ + Metadata: platform.GetMetadata(), + Release: latestRelease, + }) + } + } + + if len(targets) == 0 { + feedback.Print(i18n.Tr("All the cores are already at the latest version")) return } - for _, t := range targets.InstalledPlatforms { - args = append(args, t.Id) + for _, t := range targets { + args = append(args, t.GetMetadata().GetId()) } } - warningMissingIndex := func(response *rpc.PlatformUpgradeResponse) { - if response == nil || response.Platform == nil { + warningMissingIndex := func(platform *rpc.Platform) { + if platform == nil { return } - if !response.Platform.Indexed { - feedback.Warning(tr("missing package index for %s, future updates cannot be guaranteed", response.Platform.Id)) + if !platform.GetMetadata().GetIndexed() { + feedback.Warning(i18n.Tr("missing package index for %s, future updates cannot be guaranteed", platform.GetMetadata().GetId())) } } // proceed upgrading, if anything is upgradable - platformsRefs, err := arguments.ParseReferences(args) + platformsRefs, err := arguments.ParseReferences(ctx, srv, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } hasBadArguments := false for i, platformRef := range platformsRefs { if platformRef.Version != "" { - feedback.Warning(tr("Invalid item %s", args[i])) + feedback.Warning(i18n.Tr("Invalid item %s", args[i])) hasBadArguments = true continue } @@ -108,27 +123,28 @@ func Upgrade(inst *rpc.Instance, args []string, skipPostInstall bool, skipPreUni SkipPostInstall: skipPostInstall, SkipPreUninstall: skipPreUninstall, } - response, err := core.PlatformUpgrade(context.Background(), r, feedback.ProgressBar(), feedback.TaskProgress()) - warningMissingIndex(response) + stream, respCB := commands.PlatformUpgradeStreamResponseToCallbackFunction(ctx, feedback.ProgressBar(), feedback.TaskProgress()) + err := srv.PlatformUpgrade(r, stream) + warningMissingIndex(respCB().GetPlatform()) if err != nil { - var alreadyAtLatestVersionErr *arduino.PlatformAlreadyAtTheLatestVersionError + var alreadyAtLatestVersionErr *cmderrors.PlatformAlreadyAtTheLatestVersionError if errors.As(err, &alreadyAtLatestVersionErr) { feedback.Warning(err.Error()) continue } - feedback.Fatal(tr("Error during upgrade: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error during upgrade: %v", err), feedback.ErrGeneric) } } if hasBadArguments { - feedback.Fatal(tr("Some upgrades failed, please check the output for details."), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Some upgrades failed, please check the output for details."), feedback.ErrBadArgument) } feedback.PrintResult(&platformUpgradeResult{}) } -// This is needed so we can print warning messages in case users use --format json +// This is needed so we can print warning messages in case users use --json type platformUpgradeResult struct{} // Data implements feedback.Result. diff --git a/internal/cli/daemon/daemon.go b/internal/cli/daemon/daemon.go index 5024f4255d0..3139a66bdde 100644 --- a/internal/cli/daemon/daemon.go +++ b/internal/cli/daemon/daemon.go @@ -21,16 +21,13 @@ import ( "fmt" "net" "os" + "path/filepath" "strings" "syscall" - "github.com/arduino/arduino-cli/commands/daemon" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" - srv_commands "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - srv_settings "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" - "github.com/arduino/arduino-cli/version" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -46,35 +43,59 @@ var ( ) // NewCommand created a new `daemon` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer, settings *rpc.Configuration) *cobra.Command { + var daemonPort string daemonCommand := &cobra.Command{ Use: "daemon", - Short: tr("Run as a daemon on port: %s", configuration.Settings.GetString("daemon.port")), - Long: tr("Running as a daemon the initialization of cores and libraries is done only once."), + Short: i18n.Tr("Run the Arduino CLI as a gRPC daemon."), Example: " " + os.Args[0] + " daemon", Args: cobra.NoArgs, - Run: runDaemonCommand, + PreRun: func(cmd *cobra.Command, args []string) { + // Bundled libraries support is enabled by default when running as a daemon + if settings.GetDirectories().GetBuiltin().GetLibraries() == "" { + defaultBuiltinLibDir := filepath.Join(settings.GetDirectories().GetData(), "libraries") + _, err := srv.SettingsSetValue(cmd.Context(), &rpc.SettingsSetValueRequest{ + Key: "directories.builtin.libraries", + ValueFormat: "cli", + EncodedValue: defaultBuiltinLibDir, + }) + if err != nil { + // Should never happen... + panic("Failed to set default value for directories.builtin.libraries: " + err.Error()) + } + } + }, + Run: func(cmd *cobra.Command, args []string) { + runDaemonCommand(srv, daemonPort) + }, } - daemonCommand.PersistentFlags().String("port", "", tr("The TCP port the daemon will listen to")) - configuration.Settings.BindPFlag("daemon.port", daemonCommand.PersistentFlags().Lookup("port")) - daemonCommand.Flags().BoolVar(&daemonize, "daemonize", false, tr("Do not terminate daemon process if the parent process dies")) - daemonCommand.Flags().BoolVar(&debug, "debug", false, tr("Enable debug logging of gRPC calls")) - daemonCommand.Flags().StringVar(&debugFile, "debug-file", "", tr("Append debug logging to the specified file")) - daemonCommand.Flags().StringSliceVar(&debugFilters, "debug-filter", []string{}, tr("Display only the provided gRPC calls")) + defaultDaemonPort := settings.GetDaemon().GetPort() + + daemonCommand.Flags().StringVar(&daemonPort, + "port", defaultDaemonPort, + i18n.Tr("The TCP port the daemon will listen to")) + daemonCommand.Flags().BoolVar(&daemonize, + "daemonize", false, + i18n.Tr("Do not terminate daemon process if the parent process dies")) + daemonCommand.Flags().BoolVar(&debug, + "debug", false, + i18n.Tr("Enable debug logging of gRPC calls")) + daemonCommand.Flags().StringVar(&debugFile, + "debug-file", "", + i18n.Tr("Append debug logging to the specified file")) + daemonCommand.Flags().StringSliceVar(&debugFilters, + "debug-filter", []string{}, + i18n.Tr("Display only the provided gRPC calls")) return daemonCommand } -func runDaemonCommand(cmd *cobra.Command, args []string) { +func runDaemonCommand(srv rpc.ArduinoCoreServiceServer, daemonPort string) { logrus.Info("Executing `arduino-cli daemon`") - // Bundled libraries support is enabled by default when running as a daemon - configuration.Settings.SetDefault("directories.builtin.Libraries", configuration.GetDefaultBuiltinLibrariesDir()) - - port := configuration.Settings.GetString("daemon.port") gRPCOptions := []grpc.ServerOption{} if debugFile != "" { if !debug { - feedback.Fatal(tr("The flag --debug-file must be used with --debug."), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("The flag --debug-file must be used with --debug."), feedback.ErrBadArgument) } } if debug { @@ -82,13 +103,13 @@ func runDaemonCommand(cmd *cobra.Command, args []string) { outFile := paths.New(debugFile) f, err := outFile.Append() if err != nil { - feedback.Fatal(tr("Error opening debug logging file: %s", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error opening debug logging file: %s", err), feedback.ErrGeneric) } defer f.Close() debugStdOut = f } else { if out, _, err := feedback.DirectStreams(); err != nil { - feedback.Fatal(tr("Can't write debug log: %s", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Can't write debug log: %s", err), feedback.ErrBadArgument) } else { debugStdOut = out } @@ -99,64 +120,57 @@ func runDaemonCommand(cmd *cobra.Command, args []string) { ) } s := grpc.NewServer(gRPCOptions...) - // Set specific user-agent for the daemon - configuration.Settings.Set("network.user_agent_ext", "daemon") // register the commands service - srv_commands.RegisterArduinoCoreServiceServer(s, &daemon.ArduinoCoreServerImpl{ - VersionString: version.VersionInfo.VersionString, - }) - - // Register the settings service - srv_settings.RegisterSettingsServiceServer(s, &daemon.SettingsService{}) + rpc.RegisterArduinoCoreServiceServer(s, srv) if !daemonize { // When parent process ends terminate also the daemon go feedback.ExitWhenParentProcessEnds() } - ip := "127.0.0.1" - lis, err := net.Listen("tcp", fmt.Sprintf("%s:%s", ip, port)) + daemonIP := "127.0.0.1" + lis, err := net.Listen("tcp", fmt.Sprintf("%s:%s", daemonIP, daemonPort)) if err != nil { // Invalid port, such as "Foo" var dnsError *net.DNSError if errors.As(err, &dnsError) { - feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. %[2]s is unknown name.", port, dnsError.Name), feedback.ErrCoreConfig) + feedback.Fatal(i18n.Tr("Failed to listen on TCP port: %[1]s. %[2]s is unknown name.", daemonPort, dnsError.Name), feedback.ErrBadTCPPortArgument) } // Invalid port number, such as -1 var addrError *net.AddrError if errors.As(err, &addrError) { - feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. %[2]s is an invalid port.", port, addrError.Addr), feedback.ErrCoreConfig) + feedback.Fatal(i18n.Tr("Failed to listen on TCP port: %[1]s. %[2]s is an invalid port.", daemonPort, addrError.Addr), feedback.ErrBadTCPPortArgument) } // Port is already in use var syscallErr *os.SyscallError if errors.As(err, &syscallErr) && errors.Is(syscallErr.Err, syscall.EADDRINUSE) { - feedback.Fatal(tr("Failed to listen on TCP port: %s. Address already in use.", port), feedback.ErrNetwork) + feedback.Fatal(i18n.Tr("Failed to listen on TCP port: %s. Address already in use.", daemonPort), feedback.ErrFailedToListenToTCPPort) } - feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v", port, err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v", daemonPort, err), feedback.ErrFailedToListenToTCPPort) } - // We need to parse the port used only if the user let - // us choose it randomly, in all other cases we already - // know which is used. - if port == "0" { + // We need to retrieve the port used only if the user did not specify it + // and let the OS choose it randomly, in all other cases we already know + // which port is used. + if daemonPort == "0" { address := lis.Addr() split := strings.Split(address.String(), ":") - if len(split) == 0 { - feedback.Fatal(tr("Invalid TCP address: port is missing"), feedback.ErrBadArgument) + if len(split) <= 1 { + feedback.Fatal(i18n.Tr("Invalid TCP address: port is missing"), feedback.ErrBadTCPPortArgument) } - port = split[len(split)-1] + daemonPort = split[1] } feedback.PrintResult(daemonResult{ - IP: ip, - Port: port, + IP: daemonIP, + Port: daemonPort, }) if err := s.Serve(lis); err != nil { - logrus.Fatalf("Failed to serve: %v", err) + feedback.Fatal(fmt.Sprintf("Failed to serve: %v", err), feedback.ErrFailedToListenToTCPPort) } } @@ -171,5 +185,5 @@ func (r daemonResult) Data() interface{} { func (r daemonResult) String() string { j, _ := json.Marshal(r) - return fmt.Sprintln(tr("Daemon is now listening on %s:%s", r.IP, r.Port)) + fmt.Sprintln(string(j)) + return fmt.Sprintln(i18n.Tr("Daemon is now listening on %s:%s", r.IP, r.Port)) + fmt.Sprintln(string(j)) } diff --git a/internal/cli/debug/debug.go b/internal/cli/debug/debug.go index 69d9ddd716c..03c8dc8cfcb 100644 --- a/internal/cli/debug/debug.go +++ b/internal/cli/debug/debug.go @@ -18,55 +18,60 @@ package debug import ( "context" "encoding/json" + "errors" "os" "os/signal" - "github.com/arduino/arduino-cli/commands/debug" - "github.com/arduino/arduino-cli/commands/sketch" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/fatih/color" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -var ( - fqbnArg arguments.Fqbn - portArgs arguments.Port - interpreter string - importDir string - printInfo bool - programmer arguments.Programmer - tr = i18n.Tr -) - // NewCommand created a new `upload` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { + var ( + fqbnArg arguments.Fqbn + portArgs arguments.Port + profileArg arguments.Profile + interpreter string + importDir string + printInfo bool + programmer arguments.Programmer + ) + debugCommand := &cobra.Command{ Use: "debug", - Short: tr("Debug Arduino sketches."), - Long: tr("Debug Arduino sketches. (this command opens an interactive gdb session)"), + Short: i18n.Tr("Debug Arduino sketches."), + Long: i18n.Tr("Debug Arduino sketches. (this command opens an interactive gdb session)"), Example: " " + os.Args[0] + " debug -b arduino:samd:mkr1000 -P atmel_ice /home/user/Arduino/MySketch", Args: cobra.MaximumNArgs(1), - Run: runDebugCommand, + Run: func(cmd *cobra.Command, args []string) { + runDebugCommand(cmd.Context(), srv, args, &portArgs, &fqbnArg, interpreter, importDir, &programmer, printInfo, &profileArg) + }, } - fqbnArg.AddToCommand(debugCommand) - portArgs.AddToCommand(debugCommand) - programmer.AddToCommand(debugCommand) - debugCommand.Flags().StringVar(&interpreter, "interpreter", "console", tr("Debug interpreter e.g.: %s", "console, mi, mi1, mi2, mi3")) - debugCommand.Flags().StringVarP(&importDir, "input-dir", "", "", tr("Directory containing binaries for debug.")) - debugCommand.Flags().BoolVarP(&printInfo, "info", "I", false, tr("Show metadata about the debug session instead of starting the debugger.")) + debugCommand.AddCommand(newDebugCheckCommand(srv)) + fqbnArg.AddToCommand(debugCommand, srv) + portArgs.AddToCommand(debugCommand, srv) + programmer.AddToCommand(debugCommand, srv) + profileArg.AddToCommand(debugCommand, srv) + debugCommand.Flags().StringVar(&interpreter, "interpreter", "console", i18n.Tr("Debug interpreter e.g.: %s", "console, mi, mi1, mi2, mi3")) + debugCommand.Flags().StringVarP(&importDir, "input-dir", "", "", i18n.Tr("Directory containing binaries for debug.")) + debugCommand.Flags().BoolVarP(&printInfo, "info", "I", false, i18n.Tr("Show metadata about the debug session instead of starting the debugger.")) return debugCommand } -func runDebugCommand(command *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runDebugCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, portArgs *arguments.Port, fqbnArg *arguments.Fqbn, + interpreter string, importDir string, programmer *arguments.Programmer, printInfo bool, profileArg *arguments.Profile) { logrus.Info("Executing `arduino-cli debug`") path := "" @@ -75,25 +80,54 @@ func runDebugCommand(command *cobra.Command, args []string) { } sketchPath := arguments.InitSketchPath(path) - sk, err := sketch.LoadSketch(context.Background(), &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) if err != nil { feedback.FatalError(err, feedback.ErrGeneric) } - fqbn, port := arguments.CalculateFQBNAndPort(&portArgs, &fqbnArg, instance, sk.GetDefaultFqbn(), sk.GetDefaultPort(), sk.GetDefaultProtocol()) + sk := resp.GetSketch() + feedback.WarnAboutDeprecatedFiles(sk) + + var inst *rpc.Instance + var profile *rpc.SketchProfile + + if profileArg.Get() == "" { + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, sk.GetDefaultProfile().GetName(), sketchPath) + } else { + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, profileArg.Get(), sketchPath) + } + + if fqbnArg.String() == "" { + fqbnArg.Set(profile.GetFqbn()) + } + + fqbn, port := arguments.CalculateFQBNAndPort(ctx, portArgs, fqbnArg, inst, srv, sk.GetDefaultFqbn(), sk.GetDefaultPort(), sk.GetDefaultProtocol()) + + prog := profile.GetProgrammer() + if prog == "" || programmer.GetProgrammer() != "" { + prog = programmer.String(ctx, inst, srv, fqbn) + } + if prog == "" { + prog = sk.GetDefaultProgrammer() + } + debugConfigRequested := &rpc.GetDebugConfigRequest{ - Instance: instance, + Instance: inst, Fqbn: fqbn, SketchPath: sketchPath.String(), Port: port, Interpreter: interpreter, ImportDir: importDir, - Programmer: programmer.String(), + Programmer: prog, } if printInfo { - if res, err := debug.GetDebugConfig(context.Background(), debugConfigRequested); err != nil { - feedback.Fatal(tr("Error getting Debug info: %v", err), feedback.ErrBadArgument) + if res, err := commands.GetDebugConfig(ctx, debugConfigRequested); err != nil { + errcode := feedback.ErrBadArgument + if errors.Is(err, &cmderrors.MissingProgrammerError{}) { + errcode = feedback.ErrMissingProgrammer + } + feedback.Fatal(i18n.Tr("Error getting Debug info: %v", err), errcode) } else { feedback.PrintResult(newDebugInfoResult(res)) } @@ -108,24 +142,29 @@ func runDebugCommand(command *cobra.Command, args []string) { if err != nil { feedback.FatalError(err, feedback.ErrBadArgument) } - if _, err := debug.Debug(context.Background(), debugConfigRequested, in, out, ctrlc); err != nil { - feedback.Fatal(tr("Error during Debug: %v", err), feedback.ErrGeneric) + if _, err := commands.Debug(ctx, debugConfigRequested, in, out, ctrlc); err != nil { + errcode := feedback.ErrGeneric + if errors.Is(err, &cmderrors.MissingProgrammerError{}) { + errcode = feedback.ErrMissingProgrammer + } + feedback.Fatal(i18n.Tr("Error during Debug: %v", err), errcode) } } } type debugInfoResult struct { - Executable string `json:"executable,omitempty"` - Toolchain string `json:"toolchain,omitempty"` - ToolchainPath string `json:"toolchain_path,omitempty"` - ToolchainPrefix string `json:"toolchain_prefix,omitempty"` - ToolchainConfig any `json:"toolchain_configuration,omitempty"` - Server string `json:"server,omitempty"` - ServerPath string `json:"server_path,omitempty"` - ServerConfig any `json:"server_configuration,omitempty"` - SvdFile string `json:"svd_file,omitempty"` - CortexDebugCustomConfig any `json:"cortex-debug_custom_configuration,omitempty"` + Executable string `json:"executable,omitempty"` + Toolchain string `json:"toolchain,omitempty"` + ToolchainPath string `json:"toolchain_path,omitempty"` + ToolchainPrefix string `json:"toolchain_prefix,omitempty"` + ToolchainConfig any `json:"toolchain_configuration,omitempty"` + Server string `json:"server,omitempty"` + ServerPath string `json:"server_path,omitempty"` + ServerConfig any `json:"server_configuration,omitempty"` + SvdFile string `json:"svd_file,omitempty"` + CustomConfigs map[string]any `json:"custom_configs,omitempty"` + Programmer string `json:"programmer"` } type openOcdServerConfigResult struct { @@ -137,35 +176,37 @@ type openOcdServerConfigResult struct { func newDebugInfoResult(info *rpc.GetDebugConfigResponse) *debugInfoResult { var toolchainConfig interface{} var serverConfig interface{} - switch info.Server { + switch info.GetServer() { case "openocd": var openocdConf rpc.DebugOpenOCDServerConfiguration if err := info.GetServerConfiguration().UnmarshalTo(&openocdConf); err != nil { - feedback.Fatal(tr("Error during Debug: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error during Debug: %v", err), feedback.ErrGeneric) } serverConfig = &openOcdServerConfigResult{ - Path: openocdConf.Path, - ScriptsDir: openocdConf.ScriptsDir, - Scripts: openocdConf.Scripts, + Path: openocdConf.GetPath(), + ScriptsDir: openocdConf.GetScriptsDir(), + Scripts: openocdConf.GetScripts(), } } - var cortexDebugCustomConfig any - if info.CortexDebugCustomJson != "" { - if err := json.Unmarshal([]byte(info.CortexDebugCustomJson), &cortexDebugCustomConfig); err != nil { - feedback.Fatal(tr("Error during Debug: %v", err), feedback.ErrGeneric) + customConfigs := map[string]any{} + for id, configJson := range info.GetCustomConfigs() { + var config any + if err := json.Unmarshal([]byte(configJson), &config); err == nil { + customConfigs[id] = config } } return &debugInfoResult{ - Executable: info.Executable, - Toolchain: info.Toolchain, - ToolchainPath: info.ToolchainPath, - ToolchainPrefix: info.ToolchainPrefix, - ToolchainConfig: toolchainConfig, - Server: info.Server, - ServerPath: info.ServerPath, - ServerConfig: serverConfig, - SvdFile: info.SvdFile, - CortexDebugCustomConfig: cortexDebugCustomConfig, + Executable: info.GetExecutable(), + Toolchain: info.GetToolchain(), + ToolchainPath: info.GetToolchainPath(), + ToolchainPrefix: info.GetToolchainPrefix(), + ToolchainConfig: toolchainConfig, + Server: info.GetServer(), + ServerPath: info.GetServerPath(), + ServerConfig: serverConfig, + SvdFile: info.GetSvdFile(), + CustomConfigs: customConfigs, + Programmer: info.GetProgrammer(), } } @@ -177,24 +218,24 @@ func (r *debugInfoResult) String() string { t := table.New() green := color.New(color.FgHiGreen) dimGreen := color.New(color.FgGreen) - t.AddRow(tr("Executable to debug"), table.NewCell(r.Executable, green)) - t.AddRow(tr("Toolchain type"), table.NewCell(r.Toolchain, green)) - t.AddRow(tr("Toolchain path"), table.NewCell(r.ToolchainPath, dimGreen)) - t.AddRow(tr("Toolchain prefix"), table.NewCell(r.ToolchainPrefix, dimGreen)) + t.AddRow(i18n.Tr("Executable to debug"), table.NewCell(r.Executable, green)) + t.AddRow(i18n.Tr("Toolchain type"), table.NewCell(r.Toolchain, green)) + t.AddRow(i18n.Tr("Toolchain path"), table.NewCell(r.ToolchainPath, dimGreen)) + t.AddRow(i18n.Tr("Toolchain prefix"), table.NewCell(r.ToolchainPrefix, dimGreen)) if r.SvdFile != "" { - t.AddRow(tr("SVD file path"), table.NewCell(r.SvdFile, dimGreen)) + t.AddRow(i18n.Tr("SVD file path"), table.NewCell(r.SvdFile, dimGreen)) } switch r.Toolchain { case "gcc": // no options available at the moment... default: } - t.AddRow(tr("Server type"), table.NewCell(r.Server, green)) - t.AddRow(tr("Server path"), table.NewCell(r.ServerPath, dimGreen)) + t.AddRow(i18n.Tr("Server type"), table.NewCell(r.Server, green)) + t.AddRow(i18n.Tr("Server path"), table.NewCell(r.ServerPath, dimGreen)) switch r.Server { case "openocd": - t.AddRow(tr("Configuration options for %s", r.Server)) + t.AddRow(i18n.Tr("Configuration options for %s", r.Server)) openocdConf := r.ServerConfig.(*openOcdServerConfigResult) if openocdConf.Path != "" { t.AddRow(" - Path", table.NewCell(openocdConf.Path, dimGreen)) @@ -207,10 +248,12 @@ func (r *debugInfoResult) String() string { } default: } - if r.CortexDebugCustomConfig != nil { - t.AddRow(tr("Custom configuration for cortex-debug IDE plugin:")) - data, _ := json.MarshalIndent(r.CortexDebugCustomConfig, " ", " ") - return t.Render() + " " + string(data) + if custom := r.CustomConfigs; custom != nil { + for id, config := range custom { + configJson, _ := json.MarshalIndent(config, "", " ") + t.AddRow(i18n.Tr("Custom configuration for %s:", id)) + return t.Render() + " " + string(configJson) + } } return t.Render() } diff --git a/internal/cli/debug/debug_check.go b/internal/cli/debug/debug_check.go new file mode 100644 index 00000000000..cb749a2da0e --- /dev/null +++ b/internal/cli/debug/debug_check.go @@ -0,0 +1,90 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package debug + +import ( + "context" + "os" + + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/internal/cli/arguments" + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" +) + +func newDebugCheckCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { + var ( + fqbnArg arguments.Fqbn + portArgs arguments.Port + interpreter string + programmer arguments.Programmer + ) + debugCheckCommand := &cobra.Command{ + Use: "check", + Short: i18n.Tr("Check if the given board/programmer combination supports debugging."), + Example: " " + os.Args[0] + " debug check -b arduino:samd:mkr1000 -P atmel_ice", + Run: func(cmd *cobra.Command, args []string) { + runDebugCheckCommand(cmd.Context(), srv, &portArgs, &fqbnArg, interpreter, &programmer) + }, + } + fqbnArg.AddToCommand(debugCheckCommand, srv) + portArgs.AddToCommand(debugCheckCommand, srv) + programmer.AddToCommand(debugCheckCommand, srv) + debugCheckCommand.Flags().StringVar(&interpreter, "interpreter", "console", i18n.Tr("Debug interpreter e.g.: %s", "console, mi, mi1, mi2, mi3")) + return debugCheckCommand +} + +func runDebugCheckCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, portArgs *arguments.Port, fqbnArg *arguments.Fqbn, interpreter string, programmerArg *arguments.Programmer) { + instance := instance.CreateAndInit(ctx, srv) + logrus.Info("Executing `arduino-cli debug`") + + port, err := portArgs.GetPort(ctx, instance, srv, "", "") + if err != nil { + feedback.FatalError(err, feedback.ErrBadArgument) + } + fqbn := fqbnArg.String() + resp, err := commands.IsDebugSupported(ctx, &rpc.IsDebugSupportedRequest{ + Instance: instance, + Fqbn: fqbn, + Port: port, + Interpreter: interpreter, + Programmer: programmerArg.String(ctx, instance, srv, fqbn), + }) + if err != nil { + feedback.FatalError(err, feedback.ErrGeneric) + } + feedback.PrintResult(&debugCheckResult{result.NewIsDebugSupportedResponse(resp)}) +} + +type debugCheckResult struct { + Result *result.IsDebugSupportedResponse +} + +func (d *debugCheckResult) Data() interface{} { + return d.Result +} + +func (d *debugCheckResult) String() string { + if d.Result.DebuggingSupported { + return i18n.Tr("The given board/programmer configuration supports debugging.") + } + return i18n.Tr("The given board/programmer configuration does NOT support debugging.") +} diff --git a/internal/cli/feedback/errorcodes.go b/internal/cli/feedback/errorcodes.go index 1e1a0edf19e..0f92ee07c73 100644 --- a/internal/cli/feedback/errorcodes.go +++ b/internal/cli/feedback/errorcodes.go @@ -42,4 +42,18 @@ const ( // ErrBadArgument is returned when the arguments are not valid (7) ErrBadArgument + + // ErrFailedToListenToTCPPort is returned if the CLI failed to open a TCP port + // to listen for incoming connections (8) + ErrFailedToListenToTCPPort + + // ErrBadTCPPortArgument is returned if the TCP port argument is not valid (9) + ErrBadTCPPortArgument + + // ErrInitializingInventory is returned when the inventory cannot be initialized, + // usually depends on a wrong configuration of the data dir (10) + ErrInitializingInventory + + // ErrMissingProgrammer is returned when the programmer argument is missing (11) + ErrMissingProgrammer ) diff --git a/internal/cli/feedback/feedback.go b/internal/cli/feedback/feedback.go index 17383e1ba3a..c665f35a0dd 100644 --- a/internal/cli/feedback/feedback.go +++ b/internal/cli/feedback/feedback.go @@ -24,9 +24,8 @@ import ( "io" "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/sirupsen/logrus" - "gopkg.in/yaml.v3" ) // OutputFormat is an output format @@ -39,14 +38,11 @@ const ( JSON // MinifiedJSON format MinifiedJSON - // YAML format - YAML ) var formats = map[string]OutputFormat{ "json": JSON, "jsonmini": MinifiedJSON, - "yaml": YAML, "text": Text, } @@ -109,8 +105,6 @@ type ErrorResult interface { ErrorString() string } -var tr = i18n.Tr - // SetOut can be used to change the out writer at runtime func SetOut(out io.Writer) { if formatSelected { @@ -204,8 +198,6 @@ func Fatal(errorMsg string, exitCode ExitCode) { d, _ = json.MarshalIndent(augment(res), "", " ") case MinifiedJSON: d, _ = json.Marshal(augment(res)) - case YAML: - d, _ = yaml.Marshal(augment(res)) default: panic("unknown output format") } @@ -241,19 +233,13 @@ func PrintResult(res Result) { case JSON: d, err := json.MarshalIndent(augment(res.Data()), "", " ") if err != nil { - Fatal(tr("Error during JSON encoding of the output: %v", err), ErrGeneric) + Fatal(i18n.Tr("Error during JSON encoding of the output: %v", err), ErrGeneric) } data = string(d) case MinifiedJSON: d, err := json.Marshal(augment(res.Data())) if err != nil { - Fatal(tr("Error during JSON encoding of the output: %v", err), ErrGeneric) - } - data = string(d) - case YAML: - d, err := yaml.Marshal(augment(res.Data())) - if err != nil { - Fatal(tr("Error during YAML encoding of the output: %v", err), ErrGeneric) + Fatal(i18n.Tr("Error during JSON encoding of the output: %v", err), ErrGeneric) } data = string(d) case Text: diff --git a/internal/cli/feedback/result/rpc.go b/internal/cli/feedback/result/rpc.go new file mode 100644 index 00000000000..a1b464a89b1 --- /dev/null +++ b/internal/cli/feedback/result/rpc.go @@ -0,0 +1,1124 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package result + +import ( + "cmp" + "fmt" + "slices" + + f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/orderedmap" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + semver "go.bug.st/relaxed-semver" +) + +// NewPlatformSummary creates a new result.PlatformSummary from rpc.PlatformSummary +func NewPlatformSummary(in *rpc.PlatformSummary) *PlatformSummary { + if in == nil { + return nil + } + + releases := orderedmap.NewWithConversionFunc[*semver.Version, *PlatformRelease, string]((*semver.Version).String) + for k, v := range in.GetReleases() { + releases.Set(semver.MustParse(k), NewPlatformRelease(v)) + } + releases.SortKeys((*semver.Version).CompareTo) + + return &PlatformSummary{ + Id: in.GetMetadata().GetId(), + Maintainer: in.GetMetadata().GetMaintainer(), + Website: in.GetMetadata().GetWebsite(), + Email: in.GetMetadata().GetEmail(), + ManuallyInstalled: in.GetMetadata().GetManuallyInstalled(), + Deprecated: in.GetMetadata().GetDeprecated(), + Indexed: in.GetMetadata().GetIndexed(), + Releases: releases, + InstalledVersion: semver.MustParse(in.GetInstalledVersion()), + LatestVersion: semver.MustParse(in.GetLatestVersion()), + } +} + +// PlatformSummary maps a rpc.PlatformSummary +type PlatformSummary struct { + Id string `json:"id,omitempty"` + Maintainer string `json:"maintainer,omitempty"` + Website string `json:"website,omitempty"` + Email string `json:"email,omitempty"` + ManuallyInstalled bool `json:"manually_installed,omitempty"` + Deprecated bool `json:"deprecated,omitempty"` + Indexed bool `json:"indexed,omitempty"` + + Releases orderedmap.Map[*semver.Version, *PlatformRelease] `json:"releases,omitempty"` + + InstalledVersion *semver.Version `json:"installed_version,omitempty"` + LatestVersion *semver.Version `json:"latest_version,omitempty"` +} + +// GetLatestRelease returns the latest relase of this platform or nil if none available. +func (p *PlatformSummary) GetLatestRelease() *PlatformRelease { + return p.Releases.Get(p.LatestVersion) +} + +// GetInstalledRelease returns the installed relase of this platform or nil if none available. +func (p *PlatformSummary) GetInstalledRelease() *PlatformRelease { + return p.Releases.Get(p.InstalledVersion) +} + +// GetPlatformName compute the name of the platform based on the installed/available releases. +func (p *PlatformSummary) GetPlatformName() string { + var name string + if installed := p.GetInstalledRelease(); installed != nil { + name = installed.FormatName() + } + if name == "" { + if latest := p.GetLatestRelease(); latest != nil { + name = latest.FormatName() + } else { + keys := p.Releases.Keys() + name = p.Releases.Get(keys[len(keys)-1]).FormatName() + } + } + return name +} + +// NewPlatformRelease creates a new result.PlatformRelease from rpc.PlatformRelease +func NewPlatformRelease(in *rpc.PlatformRelease) *PlatformRelease { + if in == nil { + return nil + } + var boards []*Board + for _, board := range in.GetBoards() { + boards = append(boards, &Board{ + Name: board.GetName(), + Fqbn: board.GetFqbn(), + }) + } + var help *HelpResource + if in.GetHelp() != nil { + help = &HelpResource{ + Online: in.GetHelp().GetOnline(), + } + } + res := &PlatformRelease{ + Name: in.GetName(), + Version: in.GetVersion(), + Types: in.GetTypes(), + Installed: in.GetInstalled(), + Boards: boards, + Help: help, + MissingMetadata: in.GetMissingMetadata(), + Deprecated: in.GetDeprecated(), + Compatible: in.GetCompatible(), + } + return res +} + +// PlatformRelease maps a rpc.PlatformRelease +type PlatformRelease struct { + Name string `json:"name,omitempty"` + Version string `json:"version,omitempty"` + Types []string `json:"types,omitempty"` + Installed bool `json:"installed,omitempty"` + Boards []*Board `json:"boards,omitempty"` + Help *HelpResource `json:"help,omitempty"` + MissingMetadata bool `json:"missing_metadata,omitempty"` + Deprecated bool `json:"deprecated,omitempty"` + Compatible bool `json:"compatible"` +} + +func (p *PlatformRelease) FormatName() string { + if p.Deprecated { + return fmt.Sprintf("[%s] %s", i18n.Tr("DEPRECATED"), p.Name) + } + return p.Name +} + +// Board maps a rpc.Board +type Board struct { + Name string `json:"name,omitempty"` + Fqbn string `json:"fqbn,omitempty"` +} + +// HelpResource maps a rpc.HelpResource +type HelpResource struct { + Online string `json:"online,omitempty"` +} + +type InstalledLibrary struct { + Library *Library `json:"library,omitempty"` + Release *LibraryRelease `json:"release,omitempty"` +} + +type LibraryLocation string + +const ( + LibraryLocationUser LibraryLocation = "user" + LibraryLocationIDEBuiltin LibraryLocation = "ide" + LibraryLocationPlatformBuiltin LibraryLocation = "platform" + LibraryLocationReferencedPlatformBuiltin LibraryLocation = "ref-platform" + LibraryLocationUnmanged LibraryLocation = "unmanaged" +) + +func NewLibraryLocation(r rpc.LibraryLocation) LibraryLocation { + switch r { + case rpc.LibraryLocation_LIBRARY_LOCATION_BUILTIN: + return LibraryLocationIDEBuiltin + case rpc.LibraryLocation_LIBRARY_LOCATION_PLATFORM_BUILTIN: + return LibraryLocationPlatformBuiltin + case rpc.LibraryLocation_LIBRARY_LOCATION_REFERENCED_PLATFORM_BUILTIN: + return LibraryLocationReferencedPlatformBuiltin + case rpc.LibraryLocation_LIBRARY_LOCATION_USER: + return LibraryLocationUser + case rpc.LibraryLocation_LIBRARY_LOCATION_UNMANAGED: + return LibraryLocationUnmanged + } + return LibraryLocationIDEBuiltin +} + +type LibraryLayout string + +const ( + LibraryLayoutFlat LibraryLayout = "flat" + LibraryLayoutRecursive LibraryLayout = "recursive" +) + +func NewLibraryLayout(r rpc.LibraryLayout) LibraryLayout { + switch r { + case rpc.LibraryLayout_LIBRARY_LAYOUT_FLAT: + return LibraryLayoutFlat + case rpc.LibraryLayout_LIBRARY_LAYOUT_RECURSIVE: + return LibraryLayoutRecursive + } + return LibraryLayoutFlat +} + +type Library struct { + Name string `json:"name,omitempty"` + Author string `json:"author,omitempty"` + Maintainer string `json:"maintainer,omitempty"` + Sentence string `json:"sentence,omitempty"` + Paragraph string `json:"paragraph,omitempty"` + Website string `json:"website,omitempty"` + Category string `json:"category,omitempty"` + Architectures []string `json:"architectures,omitempty"` + Types []string `json:"types,omitempty"` + InstallDir string `json:"install_dir,omitempty"` + SourceDir string `json:"source_dir,omitempty"` + UtilityDir string `json:"utility_dir,omitempty"` + ContainerPlatform string `json:"container_platform,omitempty"` + DotALinkage bool `json:"dot_a_linkage,omitempty"` + Precompiled bool `json:"precompiled,omitempty"` + LdFlags string `json:"ld_flags,omitempty"` + IsLegacy bool `json:"is_legacy,omitempty"` + Version string `json:"version,omitempty"` + License string `json:"license,omitempty"` + Properties orderedmap.Map[string, string] `json:"properties,omitempty"` + Location LibraryLocation `json:"location,omitempty"` + Layout LibraryLayout `json:"layout,omitempty"` + Examples []string `json:"examples,omitempty"` + ProvidesIncludes []string `json:"provides_includes,omitempty"` + CompatibleWith orderedmap.Map[string, bool] `json:"compatible_with,omitempty"` + InDevelopment bool `json:"in_development,omitempty"` +} + +func NewLibrary(l *rpc.Library) *Library { + if l == nil { + return nil + } + libraryPropsMap := orderedmap.New[string, string]() + for k, v := range l.GetProperties() { + libraryPropsMap.Set(k, v) + } + libraryPropsMap.SortStableKeys(cmp.Compare) + + libraryCompatibleWithMap := orderedmap.New[string, bool]() + for k, v := range l.GetCompatibleWith() { + libraryCompatibleWithMap.Set(k, v) + } + libraryCompatibleWithMap.SortStableKeys(cmp.Compare) + + return &Library{ + Name: l.GetName(), + Author: l.GetAuthor(), + Maintainer: l.GetMaintainer(), + Sentence: l.GetSentence(), + Paragraph: l.GetParagraph(), + Website: l.GetWebsite(), + Category: l.GetCategory(), + Architectures: l.GetArchitectures(), + Types: l.GetTypes(), + InstallDir: l.GetInstallDir(), + SourceDir: l.GetSourceDir(), + UtilityDir: l.GetUtilityDir(), + ContainerPlatform: l.GetContainerPlatform(), + DotALinkage: l.GetDotALinkage(), + Precompiled: l.GetPrecompiled(), + LdFlags: l.GetLdFlags(), + IsLegacy: l.GetIsLegacy(), + Version: l.GetVersion(), + License: l.GetLicense(), + Properties: libraryPropsMap, + Location: NewLibraryLocation(l.GetLocation()), + Layout: NewLibraryLayout(l.GetLayout()), + Examples: l.GetExamples(), + ProvidesIncludes: l.GetProvidesIncludes(), + CompatibleWith: libraryCompatibleWithMap, + InDevelopment: l.GetInDevelopment(), + } +} + +type LibraryRelease struct { + Author string `json:"author,omitempty"` + Version string `json:"version,omitempty"` + Maintainer string `json:"maintainer,omitempty"` + Sentence string `json:"sentence,omitempty"` + Paragraph string `json:"paragraph,omitempty"` + Website string `json:"website,omitempty"` + Category string `json:"category,omitempty"` + Architectures []string `json:"architectures,omitempty"` + Types []string `json:"types,omitempty"` + Resources *DownloadResource `json:"resources,omitempty"` + License string `json:"license,omitempty"` + ProvidesIncludes []string `json:"provides_includes,omitempty"` + Dependencies []*LibraryDependency `json:"dependencies,omitempty"` +} + +func NewLibraryRelease(l *rpc.LibraryRelease) *LibraryRelease { + if l == nil { + return nil + } + return &LibraryRelease{ + Author: l.GetAuthor(), + Version: l.GetVersion(), + Maintainer: l.GetMaintainer(), + Sentence: l.GetSentence(), + Paragraph: l.GetParagraph(), + Website: l.GetWebsite(), + Category: l.GetCategory(), + Architectures: l.GetArchitectures(), + Types: l.GetTypes(), + Resources: NewDownloadResource(l.GetResources()), + License: l.GetLicense(), + ProvidesIncludes: l.GetProvidesIncludes(), + Dependencies: NewLibraryDependencies(l.GetDependencies()), + } +} + +type DownloadResource struct { + Url string `json:"url,omitempty"` + ArchiveFilename string `json:"archive_filename,omitempty"` + Checksum string `json:"checksum,omitempty"` + Size int64 `json:"size,omitempty"` + CachePath string `json:"cache_path,omitempty"` +} + +type LibraryDependency struct { + Name string `json:"name,omitempty"` + VersionConstraint string `json:"version_constraint,omitempty"` +} + +func NewInstalledLibrary(l *rpc.InstalledLibrary) *InstalledLibrary { + return &InstalledLibrary{ + Library: NewLibrary(l.GetLibrary()), + Release: NewLibraryRelease(l.GetRelease()), + } +} + +func NewDownloadResource(r *rpc.DownloadResource) *DownloadResource { + if r == nil { + return nil + } + return &DownloadResource{ + Url: r.GetUrl(), + ArchiveFilename: r.GetArchiveFilename(), + Checksum: r.GetChecksum(), + Size: r.GetSize(), + CachePath: r.GetCachePath(), + } +} + +func NewLibraryDependencies(d []*rpc.LibraryDependency) []*LibraryDependency { + if d == nil { + return nil + } + result := make([]*LibraryDependency, len(d)) + for i, v := range d { + result[i] = NewLibraryDependency(v) + } + return result +} + +func NewLibraryDependency(d *rpc.LibraryDependency) *LibraryDependency { + if d == nil { + return nil + } + return &LibraryDependency{ + Name: d.GetName(), + VersionConstraint: d.GetVersionConstraint(), + } +} + +type Port struct { + Address string `json:"address,omitempty"` + Label string `json:"label,omitempty"` + Protocol string `json:"protocol,omitempty"` + ProtocolLabel string `json:"protocol_label,omitempty"` + Properties orderedmap.Map[string, string] `json:"properties,omitempty"` + HardwareId string `json:"hardware_id,omitempty"` +} + +func NewPort(p *rpc.Port) *Port { + if p == nil { + return nil + } + propertiesMap := orderedmap.New[string, string]() + for k, v := range p.GetProperties() { + propertiesMap.Set(k, v) + } + propertiesMap.SortStableKeys(cmp.Compare) + return &Port{ + Address: p.GetAddress(), + Label: p.GetLabel(), + Protocol: p.GetProtocol(), + ProtocolLabel: p.GetProtocolLabel(), + Properties: propertiesMap, + HardwareId: p.GetHardwareId(), + } +} + +type BoardDetailsResponse struct { + Fqbn string `json:"fqbn,omitempty"` + Name string `json:"name,omitempty"` + Version string `json:"version,omitempty"` + PropertiesId string `json:"properties_id,omitempty"` + Alias string `json:"alias,omitempty"` + Official bool `json:"official,omitempty"` + Pinout string `json:"pinout,omitempty"` + Package *Package `json:"package,omitempty"` + Platform *BoardPlatform `json:"platform,omitempty"` + ToolsDependencies []*ToolsDependency `json:"tools_dependencies,omitempty"` + ConfigOptions []*ConfigOption `json:"config_options,omitempty"` + Programmers []*Programmer `json:"programmers,omitempty"` + IdentificationProperties []*BoardIdentificationProperties `json:"identification_properties,omitempty"` + BuildProperties []string `json:"build_properties,omitempty"` + DefaultProgrammerID string `json:"default_programmer_id,omitempty"` +} + +func NewBoardDetailsResponse(b *rpc.BoardDetailsResponse) *BoardDetailsResponse { + if b == nil { + return nil + } + buildProperties := b.GetBuildProperties() + slices.Sort(buildProperties) + return &BoardDetailsResponse{ + Fqbn: b.GetFqbn(), + Name: b.GetName(), + Version: b.GetVersion(), + PropertiesId: b.GetPropertiesId(), + Alias: b.GetAlias(), + Official: b.GetOfficial(), + Pinout: b.GetPinout(), + Package: NewPackage(b.GetPackage()), + Platform: NewBoardPlatform(b.GetPlatform()), + ToolsDependencies: NewToolsDependencies(b.GetToolsDependencies()), + ConfigOptions: NewConfigOptions(b.GetConfigOptions()), + Programmers: NewProgrammers(b.GetProgrammers()), + IdentificationProperties: NewBoardIdentificationProperties(b.GetIdentificationProperties()), + BuildProperties: buildProperties, + DefaultProgrammerID: b.GetDefaultProgrammerId(), + } +} + +type Package struct { + Maintainer string `json:"maintainer,omitempty"` + Url string `json:"url,omitempty"` + WebsiteUrl string `json:"website_url,omitempty"` + Email string `json:"email,omitempty"` + Name string `json:"name,omitempty"` + Help *Help `json:"help,omitempty"` +} + +func NewPackage(p *rpc.Package) *Package { + if p == nil { + return nil + } + return &Package{ + Maintainer: p.GetMaintainer(), + Url: p.GetUrl(), + WebsiteUrl: p.GetWebsiteUrl(), + Email: p.GetEmail(), + Name: p.GetName(), + Help: NewHelp(p.GetHelp()), + } +} + +type Help struct { + Online string `json:"online,omitempty"` +} + +func NewHelp(h *rpc.Help) *Help { + if h == nil { + return nil + } + return &Help{Online: h.GetOnline()} +} + +type BoardPlatform struct { + Architecture string `json:"architecture,omitempty"` + Category string `json:"category,omitempty"` + Url string `json:"url,omitempty"` + ArchiveFilename string `json:"archive_filename,omitempty"` + Checksum string `json:"checksum,omitempty"` + Size int64 `json:"size,omitempty"` + Name string `json:"name,omitempty"` +} + +func NewBoardPlatform(p *rpc.BoardPlatform) *BoardPlatform { + if p == nil { + return nil + } + return &BoardPlatform{ + Architecture: p.GetArchitecture(), + Category: p.GetCategory(), + Url: p.GetUrl(), + ArchiveFilename: p.GetArchiveFilename(), + Checksum: p.GetChecksum(), + Size: p.GetSize(), + Name: p.GetName(), + } +} + +type ToolsDependency struct { + Packager string `json:"packager,omitempty"` + Name string `json:"name,omitempty"` + Version string `json:"version,omitempty"` + Systems []*System `json:"systems,omitempty"` +} + +func NewToolsDependencies(p []*rpc.ToolsDependencies) []*ToolsDependency { + if p == nil { + return nil + } + res := make([]*ToolsDependency, len(p)) + for i, v := range p { + res[i] = NewToolsDependency(v) + } + return res +} + +func NewToolsDependency(p *rpc.ToolsDependencies) *ToolsDependency { + if p == nil { + return nil + } + return &ToolsDependency{ + Packager: p.GetPackager(), + Name: p.GetName(), + Version: p.GetVersion(), + Systems: NewSystems(p.GetSystems()), + } +} + +type System struct { + Checksum string `json:"checksum,omitempty"` + Host string `json:"host,omitempty"` + ArchiveFilename string `json:"archive_filename,omitempty"` + Url string `json:"url,omitempty"` + Size int64 `json:"size,omitempty"` +} + +func NewSystems(p []*rpc.Systems) []*System { + if p == nil { + return nil + } + res := make([]*System, len(p)) + for i, v := range p { + res[i] = NewSystem(v) + } + return res +} + +func NewSystem(s *rpc.Systems) *System { + if s == nil { + return nil + } + return &System{ + Checksum: s.GetChecksum(), + Host: s.GetHost(), + ArchiveFilename: s.GetArchiveFilename(), + Url: s.GetUrl(), + Size: s.GetSize(), + } +} + +type ConfigOption struct { + Option string `json:"option,omitempty"` + OptionLabel string `json:"option_label,omitempty"` + Values []*ConfigValue `json:"values,omitempty"` +} + +func NewConfigOptions(c []*rpc.ConfigOption) []*ConfigOption { + if c == nil { + return nil + } + res := make([]*ConfigOption, len(c)) + for i, v := range c { + res[i] = NewConfigOption(v) + } + return res +} + +func NewConfigOption(o *rpc.ConfigOption) *ConfigOption { + if o == nil { + return nil + } + return &ConfigOption{ + Option: o.GetOption(), + OptionLabel: o.GetOptionLabel(), + Values: NewConfigValues(o.GetValues()), + } +} + +type ConfigValue struct { + Value string `json:"value,omitempty"` + ValueLabel string `json:"value_label,omitempty"` + Selected bool `json:"selected,omitempty"` +} + +func NewConfigValues(c []*rpc.ConfigValue) []*ConfigValue { + if c == nil { + return nil + } + res := make([]*ConfigValue, len(c)) + for i, v := range c { + res[i] = NewConfigValue(v) + } + return res +} + +func NewConfigValue(c *rpc.ConfigValue) *ConfigValue { + if c == nil { + return nil + } + return &ConfigValue{ + Value: c.GetValue(), + ValueLabel: c.GetValueLabel(), + Selected: c.GetSelected(), + } +} + +type Programmer struct { + Platform string `json:"platform,omitempty"` + Id string `json:"id,omitempty"` + Name string `json:"name,omitempty"` +} + +func NewProgrammers(c []*rpc.Programmer) []*Programmer { + if c == nil { + return nil + } + res := make([]*Programmer, len(c)) + for i, v := range c { + res[i] = NewProgrammer(v) + } + + slices.SortFunc(res, func(a, b *Programmer) int { + return cmp.Compare(a.Id, b.Id) + }) + return res +} + +func NewProgrammer(c *rpc.Programmer) *Programmer { + if c == nil { + return nil + } + return &Programmer{ + Platform: c.GetPlatform(), + Id: c.GetId(), + Name: c.GetName(), + } +} + +type BoardIdentificationProperties struct { + Properties orderedmap.Map[string, string] `json:"properties,omitempty"` +} + +func NewBoardIdentificationProperties(p []*rpc.BoardIdentificationProperties) []*BoardIdentificationProperties { + if p == nil { + return nil + } + res := make([]*BoardIdentificationProperties, len(p)) + for i, v := range p { + res[i] = NewBoardIndentificationProperty(v) + } + return res +} + +func NewBoardIndentificationProperty(p *rpc.BoardIdentificationProperties) *BoardIdentificationProperties { + if p == nil { + return nil + } + propertiesMap := orderedmap.New[string, string]() + for k, v := range p.GetProperties() { + propertiesMap.Set(k, v) + } + propertiesMap.SortStableKeys(cmp.Compare) + + return &BoardIdentificationProperties{Properties: propertiesMap} +} + +type BoardListAllResponse struct { + Boards []*BoardListItem `json:"boards,omitempty"` +} + +func NewBoardListAllResponse(p *rpc.BoardListAllResponse) *BoardListAllResponse { + if p == nil { + return nil + } + boards := make([]*BoardListItem, len(p.GetBoards())) + for i, v := range p.GetBoards() { + boards[i] = NewBoardListItem(v) + } + return &BoardListAllResponse{Boards: boards} +} + +type BoardListItem struct { + Name string `json:"name,omitempty"` + Fqbn string `json:"fqbn,omitempty"` + IsHidden bool `json:"is_hidden,omitempty"` + Platform *Platform `json:"platform,omitempty"` +} + +func NewBoardListItems(b []*rpc.BoardListItem) []*BoardListItem { + if b == nil { + return nil + } + res := make([]*BoardListItem, len(b)) + for i, v := range b { + res[i] = NewBoardListItem(v) + } + return res +} + +func NewBoardListItem(b *rpc.BoardListItem) *BoardListItem { + if b == nil { + return nil + } + return &BoardListItem{ + Name: b.GetName(), + Fqbn: b.GetFqbn(), + IsHidden: b.GetIsHidden(), + Platform: NewPlatform(b.GetPlatform()), + } +} + +type Platform struct { + Metadata *PlatformMetadata `json:"metadata,omitempty"` + Release *PlatformRelease `json:"release,omitempty"` +} + +func NewPlatform(p *rpc.Platform) *Platform { + if p == nil { + return nil + } + return &Platform{ + Metadata: NewPlatformMetadata(p.GetMetadata()), + Release: NewPlatformRelease(p.GetRelease()), + } +} + +type PlatformMetadata struct { + Id string `json:"id,omitempty"` + Maintainer string `json:"maintainer,omitempty"` + Website string `json:"website,omitempty"` + Email string `json:"email,omitempty"` + ManuallyInstalled bool `json:"manually_installed,omitempty"` + Deprecated bool `json:"deprecated,omitempty"` + Indexed bool `json:"indexed,omitempty"` +} + +func NewPlatformMetadata(p *rpc.PlatformMetadata) *PlatformMetadata { + if p == nil { + return nil + } + return &PlatformMetadata{ + Id: p.GetId(), + Maintainer: p.GetMaintainer(), + Website: p.GetWebsite(), + Email: p.GetEmail(), + ManuallyInstalled: p.GetManuallyInstalled(), + Deprecated: p.GetDeprecated(), + Indexed: p.GetIndexed(), + } +} + +type DetectedPort struct { + MatchingBoards []*BoardListItem `json:"matching_boards,omitempty"` + Port *Port `json:"port,omitempty"` +} + +func NewDetectedPorts(p []*rpc.DetectedPort) []*DetectedPort { + if p == nil { + return nil + } + res := make([]*DetectedPort, len(p)) + for i, v := range p { + res[i] = NewDetectedPort(v) + } + return res +} + +func NewDetectedPort(p *rpc.DetectedPort) *DetectedPort { + if p == nil { + return nil + } + return &DetectedPort{ + MatchingBoards: NewBoardListItems(p.GetMatchingBoards()), + Port: NewPort(p.GetPort()), + } +} + +type LibraryResolveDependenciesResponse struct { + Dependencies []*LibraryDependencyStatus `json:"dependencies,omitempty"` +} + +func NewLibraryResolveDependenciesResponse(l *rpc.LibraryResolveDependenciesResponse) *LibraryResolveDependenciesResponse { + if l == nil { + return nil + } + dependencies := make([]*LibraryDependencyStatus, len(l.GetDependencies())) + for i, v := range l.GetDependencies() { + dependencies[i] = NewLibraryDependencyStatus(v) + } + return &LibraryResolveDependenciesResponse{Dependencies: dependencies} +} + +type LibraryDependencyStatus struct { + Name string `json:"name,omitempty"` + VersionRequired string `json:"version_required,omitempty"` + VersionInstalled string `json:"version_installed,omitempty"` +} + +func NewLibraryDependencyStatus(l *rpc.LibraryDependencyStatus) *LibraryDependencyStatus { + if l == nil { + return nil + } + return &LibraryDependencyStatus{ + Name: l.GetName(), + VersionRequired: l.GetVersionRequired(), + VersionInstalled: l.GetVersionInstalled(), + } +} + +type LibrarySearchStatus string + +const ( + LibrarySearchStatusFailed LibrarySearchStatus = "failed" + LibrarySearchStatusSuccess LibrarySearchStatus = "success" +) + +func NewLibrarySearchStatus(r rpc.LibrarySearchStatus) LibrarySearchStatus { + switch r { + case rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_FAILED: + return LibrarySearchStatusFailed + case rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS: + return LibrarySearchStatusSuccess + } + return LibrarySearchStatusFailed +} + +type LibrarySearchResponse struct { + Libraries []*SearchedLibrary `json:"libraries,omitempty"` + Status LibrarySearchStatus `json:"status,omitempty"` +} + +func NewLibrarySearchResponse(l *rpc.LibrarySearchResponse) *LibrarySearchResponse { + if l == nil { + return nil + } + + searchedLibraries := make([]*SearchedLibrary, len(l.GetLibraries())) + for i, v := range l.GetLibraries() { + searchedLibraries[i] = NewSearchedLibrary(v) + } + + return &LibrarySearchResponse{ + Libraries: searchedLibraries, + Status: NewLibrarySearchStatus(l.GetStatus()), + } +} + +type SearchedLibrary struct { + Name string `json:"name,omitempty"` + Releases orderedmap.Map[*semver.Version, *LibraryRelease] `json:"releases,omitempty"` + Latest *LibraryRelease `json:"latest,omitempty"` + AvailableVersions []string `json:"available_versions,omitempty"` +} + +func NewSearchedLibrary(l *rpc.SearchedLibrary) *SearchedLibrary { + if l == nil { + return nil + } + releasesMap := orderedmap.NewWithConversionFunc[*semver.Version, *LibraryRelease, string]((*semver.Version).String) + for k, v := range l.GetReleases() { + releasesMap.Set(semver.MustParse(k), NewLibraryRelease(v)) + } + releasesMap.SortKeys((*semver.Version).CompareTo) + return &SearchedLibrary{ + Name: l.GetName(), + Releases: releasesMap, + Latest: NewLibraryRelease(l.GetLatest()), + AvailableVersions: l.GetAvailableVersions(), + } +} + +type MonitorPortSettingDescriptor struct { + SettingId string `json:"setting_id,omitempty"` + Label string `json:"label,omitempty"` + Type string `json:"type,omitempty"` + EnumValues []string `json:"enum_values,omitempty"` + Value string `json:"value,omitempty"` +} + +func NewMonitorPortSettingDescriptor(m *rpc.MonitorPortSettingDescriptor) *MonitorPortSettingDescriptor { + if m == nil { + return nil + } + return &MonitorPortSettingDescriptor{ + SettingId: m.GetSettingId(), + Label: m.GetLabel(), + Type: m.GetType(), + EnumValues: m.GetEnumValues(), + Value: m.GetValue(), + } +} + +type BuilderResult struct { + BuildPath string `json:"build_path,omitempty"` + UsedLibraries []*Library `json:"used_libraries,omitempty"` + ExecutableSectionsSize []*ExecutableSectionSize `json:"executable_sections_size,omitempty"` + BoardPlatform *InstalledPlatformReference `json:"board_platform,omitempty"` + BuildPlatform *InstalledPlatformReference `json:"build_platform,omitempty"` + BuildProperties []string `json:"build_properties,omitempty"` + Diagnostics []*CompileDiagnostic `json:"diagnostics,omitempty"` +} + +func NewBuilderResult(c *rpc.BuilderResult) *BuilderResult { + if c == nil { + return nil + } + usedLibs := make([]*Library, len(c.GetUsedLibraries())) + for i, v := range c.GetUsedLibraries() { + usedLibs[i] = NewLibrary(v) + } + executableSectionsSizes := make([]*ExecutableSectionSize, len(c.GetExecutableSectionsSize())) + for i, v := range c.GetExecutableSectionsSize() { + executableSectionsSizes[i] = NewExecutableSectionSize(v) + } + + return &BuilderResult{ + BuildPath: c.GetBuildPath(), + UsedLibraries: usedLibs, + ExecutableSectionsSize: executableSectionsSizes, + BoardPlatform: NewInstalledPlatformReference(c.GetBoardPlatform()), + BuildPlatform: NewInstalledPlatformReference(c.GetBuildPlatform()), + BuildProperties: c.GetBuildProperties(), + Diagnostics: NewCompileDiagnostics(c.GetDiagnostics()), + } +} + +type ExecutableSectionSize struct { + Name string `json:"name,omitempty"` + Size int64 `json:"size,omitempty"` + MaxSize int64 `json:"max_size,omitempty"` +} + +func NewExecutableSectionSize(s *rpc.ExecutableSectionSize) *ExecutableSectionSize { + if s == nil { + return nil + } + return &ExecutableSectionSize{ + Name: s.GetName(), + Size: s.GetSize(), + MaxSize: s.GetMaxSize(), + } +} + +type InstalledPlatformReference struct { + Id string `json:"id,omitempty"` + Version string `json:"version,omitempty"` + InstallDir string `json:"install_dir,omitempty"` + PackageUrl string `json:"package_url,omitempty"` +} + +func NewInstalledPlatformReference(r *rpc.InstalledPlatformReference) *InstalledPlatformReference { + if r == nil { + return nil + } + return &InstalledPlatformReference{ + Id: r.GetId(), + Version: r.GetVersion(), + InstallDir: r.GetInstallDir(), + PackageUrl: r.GetPackageUrl(), + } +} + +type BoardListWatchResponse struct { + EventType string `json:"event_type,omitempty"` + Port *DetectedPort `json:"port,omitempty"` + Error string `json:"error,omitempty"` +} + +func NewBoardListWatchResponse(r *rpc.BoardListWatchResponse) *BoardListWatchResponse { + if r == nil { + return nil + } + return &BoardListWatchResponse{ + EventType: r.GetEventType(), + Port: NewDetectedPort(r.GetPort()), + Error: r.GetError(), + } +} + +type CompileDiagnostic struct { + Severity string `json:"severity,omitempty"` + Message string `json:"message,omitempty"` + File string `json:"file,omitempty"` + Line int64 `json:"line,omitempty"` + Column int64 `json:"column,omitempty"` + Context []*CompileDiagnosticContext `json:"context,omitempty"` + Notes []*CompileDiagnosticNote `json:"notes,omitempty"` +} + +func NewCompileDiagnostics(cd []*rpc.CompileDiagnostic) []*CompileDiagnostic { + return f.Map(cd, NewCompileDiagnostic) +} + +func NewCompileDiagnostic(cd *rpc.CompileDiagnostic) *CompileDiagnostic { + return &CompileDiagnostic{ + Severity: cd.GetSeverity(), + Message: cd.GetMessage(), + File: cd.GetFile(), + Line: cd.GetLine(), + Column: cd.GetColumn(), + Context: f.Map(cd.GetContext(), NewCompileDiagnosticContext), + Notes: f.Map(cd.GetNotes(), NewCompileDiagnosticNote), + } +} + +type CompileDiagnosticContext struct { + Message string `json:"message,omitempty"` + File string `json:"file,omitempty"` + Line int64 `json:"line,omitempty"` + Column int64 `json:"column,omitempty"` +} + +func NewCompileDiagnosticContext(cdc *rpc.CompileDiagnosticContext) *CompileDiagnosticContext { + return &CompileDiagnosticContext{ + Message: cdc.GetMessage(), + File: cdc.GetFile(), + Line: cdc.GetLine(), + Column: cdc.GetColumn(), + } +} + +type CompileDiagnosticNote struct { + Message string `json:"message,omitempty"` + File string `json:"file,omitempty"` + Line int64 `json:"line,omitempty"` + Column int64 `json:"column,omitempty"` +} + +func NewCompileDiagnosticNote(cdn *rpc.CompileDiagnosticNote) *CompileDiagnosticNote { + return &CompileDiagnosticNote{ + Message: cdn.GetMessage(), + File: cdn.GetFile(), + Line: cdn.GetLine(), + Column: cdn.GetColumn(), + } +} + +type IsDebugSupportedResponse struct { + DebuggingSupported bool `json:"debugging_supported"` + DebugFQBN string `json:"debug_fqbn,omitempty"` +} + +func NewIsDebugSupportedResponse(resp *rpc.IsDebugSupportedResponse) *IsDebugSupportedResponse { + return &IsDebugSupportedResponse{ + DebuggingSupported: resp.GetDebuggingSupported(), + DebugFQBN: resp.GetDebugFqbn(), + } +} + +type UpdateIndexResponse_ResultResult struct { + UpdatedIndexes []*IndexUpdateReportResult `json:"updated_indexes,omitempty"` +} + +func NewUpdateIndexResponse_ResultResult(resp *rpc.UpdateIndexResponse_Result) *UpdateIndexResponse_ResultResult { + return &UpdateIndexResponse_ResultResult{ + UpdatedIndexes: f.Map(resp.GetUpdatedIndexes(), NewIndexUpdateReportResult), + } +} + +type UpdateLibrariesIndexResponse_ResultResult struct { + LibrariesIndex *IndexUpdateReportResult `json:"libraries_index"` +} + +func NewUpdateLibrariesIndexResponse_ResultResult(resp *rpc.UpdateLibrariesIndexResponse_Result) *UpdateLibrariesIndexResponse_ResultResult { + return &UpdateLibrariesIndexResponse_ResultResult{ + LibrariesIndex: NewIndexUpdateReportResult(resp.GetLibrariesIndex()), + } +} + +type IndexUpdateReportResult struct { + IndexURL string `json:"index_url"` + Status IndexUpdateReport_Status `json:"status"` +} + +func NewIndexUpdateReportResult(resp *rpc.IndexUpdateReport) *IndexUpdateReportResult { + return &IndexUpdateReportResult{ + IndexURL: resp.GetIndexUrl(), + Status: NewIndexUpdateReport_Status(resp.GetStatus()), + } +} + +type IndexUpdateReport_Status string + +const ( + IndexUpdateReport_StatusUnspecified IndexUpdateReport_Status = "unspecified" + IndexUpdateReport_StatusAlreadyUpToDate IndexUpdateReport_Status = "already-up-to-date" + IndexUpdateReport_StatusFailed IndexUpdateReport_Status = "failed" + IndexUpdateReport_StatusSkipped IndexUpdateReport_Status = "skipped" + IndexUpdateReport_StatusUpdated IndexUpdateReport_Status = "updated" +) + +func NewIndexUpdateReport_Status(r rpc.IndexUpdateReport_Status) IndexUpdateReport_Status { + switch r { + case rpc.IndexUpdateReport_STATUS_UNSPECIFIED: + return IndexUpdateReport_StatusUnspecified + case rpc.IndexUpdateReport_STATUS_UPDATED: + return IndexUpdateReport_StatusUpdated + case rpc.IndexUpdateReport_STATUS_ALREADY_UP_TO_DATE: + return IndexUpdateReport_StatusAlreadyUpToDate + case rpc.IndexUpdateReport_STATUS_FAILED: + return IndexUpdateReport_StatusFailed + case rpc.IndexUpdateReport_STATUS_SKIPPED: + return IndexUpdateReport_StatusSkipped + default: + return IndexUpdateReport_StatusUnspecified + } +} diff --git a/internal/cli/feedback/result/rpc_test.go b/internal/cli/feedback/result/rpc_test.go new file mode 100644 index 00000000000..f0158912c7f --- /dev/null +++ b/internal/cli/feedback/result/rpc_test.go @@ -0,0 +1,286 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package result_test + +import ( + "reflect" + "slices" + "strings" + "testing" + + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/stretchr/testify/require" +) + +func getStructJsonTags(t *testing.T, a any) []string { + tags := []string{} + rt := reflect.TypeOf(a) + if rt.Kind() != reflect.Struct { + rt = rt.Elem() + require.Equal(t, reflect.Struct, rt.Kind()) + } + for i := 0; i < rt.NumField(); i++ { + tag := rt.Field(i).Tag.Get("json") + if tag == "" { + continue + } + key, _, _ := strings.Cut(tag, ",") + tags = append(tags, key) + } + return tags +} + +func mustContainsAllPropertyOfRpcStruct(t *testing.T, a, b any, excludeFields ...string) { + // must not be the same pointer, a and b struct must be of different type + require.NotSame(t, a, b) + rta, rtb := reflect.TypeOf(a), reflect.TypeOf(b) + if rta.Kind() != reflect.Struct { + rta = rta.Elem() + require.Equal(t, reflect.Struct, rta.Kind()) + } + if rtb.Kind() != reflect.Struct { + rtb = rtb.Elem() + require.Equal(t, reflect.Struct, rtb.Kind()) + } + require.NotEqual(t, rta.String(), rtb.String()) + + aTags := getStructJsonTags(t, a) + bTags := getStructJsonTags(t, b) + if len(excludeFields) > 0 { + aTags = slices.DeleteFunc(aTags, func(s string) bool { return slices.Contains(excludeFields, s) }) + bTags = slices.DeleteFunc(bTags, func(s string) bool { return slices.Contains(excludeFields, s) }) + } + require.ElementsMatch(t, aTags, bTags) +} + +func TestAllFieldAreMapped(t *testing.T) { + // Our PlatformSummary expands the PlatformMetadata without the need to nest it as the rpc does. + platformSummaryRpc := &rpc.PlatformSummary{ + InstalledVersion: "1.0.0", + LatestVersion: "1.0.0", + } + platformSummaryRpcTags := getStructJsonTags(t, platformSummaryRpc) + platformSummaryRpcTags = append(platformSummaryRpcTags, getStructJsonTags(t, platformSummaryRpc.GetMetadata())...) + platformSummaryRpcTags = slices.DeleteFunc(platformSummaryRpcTags, func(s string) bool { return s == "metadata" }) + + platformSummaryResult := result.NewPlatformSummary(platformSummaryRpc) + platformSummaryResultTags := getStructJsonTags(t, platformSummaryResult) + + require.ElementsMatch(t, platformSummaryRpcTags, platformSummaryResultTags) + + platformRelease := &rpc.PlatformRelease{} + platformReleaseResult := result.NewPlatformRelease(platformRelease) + mustContainsAllPropertyOfRpcStruct(t, platformRelease, platformReleaseResult) + + libraryRpc := &rpc.Library{} + libraryResult := result.NewLibrary(libraryRpc) + mustContainsAllPropertyOfRpcStruct(t, libraryRpc, libraryResult) + + libraryReleaseRpc := &rpc.LibraryRelease{} + libraryReleaseResult := result.NewLibraryRelease(libraryReleaseRpc) + mustContainsAllPropertyOfRpcStruct(t, libraryReleaseRpc, libraryReleaseResult) + + installedLibrary := &rpc.InstalledLibrary{} + installedLibraryResult := result.NewInstalledLibrary(installedLibrary) + mustContainsAllPropertyOfRpcStruct(t, installedLibrary, installedLibraryResult) + + downloadResource := &rpc.DownloadResource{} + downloadResourceResult := result.NewDownloadResource(downloadResource) + mustContainsAllPropertyOfRpcStruct(t, downloadResource, downloadResourceResult) + + libraryDependencyRpc := &rpc.LibraryDependency{} + libraryDependencyResult := result.NewLibraryDependency(libraryDependencyRpc) + mustContainsAllPropertyOfRpcStruct(t, libraryDependencyRpc, libraryDependencyResult) + + portRpc := &rpc.Port{} + portResult := result.NewPort(portRpc) + mustContainsAllPropertyOfRpcStruct(t, portRpc, portResult) + + boardDetailsResponseRpc := &rpc.BoardDetailsResponse{} + boardDetailsResponseResult := result.NewBoardDetailsResponse(boardDetailsResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, boardDetailsResponseRpc, boardDetailsResponseResult) + + packageRpc := &rpc.Package{} + packageResult := result.NewPackage(packageRpc) + mustContainsAllPropertyOfRpcStruct(t, packageRpc, packageResult) + + helpRpc := &rpc.Help{} + helpResult := result.NewHelp(helpRpc) + mustContainsAllPropertyOfRpcStruct(t, helpRpc, helpResult) + + boardPlatformRpc := &rpc.BoardPlatform{} + boardPlatformResult := result.NewBoardPlatform(boardPlatformRpc) + mustContainsAllPropertyOfRpcStruct(t, boardPlatformRpc, boardPlatformResult) + + toolsDependencyRpc := &rpc.ToolsDependencies{} + toolsDependencyResult := result.NewToolsDependency(toolsDependencyRpc) + mustContainsAllPropertyOfRpcStruct(t, toolsDependencyRpc, toolsDependencyResult) + + systemRpc := &rpc.Systems{} + systemResult := result.NewSystem(systemRpc) + mustContainsAllPropertyOfRpcStruct(t, systemRpc, systemResult) + + configOptionRpc := &rpc.ConfigOption{} + configOptionResult := result.NewConfigOption(configOptionRpc) + mustContainsAllPropertyOfRpcStruct(t, configOptionRpc, configOptionResult) + + configValueRpc := &rpc.ConfigValue{} + configValueResult := result.NewConfigValue(configValueRpc) + mustContainsAllPropertyOfRpcStruct(t, configValueRpc, configValueResult) + + programmerRpc := &rpc.Programmer{} + programmerResult := result.NewProgrammer(programmerRpc) + mustContainsAllPropertyOfRpcStruct(t, programmerRpc, programmerResult) + + boardIdentificationPropertiesRpc := &rpc.BoardIdentificationProperties{} + boardIdentificationPropertiesResult := result.NewBoardIndentificationProperty(boardIdentificationPropertiesRpc) + mustContainsAllPropertyOfRpcStruct(t, boardIdentificationPropertiesRpc, boardIdentificationPropertiesResult) + + boardListAllResponseRpc := &rpc.BoardListAllResponse{} + boardListAllResponseResult := result.NewBoardListAllResponse(boardListAllResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, boardListAllResponseRpc, boardListAllResponseResult) + + boardListItemRpc := &rpc.BoardListItem{} + boardListItemResult := result.NewBoardListItem(boardListItemRpc) + mustContainsAllPropertyOfRpcStruct(t, boardListItemRpc, boardListItemResult) + + platformRpc := &rpc.Platform{} + platformResult := result.NewPlatform(platformRpc) + mustContainsAllPropertyOfRpcStruct(t, platformRpc, platformResult) + + platformMetadataRpc := &rpc.PlatformMetadata{} + platformMetadataResult := result.NewPlatformMetadata(platformMetadataRpc) + mustContainsAllPropertyOfRpcStruct(t, platformMetadataRpc, platformMetadataResult) + + detectedPortRpc := &rpc.DetectedPort{} + detectedPortResult := result.NewDetectedPort(detectedPortRpc) + mustContainsAllPropertyOfRpcStruct(t, detectedPortRpc, detectedPortResult) + + libraryResolveDependenciesResponseRpc := &rpc.LibraryResolveDependenciesResponse{} + libraryResolveDependenciesResponseResult := result.NewLibraryResolveDependenciesResponse(libraryResolveDependenciesResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, libraryResolveDependenciesResponseRpc, libraryResolveDependenciesResponseResult) + + libraryDependencyStatusRpc := &rpc.LibraryDependencyStatus{} + libraryDependencyStatusResult := result.NewLibraryDependencyStatus(libraryDependencyStatusRpc) + mustContainsAllPropertyOfRpcStruct(t, libraryDependencyStatusRpc, libraryDependencyStatusResult) + + librarySearchResponseRpc := &rpc.LibrarySearchResponse{} + librarySearchResponseResult := result.NewLibrarySearchResponse(librarySearchResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, librarySearchResponseRpc, librarySearchResponseResult) + + searchedLibraryRpc := &rpc.SearchedLibrary{} + searchedLibraryResult := result.NewSearchedLibrary(searchedLibraryRpc) + mustContainsAllPropertyOfRpcStruct(t, searchedLibraryRpc, searchedLibraryResult) + + monitorPortSettingDescriptorRpc := &rpc.MonitorPortSettingDescriptor{} + monitorPortSettingDescriptorResult := result.NewMonitorPortSettingDescriptor(monitorPortSettingDescriptorRpc) + mustContainsAllPropertyOfRpcStruct(t, monitorPortSettingDescriptorRpc, monitorPortSettingDescriptorResult) + + builderResultRpc := &rpc.BuilderResult{} + builderResultResult := result.NewBuilderResult(builderResultRpc) + mustContainsAllPropertyOfRpcStruct(t, builderResultRpc, builderResultResult) + + executableSectionSizeRpc := &rpc.ExecutableSectionSize{} + executableSectionSizeResult := result.NewExecutableSectionSize(executableSectionSizeRpc) + mustContainsAllPropertyOfRpcStruct(t, executableSectionSizeRpc, executableSectionSizeResult) + + installedPlatformReferenceRpc := &rpc.InstalledPlatformReference{} + installedPlatformReferenceResult := result.NewInstalledPlatformReference(installedPlatformReferenceRpc) + mustContainsAllPropertyOfRpcStruct(t, installedPlatformReferenceRpc, installedPlatformReferenceResult) + + boardListWatchResponseRpc := &rpc.BoardListWatchResponse{} + boardListWatchResponseResult := result.NewBoardListWatchResponse(boardListWatchResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, boardListWatchResponseRpc, boardListWatchResponseResult) + + compileDiagnosticRpc := &rpc.CompileDiagnostic{} + compileDiagnosticResult := result.NewCompileDiagnostic(compileDiagnosticRpc) + mustContainsAllPropertyOfRpcStruct(t, compileDiagnosticRpc, compileDiagnosticResult) + + compileDiagnosticContextRpc := &rpc.CompileDiagnosticContext{} + compileDiagnosticContextResult := result.NewCompileDiagnosticContext(compileDiagnosticContextRpc) + mustContainsAllPropertyOfRpcStruct(t, compileDiagnosticContextRpc, compileDiagnosticContextResult) + + compileDiagnosticNoteRpc := &rpc.CompileDiagnosticNote{} + compileDiagnosticNoteResult := result.NewCompileDiagnosticNote(compileDiagnosticNoteRpc) + mustContainsAllPropertyOfRpcStruct(t, compileDiagnosticNoteRpc, compileDiagnosticNoteResult) + + isDebugSupportedResponseRpc := &rpc.IsDebugSupportedResponse{} + isDebugSupportedResponseResult := result.NewIsDebugSupportedResponse(isDebugSupportedResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, isDebugSupportedResponseRpc, isDebugSupportedResponseResult) + + updateIndexResponse_ResultRpc := &rpc.UpdateIndexResponse_Result{} + updateIndexResponse_ResultResult := result.NewUpdateIndexResponse_ResultResult(updateIndexResponse_ResultRpc) + mustContainsAllPropertyOfRpcStruct(t, updateIndexResponse_ResultRpc, updateIndexResponse_ResultResult) + + updateLibrariesIndexResponse_ResultRpc := &rpc.UpdateLibrariesIndexResponse_Result{} + updateLibrariesIndexResponse_ResultResult := result.NewUpdateLibrariesIndexResponse_ResultResult(updateLibrariesIndexResponse_ResultRpc) + mustContainsAllPropertyOfRpcStruct(t, updateLibrariesIndexResponse_ResultRpc, updateLibrariesIndexResponse_ResultResult) + + indexUpdateReportRpc := &rpc.IndexUpdateReport{} + indexUpdateReportResult := result.NewIndexUpdateReportResult(indexUpdateReportRpc) + mustContainsAllPropertyOfRpcStruct(t, indexUpdateReportRpc, indexUpdateReportResult) +} + +func TestEnumsMapsEveryRpcCounterpart(t *testing.T) { + t.Run("LibraryLocation enums maps every element", func(t *testing.T) { + results := make([]result.LibraryLocation, 0, len(rpc.LibraryLocation_name)) + for key := range rpc.LibraryLocation_name { + results = append(results, result.NewLibraryLocation(rpc.LibraryLocation(key))) + } + require.NotEmpty(t, results) + require.Len(t, results, len(rpc.LibraryLocation_name)) + require.True(t, isUnique(results)) + }) + t.Run("LibraryLayout enums maps every element", func(t *testing.T) { + results := make([]result.LibraryLayout, 0, len(rpc.LibraryLayout_name)) + for key := range rpc.LibraryLayout_name { + results = append(results, result.NewLibraryLayout(rpc.LibraryLayout(key))) + } + require.NotEmpty(t, results) + require.Len(t, results, len(rpc.LibraryLayout_name)) + require.True(t, isUnique(results)) + }) + t.Run("LibrarySearchStatus enums maps every element", func(t *testing.T) { + results := make([]result.LibrarySearchStatus, 0, len(rpc.LibrarySearchStatus_name)) + for key := range rpc.LibrarySearchStatus_name { + results = append(results, result.NewLibrarySearchStatus(rpc.LibrarySearchStatus(key))) + } + require.NotEmpty(t, results) + require.Len(t, results, len(rpc.LibrarySearchStatus_name)) + require.True(t, isUnique(results)) + }) + t.Run("IndexUpdateReport_Status enums maps every element", func(t *testing.T) { + results := make([]result.IndexUpdateReport_Status, 0, len(rpc.IndexUpdateReport_Status_name)) + for key := range rpc.IndexUpdateReport_Status_name { + results = append(results, result.NewIndexUpdateReport_Status(rpc.IndexUpdateReport_Status(key))) + } + require.NotEmpty(t, results) + require.Len(t, results, len(rpc.IndexUpdateReport_Status_name)) + require.True(t, isUnique(results)) + }) +} + +func isUnique[T comparable](s []T) bool { + seen := map[T]bool{} + for _, v := range s { + if _, ok := seen[v]; ok { + return false + } + seen[v] = true + } + return true +} diff --git a/internal/cli/feedback/rpc_progress.go b/internal/cli/feedback/rpc_progress.go index c9a413a4fdb..0d63d5cd346 100644 --- a/internal/cli/feedback/rpc_progress.go +++ b/internal/cli/feedback/rpc_progress.go @@ -18,6 +18,7 @@ package feedback import ( "sync" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/cmaglie/pb" ) @@ -70,7 +71,7 @@ func NewDownloadProgressBarCB() func(*rpc.DownloadProgress) { if end := curr.GetEnd(); end != nil { msg := end.GetMessage() if end.GetSuccess() && msg == "" { - msg = tr("downloaded") + msg = i18n.Tr("downloaded") } if started { bar.FinishPrintOver(label + " " + msg) diff --git a/internal/cli/feedback/stdio.go b/internal/cli/feedback/stdio.go index 87f37f0c227..e279ce2979d 100644 --- a/internal/cli/feedback/stdio.go +++ b/internal/cli/feedback/stdio.go @@ -19,6 +19,8 @@ import ( "bytes" "errors" "io" + + "github.com/arduino/arduino-cli/internal/i18n" ) // DirectStreams returns the underlying io.Writer to directly stream to @@ -32,7 +34,7 @@ func DirectStreams() (io.Writer, io.Writer, error) { panic("output format not yet selected") } if format != Text { - return nil, nil, errors.New(tr("available only in text format")) + return nil, nil, errors.New(i18n.Tr("available only in text format")) } return stdOut, stdErr, nil } diff --git a/table/cell.go b/internal/cli/feedback/table/cell.go similarity index 100% rename from table/cell.go rename to internal/cli/feedback/table/cell.go diff --git a/table/table.go b/internal/cli/feedback/table/table.go similarity index 100% rename from table/table.go rename to internal/cli/feedback/table/table.go diff --git a/internal/cli/feedback/terminal.go b/internal/cli/feedback/terminal.go index 11c466bae8b..8dc4c09a611 100644 --- a/internal/cli/feedback/terminal.go +++ b/internal/cli/feedback/terminal.go @@ -22,6 +22,8 @@ import ( "io" "os" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/mattn/go-isatty" "golang.org/x/term" ) @@ -33,10 +35,7 @@ func InteractiveStreams() (io.Reader, io.Writer, error) { panic("output format not yet selected") } if format != Text { - return nil, nil, errors.New(tr("interactive terminal not supported for the '%s' output format", format)) - } - if !isTerminal() { - return nil, nil, errors.New(tr("not running in a terminal")) + return nil, nil, errors.New(i18n.Tr("interactive terminal not supported for the '%s' output format", format)) } return os.Stdin, stdOut, nil } @@ -45,11 +44,19 @@ var oldStateStdin *term.State // SetRawModeStdin sets the stdin stream in RAW mode (no buffering, echo disabled, // no terminal escape codes nor signals interpreted) -func SetRawModeStdin() { +func SetRawModeStdin() error { if oldStateStdin != nil { panic("terminal already in RAW mode") } - oldStateStdin, _ = term.MakeRaw(int(os.Stdin.Fd())) + if !IsInteractive() { + return errors.New(i18n.Tr("not running in a terminal")) + } + old, err := term.MakeRaw(int(os.Stdin.Fd())) + if err != nil { + return err + } + oldStateStdin = old + return nil } // RestoreModeStdin restore the terminal settings to the normal non-RAW state. This @@ -63,17 +70,31 @@ func RestoreModeStdin() { oldStateStdin = nil } -func isTerminal() bool { - return term.IsTerminal(int(os.Stdin.Fd())) +// IsInteractive returns true if the CLI is interactive (it can receive inputs from terminal/console) +func IsInteractive() bool { + return isatty.IsTerminal(os.Stdin.Fd()) || isatty.IsCygwinTerminal(os.Stdin.Fd()) +} + +// HasConsole returns true if the CLI outputs to a terminal/console +func HasConsole() bool { + return isatty.IsTerminal(os.Stdout.Fd()) || isatty.IsCygwinTerminal(os.Stdout.Fd()) +} + +// IsCI returns true if running on CI environments. +// (based on https://github.com/watson/ci-info/blob/HEAD/index.js) +func IsCI() bool { + return os.Getenv("CI") != "" || // GitHub Actions, Travis CI, CircleCI, Cirrus CI, GitLab CI, AppVeyor, CodeShip, dsari + os.Getenv("BUILD_NUMBER") != "" || // Jenkins, TeamCity + os.Getenv("RUN_ID") != "" // TaskCluster, dsari } // InputUserField prompts the user to input the provided user field. func InputUserField(prompt string, secret bool) (string, error) { if format != Text { - return "", errors.New(tr("user input not supported for the '%s' output format", format)) + return "", errors.New(i18n.Tr("user input not supported for the '%s' output format", format)) } - if !isTerminal() { - return "", errors.New(tr("user input not supported in non interactive mode")) + if !IsInteractive() { + return "", errors.New(i18n.Tr("user input not supported in non interactive mode")) } fmt.Fprintf(stdOut, "%s: ", prompt) diff --git a/internal/cli/feedback/warn_deprecated.go b/internal/cli/feedback/warn_deprecated.go new file mode 100644 index 00000000000..1354ef77269 --- /dev/null +++ b/internal/cli/feedback/warn_deprecated.go @@ -0,0 +1,45 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package feedback + +import ( + "fmt" + "strings" + + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// WarnAboutDeprecatedFiles warns the user that a type of sketch files are deprecated +func WarnAboutDeprecatedFiles(s *rpc.Sketch) { + var files []string + for _, f := range s.GetOtherSketchFiles() { + if strings.HasSuffix(f, ".pde") { + files = append(files, f) + } + } + if strings.HasSuffix(s.GetMainFile(), ".pde") { + files = append(files, s.GetMainFile()) + } + if len(files) > 0 { + // .pde files are still supported but deprecated, this warning urges the user to rename them + msg := i18n.Tr("Sketches with .pde extension are deprecated, please rename the following files to .ino:") + for _, f := range files { + msg += fmt.Sprintf("\n - %s", f) + } + Warning(msg) + } +} diff --git a/internal/cli/generatedocs/generatedocs.go b/internal/cli/generatedocs/generatedocs.go index 0be07a768cb..d8bdd0a18af 100644 --- a/internal/cli/generatedocs/generatedocs.go +++ b/internal/cli/generatedocs/generatedocs.go @@ -19,8 +19,8 @@ import ( "os" "path/filepath" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/sirupsen/logrus" "github.com/spf13/cobra" "github.com/spf13/cobra/doc" @@ -35,14 +35,14 @@ var ( func NewCommand() *cobra.Command { generateDocsCommand := &cobra.Command{ Use: "generate-docs", - Short: tr("Generates bash completion and command manpages."), - Long: tr("Generates bash completion and command manpages."), + Short: i18n.Tr("Generates bash completion and command manpages."), + Long: i18n.Tr("Generates bash completion and command manpages."), Example: " " + os.Args[0] + " generate-docs bash-completions", Hidden: true, } generateDocsCommand.PersistentFlags().StringVarP(&outputDir, "output-dir", "o", "", - tr("Directory where to save generated files. Default is './docs', the directory must exist.")) + i18n.Tr("Directory where to save generated files. Default is './docs', the directory must exist.")) generateDocsCommand.AddCommand(&cobra.Command{ Use: "manpage", Args: cobra.NoArgs, @@ -77,7 +77,7 @@ func generateManPages(cmd *cobra.Command, args []string) { } logrus.WithField("outputDir", outputDir).Info("Generating manpages") header := &doc.GenManHeader{ - Title: tr("ARDUINO COMMAND LINE MANUAL"), + Title: i18n.Tr("ARDUINO COMMAND LINE MANUAL"), Section: "1", } err := doc.GenManTree(cmd.Root(), header, outputDir) diff --git a/internal/cli/instance/instance.go b/internal/cli/instance/instance.go index 60fbe8b54f7..316a1b0baf6 100644 --- a/internal/cli/instance/instance.go +++ b/internal/cli/instance/instance.go @@ -16,43 +16,43 @@ package instance import ( + "context" + "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" ) -var tr = i18n.Tr - // CreateAndInit return a new initialized instance. // If Create fails the CLI prints an error and exits since // to execute further operations a valid Instance is mandatory. // If Init returns errors they're printed only. -func CreateAndInit() *rpc.Instance { - inst, _ := CreateAndInitWithProfile("", nil) +func CreateAndInit(ctx context.Context, srv rpc.ArduinoCoreServiceServer) *rpc.Instance { + inst, _ := CreateAndInitWithProfile(ctx, srv, "", nil) return inst } // CreateAndInitWithProfile returns a new initialized instance using the given profile of the given sketch. // If Create fails the CLI prints an error and exits since to execute further operations a valid Instance is mandatory. // If Init returns errors they're printed only. -func CreateAndInitWithProfile(profileName string, sketchPath *paths.Path) (*rpc.Instance, *rpc.Profile) { - instance, err := create() +func CreateAndInitWithProfile(ctx context.Context, srv rpc.ArduinoCoreServiceServer, profileName string, sketchPath *paths.Path) (*rpc.Instance, *rpc.SketchProfile) { + instance, err := create(ctx, srv) if err != nil { - feedback.Fatal(tr("Error creating instance: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error creating instance: %v", err), feedback.ErrGeneric) } - profile := InitWithProfile(instance, profileName, sketchPath) + profile := InitWithProfile(ctx, srv, instance, profileName, sketchPath) return instance, profile } // create and return a new Instance. -func create() (*rpc.Instance, error) { - res, err := commands.Create(&rpc.CreateRequest{}) +func create(ctx context.Context, srv rpc.ArduinoCoreServiceServer) (*rpc.Instance, error) { + res, err := srv.Create(ctx, &rpc.CreateRequest{}) if err != nil { return nil, err } - return res.Instance, nil + return res.GetInstance(), nil } // Init initializes instance by loading installed libraries and platforms. @@ -60,14 +60,14 @@ func create() (*rpc.Instance, error) { // platform or library that we failed to load. // Package and library indexes files are automatically updated if the // CLI is run for the first time. -func Init(instance *rpc.Instance) { - InitWithProfile(instance, "", nil) +func Init(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance) { + InitWithProfile(ctx, srv, instance, "", nil) } // InitWithProfile initializes instance by loading libraries and platforms specified in the given profile of the given sketch. // In case of loading failures return a list of errors for each platform or library that we failed to load. // Required Package and library indexes files are automatically downloaded. -func InitWithProfile(instance *rpc.Instance, profileName string, sketchPath *paths.Path) *rpc.Profile { +func InitWithProfile(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, profileName string, sketchPath *paths.Path) *rpc.SketchProfile { downloadCallback := feedback.ProgressBar() taskCallback := feedback.TaskProgress() @@ -76,27 +76,28 @@ func InitWithProfile(instance *rpc.Instance, profileName string, sketchPath *pat initReq.SketchPath = sketchPath.String() initReq.Profile = profileName } - var profile *rpc.Profile - err := commands.Init(initReq, func(res *rpc.InitResponse) { + var profile *rpc.SketchProfile + err := srv.Init(initReq, commands.InitStreamResponseToCallbackFunction(ctx, func(res *rpc.InitResponse) error { if st := res.GetError(); st != nil { - feedback.Warning(tr("Error initializing instance: %v", st.Message)) + feedback.Warning(i18n.Tr("Error initializing instance: %v", st.GetMessage())) } if progress := res.GetInitProgress(); progress != nil { - if progress.DownloadProgress != nil { - downloadCallback(progress.DownloadProgress) + if progress.GetDownloadProgress() != nil { + downloadCallback(progress.GetDownloadProgress()) } - if progress.TaskProgress != nil { - taskCallback(progress.TaskProgress) + if progress.GetTaskProgress() != nil { + taskCallback(progress.GetTaskProgress()) } } if p := res.GetProfile(); p != nil { profile = p } - }) + return nil + })) if err != nil { - feedback.Warning(tr("Error initializing instance: %v", err)) + feedback.Warning(i18n.Tr("Error initializing instance: %v", err)) } return profile diff --git a/internal/cli/lib/args.go b/internal/cli/lib/args.go index 75639b8bc84..63d0f7b1696 100644 --- a/internal/cli/lib/args.go +++ b/internal/cli/lib/args.go @@ -17,10 +17,10 @@ package lib import ( "context" - "fmt" + "errors" "strings" - "github.com/arduino/arduino-cli/commands/lib" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) @@ -46,12 +46,12 @@ func ParseLibraryReferenceArg(arg string) (*LibraryReferenceArg, error) { // TODO: check library Name constraints // TODO: check library Version constraints if tokens[0] == "" { - return nil, fmt.Errorf(tr("invalid empty library name")) + return nil, errors.New(i18n.Tr("invalid empty library name")) } ret.Name = tokens[0] if len(tokens) > 1 { if tokens[1] == "" { - return nil, fmt.Errorf(tr("invalid empty library version: %s"), arg) + return nil, errors.New(i18n.Tr("invalid empty library version: %s", arg)) } ret.Version = tokens[1] } @@ -74,9 +74,9 @@ func ParseLibraryReferenceArgs(args []string) ([]*LibraryReferenceArg, error) { // ParseLibraryReferenceArgAndAdjustCase parse a command line argument that reference a // library and possibly adjust the case of the name to match a library in the index -func ParseLibraryReferenceArgAndAdjustCase(instance *rpc.Instance, arg string) (*LibraryReferenceArg, error) { +func ParseLibraryReferenceArgAndAdjustCase(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, arg string) (*LibraryReferenceArg, error) { libRef, _ := ParseLibraryReferenceArg(arg) - res, err := lib.LibrarySearch(context.Background(), &rpc.LibrarySearchRequest{ + res, err := srv.LibrarySearch(ctx, &rpc.LibrarySearchRequest{ Instance: instance, SearchArgs: libRef.Name, }) @@ -98,10 +98,10 @@ func ParseLibraryReferenceArgAndAdjustCase(instance *rpc.Instance, arg string) ( // ParseLibraryReferenceArgsAndAdjustCase is a convenient wrapper that operates on a slice of // strings and calls ParseLibraryReferenceArgAndAdjustCase for each of them. It returns at the first invalid argument. -func ParseLibraryReferenceArgsAndAdjustCase(instance *rpc.Instance, args []string) ([]*LibraryReferenceArg, error) { +func ParseLibraryReferenceArgsAndAdjustCase(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, args []string) ([]*LibraryReferenceArg, error) { ret := []*LibraryReferenceArg{} for _, arg := range args { - if reference, err := ParseLibraryReferenceArgAndAdjustCase(instance, arg); err == nil { + if reference, err := ParseLibraryReferenceArgAndAdjustCase(ctx, srv, instance, arg); err == nil { ret = append(ret, reference) } else { return nil, err diff --git a/internal/cli/lib/check_deps.go b/internal/cli/lib/check_deps.go index b286a2c85a5..48f57291d63 100644 --- a/internal/cli/lib/check_deps.go +++ b/internal/cli/lib/check_deps.go @@ -21,57 +21,64 @@ import ( "os" "sort" - "github.com/arduino/arduino-cli/commands/lib" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/fatih/color" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initDepsCommand() *cobra.Command { +func initDepsCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { + var noOverwrite bool depsCommand := &cobra.Command{ - Use: fmt.Sprintf("deps %s[@%s]...", tr("LIBRARY"), tr("VERSION_NUMBER")), - Short: tr("Check dependencies status for the specified library."), - Long: tr("Check dependencies status for the specified library."), + Use: fmt.Sprintf("deps %s[@%s]...", i18n.Tr("LIBRARY"), i18n.Tr("VERSION_NUMBER")), + Short: i18n.Tr("Check dependencies status for the specified library."), + Long: i18n.Tr("Check dependencies status for the specified library."), Example: "" + - " " + os.Args[0] + " lib deps AudioZero # " + tr("for the latest version.") + "\n" + - " " + os.Args[0] + " lib deps AudioZero@1.0.0 # " + tr("for the specific version."), + " " + os.Args[0] + " lib deps AudioZero # " + i18n.Tr("for the latest version.") + "\n" + + " " + os.Args[0] + " lib deps AudioZero@1.0.0 # " + i18n.Tr("for the specific version."), Args: cobra.ExactArgs(1), - Run: runDepsCommand, + Run: func(cmd *cobra.Command, args []string) { + runDepsCommand(cmd.Context(), srv, args, noOverwrite) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstalledLibraries(), cobra.ShellCompDirectiveDefault + return arguments.GetInstalledLibraries(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } + depsCommand.Flags().BoolVar(&noOverwrite, "no-overwrite", false, i18n.Tr("Do not try to update library dependencies if already installed.")) return depsCommand } -func runDepsCommand(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runDepsCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, noOverwrite bool) { + instance := instance.CreateAndInit(ctx, srv) + logrus.Info("Executing `arduino-cli lib deps`") - libRef, err := ParseLibraryReferenceArgAndAdjustCase(instance, args[0]) + libRef, err := ParseLibraryReferenceArgAndAdjustCase(ctx, srv, instance, args[0]) if err != nil { - feedback.Fatal(tr("Arguments error: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Arguments error: %v", err), feedback.ErrBadArgument) } - deps, err := lib.LibraryResolveDependencies(context.Background(), &rpc.LibraryResolveDependenciesRequest{ - Instance: instance, - Name: libRef.Name, - Version: libRef.Version, + deps, err := srv.LibraryResolveDependencies(ctx, &rpc.LibraryResolveDependenciesRequest{ + Instance: instance, + Name: libRef.Name, + Version: libRef.Version, + DoNotUpdateInstalledLibraries: noOverwrite, }) if err != nil { - feedback.Fatal(tr("Error resolving dependencies for %[1]s: %[2]s", libRef, err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error resolving dependencies for %[1]s: %[2]s", libRef, err), feedback.ErrGeneric) } - feedback.PrintResult(&checkDepResult{deps: deps}) + feedback.PrintResult(&checkDepResult{deps: result.NewLibraryResolveDependenciesResponse(deps)}) } // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type checkDepResult struct { - deps *rpc.LibraryResolveDependenciesResponse + deps *result.LibraryResolveDependenciesResponse } func (dr checkDepResult) Data() interface{} { @@ -79,6 +86,9 @@ func (dr checkDepResult) Data() interface{} { } func (dr checkDepResult) String() string { + if dr.deps == nil || dr.deps.Dependencies == nil { + return "" + } res := "" deps := dr.deps.Dependencies @@ -91,26 +101,29 @@ func (dr checkDepResult) String() string { }) for _, dep := range deps { + if dep == nil { + continue + } res += outputDep(dep) } return res } -func outputDep(dep *rpc.LibraryDependencyStatus) string { +func outputDep(dep *result.LibraryDependencyStatus) string { res := "" green := color.New(color.FgGreen) red := color.New(color.FgRed) yellow := color.New(color.FgYellow) - if dep.GetVersionInstalled() == "" { - res += tr("%s must be installed.", - red.Sprintf("✕ %s %s", dep.GetName(), dep.GetVersionRequired())) - } else if dep.GetVersionInstalled() == dep.GetVersionRequired() { - res += tr("%s is already installed.", - green.Sprintf("✓ %s %s", dep.GetName(), dep.GetVersionRequired())) + if dep.VersionInstalled == "" { + res += i18n.Tr("%s must be installed.", + red.Sprintf("✕ %s %s", dep.Name, dep.VersionRequired)) + } else if dep.VersionInstalled == dep.VersionRequired { + res += i18n.Tr("%s is already installed.", + green.Sprintf("✓ %s %s", dep.Name, dep.VersionRequired)) } else { - res += tr("%[1]s is required but %[2]s is currently installed.", - yellow.Sprintf("✕ %s %s", dep.GetName(), dep.GetVersionRequired()), - yellow.Sprintf("%s", dep.GetVersionInstalled())) + res += i18n.Tr("%[1]s is required but %[2]s is currently installed.", + yellow.Sprintf("✕ %s %s", dep.Name, dep.VersionRequired), + yellow.Sprintf("%s", dep.VersionInstalled)) } res += "\n" return res diff --git a/internal/cli/lib/download.go b/internal/cli/lib/download.go index 3616584a91d..511d38291e8 100644 --- a/internal/cli/lib/download.go +++ b/internal/cli/lib/download.go @@ -20,38 +20,42 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/lib" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initDownloadCommand() *cobra.Command { +func initDownloadCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { downloadCommand := &cobra.Command{ - Use: fmt.Sprintf("download [%s]...", tr("LIBRARY_NAME")), - Short: tr("Downloads one or more libraries without installing them."), - Long: tr("Downloads one or more libraries without installing them."), + Use: fmt.Sprintf("download [%s]...", i18n.Tr("LIBRARY_NAME")), + Short: i18n.Tr("Downloads one or more libraries without installing them."), + Long: i18n.Tr("Downloads one or more libraries without installing them."), Example: "" + - " " + os.Args[0] + " lib download AudioZero # " + tr("for the latest version.") + "\n" + - " " + os.Args[0] + " lib download AudioZero@1.0.0 # " + tr("for a specific version."), + " " + os.Args[0] + " lib download AudioZero # " + i18n.Tr("for the latest version.") + "\n" + + " " + os.Args[0] + " lib download AudioZero@1.0.0 # " + i18n.Tr("for a specific version."), Args: cobra.MinimumNArgs(1), - Run: runDownloadCommand, + Run: func(cmd *cobra.Command, args []string) { + runDownloadCommand(cmd.Context(), srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstallableLibs(), cobra.ShellCompDirectiveDefault + return arguments.GetInstallableLibs(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } return downloadCommand } -func runDownloadCommand(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runDownloadCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli lib download`") - refs, err := ParseLibraryReferenceArgsAndAdjustCase(instance, args) + instance := instance.CreateAndInit(ctx, srv) + + refs, err := ParseLibraryReferenceArgsAndAdjustCase(ctx, srv, instance, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } for _, library := range refs { @@ -60,9 +64,9 @@ func runDownloadCommand(cmd *cobra.Command, args []string) { Name: library.Name, Version: library.Version, } - _, err := lib.LibraryDownload(context.Background(), libraryDownloadRequest, feedback.ProgressBar()) - if err != nil { - feedback.Fatal(tr("Error downloading %[1]s: %[2]v", library, err), feedback.ErrNetwork) + stream := commands.LibraryDownloadStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + if err := srv.LibraryDownload(libraryDownloadRequest, stream); err != nil { + feedback.Fatal(i18n.Tr("Error downloading %[1]s: %[2]v", library, err), feedback.ErrNetwork) } } } diff --git a/internal/cli/lib/examples.go b/internal/cli/lib/examples.go index a6564ec6378..3b418809dfc 100644 --- a/internal/cli/lib/examples.go +++ b/internal/cli/lib/examples.go @@ -22,10 +22,11 @@ import ( "sort" "strings" - "github.com/arduino/arduino-cli/commands/lib" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/fatih/color" @@ -37,46 +38,48 @@ var ( fqbn arguments.Fqbn ) -func initExamplesCommand() *cobra.Command { +func initExamplesCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { examplesCommand := &cobra.Command{ - Use: fmt.Sprintf("examples [%s]", tr("LIBRARY_NAME")), - Short: tr("Shows the list of the examples for libraries."), - Long: tr("Shows the list of the examples for libraries. A name may be given as argument to search a specific library."), + Use: fmt.Sprintf("examples [%s]", i18n.Tr("LIBRARY_NAME")), + Short: i18n.Tr("Shows the list of the examples for libraries."), + Long: i18n.Tr("Shows the list of the examples for libraries. A name may be given as argument to search a specific library."), Example: " " + os.Args[0] + " lib examples Wire", Args: cobra.MaximumNArgs(1), - Run: runExamplesCommand, + Run: func(cmd *cobra.Command, args []string) { + runExamplesCommand(cmd.Context(), srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstalledLibraries(), cobra.ShellCompDirectiveDefault + return arguments.GetInstalledLibraries(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } - fqbn.AddToCommand(examplesCommand) + fqbn.AddToCommand(examplesCommand, srv) return examplesCommand } -func runExamplesCommand(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runExamplesCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli lib examples`") + instance := instance.CreateAndInit(ctx, srv) name := "" if len(args) > 0 { name = args[0] } - res, err := lib.LibraryList(context.Background(), &rpc.LibraryListRequest{ + res, err := srv.LibraryList(ctx, &rpc.LibraryListRequest{ Instance: instance, All: true, Name: name, Fqbn: fqbn.String(), }) if err != nil { - feedback.Fatal(tr("Error getting libraries info: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error getting libraries info: %v", err), feedback.ErrGeneric) } found := []*libraryExamples{} for _, lib := range res.GetInstalledLibraries() { found = append(found, &libraryExamples{ - Library: lib.Library, - Examples: lib.Library.Examples, + Library: result.NewLibrary(lib.GetLibrary()), + Examples: lib.GetLibrary().GetExamples(), }) } @@ -88,21 +91,21 @@ func runExamplesCommand(cmd *cobra.Command, args []string) { // feedback.Result implementation type libraryExamples struct { - Library *rpc.Library `json:"library"` - Examples []string `json:"examples"` + Library *result.Library `json:"library"` + Examples []string `json:"examples"` } type libraryExamplesResult struct { - Examples []*libraryExamples + Examples []*libraryExamples `json:"examples"` } func (ir libraryExamplesResult) Data() interface{} { - return ir.Examples + return ir } func (ir libraryExamplesResult) String() string { if ir.Examples == nil || len(ir.Examples) == 0 { - return tr("No libraries found.") + return i18n.Tr("No libraries found.") } sort.Slice(ir.Examples, func(i, j int) bool { @@ -113,11 +116,11 @@ func (ir libraryExamplesResult) String() string { for _, lib := range ir.Examples { name := lib.Library.Name if lib.Library.ContainerPlatform != "" { - name += " (" + lib.Library.GetContainerPlatform() + ")" - } else if lib.Library.Location != rpc.LibraryLocation_LIBRARY_LOCATION_USER { - name += " (" + lib.Library.GetLocation().String() + ")" + name += " (" + lib.Library.ContainerPlatform + ")" + } else if lib.Library.Location != result.LibraryLocationUser { + name += " (" + string(lib.Library.Location) + ")" } - r := tr("Examples for library %s", color.GreenString("%s", name)) + "\n" + r := i18n.Tr("Examples for library %s", color.GreenString("%s", name)) + "\n" sort.Slice(lib.Examples, func(i, j int) bool { return strings.ToLower(lib.Examples[i]) < strings.ToLower(lib.Examples[j]) }) diff --git a/internal/cli/lib/install.go b/internal/cli/lib/install.go index 549f4d7c328..29ae88ccdcd 100644 --- a/internal/cli/lib/install.go +++ b/internal/cli/lib/install.go @@ -21,11 +21,11 @@ import ( "os" "strings" - "github.com/arduino/arduino-cli/commands/lib" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/arduino-cli/version" "github.com/arduino/go-paths-helper" @@ -34,68 +34,70 @@ import ( semver "go.bug.st/relaxed-semver" ) -func initInstallCommand() *cobra.Command { +func initInstallCommand(srv rpc.ArduinoCoreServiceServer, settings *rpc.Configuration) *cobra.Command { var noDeps bool var noOverwrite bool var gitURL bool var zipPath bool var useBuiltinLibrariesDir bool + enableUnsafeInstall := settings.GetLibrary().GetEnableUnsafeInstall() installCommand := &cobra.Command{ - Use: fmt.Sprintf("install %s[@%s]...", tr("LIBRARY"), tr("VERSION_NUMBER")), - Short: tr("Installs one or more specified libraries into the system."), - Long: tr("Installs one or more specified libraries into the system."), + Use: fmt.Sprintf("install %s[@%s]...", i18n.Tr("LIBRARY"), i18n.Tr("VERSION_NUMBER")), + Short: i18n.Tr("Installs one or more specified libraries into the system."), + Long: i18n.Tr("Installs one or more specified libraries into the system."), Example: "" + - " " + os.Args[0] + " lib install AudioZero # " + tr("for the latest version.") + "\n" + - " " + os.Args[0] + " lib install AudioZero@1.0.0 # " + tr("for the specific version.") + "\n" + + " " + os.Args[0] + " lib install AudioZero # " + i18n.Tr("for the latest version.") + "\n" + + " " + os.Args[0] + " lib install AudioZero@1.0.0 # " + i18n.Tr("for the specific version.") + "\n" + " " + os.Args[0] + " lib install --git-url https://github.com/arduino-libraries/WiFi101.git https://github.com/arduino-libraries/ArduinoBLE.git\n" + - " " + os.Args[0] + " lib install --git-url https://github.com/arduino-libraries/WiFi101.git#0.16.0 # " + tr("for the specific version.") + "\n" + + " " + os.Args[0] + " lib install --git-url https://github.com/arduino-libraries/WiFi101.git#0.16.0 # " + i18n.Tr("for the specific version.") + "\n" + " " + os.Args[0] + " lib install --zip-path /path/to/WiFi101.zip /path/to/ArduinoBLE.zip\n", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - runInstallCommand(args, noDeps, noOverwrite, gitURL, zipPath, useBuiltinLibrariesDir) + runInstallCommand(cmd.Context(), srv, args, noDeps, noOverwrite, gitURL, zipPath, useBuiltinLibrariesDir, enableUnsafeInstall) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstallableLibs(), cobra.ShellCompDirectiveDefault + return arguments.GetInstallableLibs(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } - installCommand.Flags().BoolVar(&noDeps, "no-deps", false, tr("Do not install dependencies.")) - installCommand.Flags().BoolVar(&noOverwrite, "no-overwrite", false, tr("Do not overwrite already installed libraries.")) - installCommand.Flags().BoolVar(&gitURL, "git-url", false, tr("Enter git url for libraries hosted on repositories")) - installCommand.Flags().BoolVar(&zipPath, "zip-path", false, tr("Enter a path to zip file")) - installCommand.Flags().BoolVar(&useBuiltinLibrariesDir, "install-in-builtin-dir", false, tr("Install libraries in the IDE-Builtin directory")) + installCommand.Flags().BoolVar(&noDeps, "no-deps", false, i18n.Tr("Do not install dependencies.")) + installCommand.Flags().BoolVar(&noOverwrite, "no-overwrite", false, i18n.Tr("Do not overwrite already installed libraries.")) + installCommand.Flags().BoolVar(&gitURL, "git-url", false, i18n.Tr("Enter git url for libraries hosted on repositories")) + installCommand.Flags().BoolVar(&zipPath, "zip-path", false, i18n.Tr("Enter a path to zip file")) + installCommand.Flags().BoolVar(&useBuiltinLibrariesDir, "install-in-builtin-dir", false, i18n.Tr("Install libraries in the IDE-Builtin directory")) return installCommand } -func runInstallCommand(args []string, noDeps bool, noOverwrite bool, gitURL bool, zipPath bool, useBuiltinLibrariesDir bool) { - instance := instance.CreateAndInit() +func runInstallCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, noDeps bool, noOverwrite bool, gitURL bool, zipPath bool, useBuiltinLibrariesDir bool, enableUnsafeInstall bool) { + instance := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli lib install`") if zipPath || gitURL { - if !configuration.Settings.GetBool("library.enable_unsafe_install") { + if !enableUnsafeInstall { documentationURL := "https://arduino.github.io/arduino-cli/latest/configuration/#configuration-keys" _, err := semver.Parse(version.VersionInfo.VersionString) if err == nil { split := strings.Split(version.VersionInfo.VersionString, ".") documentationURL = fmt.Sprintf("https://arduino.github.io/arduino-cli/%s.%s/configuration/#configuration-keys", split[0], split[1]) } - feedback.Fatal(tr("--git-url and --zip-path are disabled by default, for more information see: %v", documentationURL), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("--git-url and --zip-path are disabled by default, for more information see: %v", documentationURL), feedback.ErrGeneric) } - feedback.Print(tr("--git-url and --zip-path flags allow installing untrusted files, use it at your own risk.")) + feedback.Print(i18n.Tr("--git-url and --zip-path flags allow installing untrusted files, use it at your own risk.")) if useBuiltinLibrariesDir { - feedback.Fatal(tr("--git-url or --zip-path can't be used with --install-in-builtin-dir"), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("--git-url or --zip-path can't be used with --install-in-builtin-dir"), feedback.ErrGeneric) } } if zipPath { for _, path := range args { - err := lib.ZipLibraryInstall(context.Background(), &rpc.ZipLibraryInstallRequest{ + req := &rpc.ZipLibraryInstallRequest{ Instance: instance, Path: path, Overwrite: !noOverwrite, - }, feedback.TaskProgress()) - if err != nil { - feedback.Fatal(tr("Error installing Zip Library: %v", err), feedback.ErrGeneric) + } + stream := commands.ZipLibraryInstallStreamResponseToCallbackFunction(ctx, feedback.TaskProgress()) + if err := srv.ZipLibraryInstall(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error installing Zip Library: %v", err), feedback.ErrGeneric) } } return @@ -106,25 +108,26 @@ func runInstallCommand(args []string, noDeps bool, noOverwrite bool, gitURL bool if url == "." { wd, err := paths.Getwd() if err != nil { - feedback.Fatal(tr("Couldn't get current working directory: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Couldn't get current working directory: %v", err), feedback.ErrGeneric) } url = wd.String() } - err := lib.GitLibraryInstall(context.Background(), &rpc.GitLibraryInstallRequest{ + req := &rpc.GitLibraryInstallRequest{ Instance: instance, Url: url, Overwrite: !noOverwrite, - }, feedback.TaskProgress()) - if err != nil { - feedback.Fatal(tr("Error installing Git Library: %v", err), feedback.ErrGeneric) + } + stream := commands.GitLibraryInstallStreamResponseToCallbackFunction(ctx, feedback.TaskProgress()) + if err := srv.GitLibraryInstall(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error installing Git Library: %v", err), feedback.ErrGeneric) } } return } - libRefs, err := ParseLibraryReferenceArgsAndAdjustCase(instance, args) + libRefs, err := ParseLibraryReferenceArgsAndAdjustCase(ctx, srv, instance, args) if err != nil { - feedback.Fatal(tr("Arguments error: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Arguments error: %v", err), feedback.ErrBadArgument) } for _, libRef := range libRefs { @@ -140,9 +143,9 @@ func runInstallCommand(args []string, noDeps bool, noOverwrite bool, gitURL bool NoOverwrite: noOverwrite, InstallLocation: installLocation, } - err := lib.LibraryInstall(context.Background(), libraryInstallRequest, feedback.ProgressBar(), feedback.TaskProgress()) - if err != nil { - feedback.Fatal(tr("Error installing %s: %v", libRef.Name, err), feedback.ErrGeneric) + stream := commands.LibraryInstallStreamResponseToCallbackFunction(ctx, feedback.ProgressBar(), feedback.TaskProgress()) + if err := srv.LibraryInstall(libraryInstallRequest, stream); err != nil { + feedback.Fatal(i18n.Tr("Error installing %s: %v", libRef.Name, err), feedback.ErrGeneric) } } } diff --git a/internal/cli/lib/lib.go b/internal/cli/lib/lib.go index c6cdbb59b58..45081bda391 100644 --- a/internal/cli/lib/lib.go +++ b/internal/cli/lib/lib.go @@ -18,31 +18,30 @@ package lib import ( "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand created a new `lib` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer, defaultSettings *rpc.Configuration) *cobra.Command { libCommand := &cobra.Command{ Use: "lib", - Short: tr("Arduino commands about libraries."), - Long: tr("Arduino commands about libraries."), + Short: i18n.Tr("Arduino commands about libraries."), + Long: i18n.Tr("Arduino commands about libraries."), Example: "" + " " + os.Args[0] + " lib install AudioZero\n" + " " + os.Args[0] + " lib update-index", } - libCommand.AddCommand(initDownloadCommand()) - libCommand.AddCommand(initInstallCommand()) - libCommand.AddCommand(initListCommand()) - libCommand.AddCommand(initExamplesCommand()) - libCommand.AddCommand(initSearchCommand()) - libCommand.AddCommand(initUninstallCommand()) - libCommand.AddCommand(initUpgradeCommand()) - libCommand.AddCommand(initUpdateIndexCommand()) - libCommand.AddCommand(initDepsCommand()) + libCommand.AddCommand(initDownloadCommand(srv)) + libCommand.AddCommand(initInstallCommand(srv, defaultSettings)) + libCommand.AddCommand(initListCommand(srv)) + libCommand.AddCommand(initExamplesCommand(srv)) + libCommand.AddCommand(initSearchCommand(srv)) + libCommand.AddCommand(initUninstallCommand(srv)) + libCommand.AddCommand(initUpgradeCommand(srv)) + libCommand.AddCommand(initUpdateIndexCommand(srv)) + libCommand.AddCommand(initDepsCommand(srv)) return libCommand } diff --git a/internal/cli/lib/list.go b/internal/cli/lib/list.go index ea644367db5..d316e8b3756 100644 --- a/internal/cli/lib/list.go +++ b/internal/cli/lib/list.go @@ -22,22 +22,23 @@ import ( "sort" "strings" - "github.com/arduino/arduino-cli/commands/lib" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initListCommand() *cobra.Command { +func initListCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var all bool var updatable bool listCommand := &cobra.Command{ - Use: fmt.Sprintf("list [%s]", tr("LIBNAME")), - Short: tr("Shows a list of installed libraries."), - Long: tr(`Shows a list of installed libraries. + Use: fmt.Sprintf("list [%s]", i18n.Tr("LIBNAME")), + Short: i18n.Tr("Shows a list of installed libraries."), + Long: i18n.Tr(`Shows a list of installed libraries. If the LIBNAME parameter is specified the listing is limited to that specific library. By default the libraries provided as built-in by platforms/core are @@ -45,40 +46,41 @@ not listed, they can be listed by adding the --all flag.`), Example: " " + os.Args[0] + " lib list", Args: cobra.MaximumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() + ctx := cmd.Context() + instance := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli lib list`") - List(instance, args, all, updatable) + List(ctx, srv, instance, args, all, updatable) }, } - listCommand.Flags().BoolVar(&all, "all", false, tr("Include built-in libraries (from platforms and IDE) in listing.")) - fqbn.AddToCommand(listCommand) - listCommand.Flags().BoolVar(&updatable, "updatable", false, tr("List updatable libraries.")) + listCommand.Flags().BoolVar(&all, "all", false, i18n.Tr("Include built-in libraries (from platforms and IDE) in listing.")) + fqbn.AddToCommand(listCommand, srv) + listCommand.Flags().BoolVar(&updatable, "updatable", false, i18n.Tr("List updatable libraries.")) return listCommand } // List gets and prints a list of installed libraries. -func List(instance *rpc.Instance, args []string, all bool, updatable bool) { - installedLibs := GetList(instance, args, all, updatable) +func List(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, args []string, all bool, updatable bool) { + installedLibs := GetList(ctx, srv, instance, args, all, updatable) + + installedLibsResult := make([]*result.InstalledLibrary, len(installedLibs)) + for i, v := range installedLibs { + installedLibsResult[i] = result.NewInstalledLibrary(v) + } feedback.PrintResult(installedResult{ onlyUpdates: updatable, - installedLibs: installedLibs, + InstalledLibs: installedLibsResult, }) logrus.Info("Done") } // GetList returns a list of installed libraries. -func GetList( - instance *rpc.Instance, - args []string, - all bool, - updatable bool, -) []*rpc.InstalledLibrary { +func GetList(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, args []string, all bool, updatable bool) []*rpc.InstalledLibrary { name := "" if len(args) > 0 { name = args[0] } - res, err := lib.LibraryList(context.Background(), &rpc.LibraryListRequest{ + res, err := srv.LibraryList(ctx, &rpc.LibraryListRequest{ Instance: instance, All: all, Updatable: updatable, @@ -86,7 +88,7 @@ func GetList( Fqbn: fqbn.String(), }) if err != nil { - feedback.Fatal(tr("Error listing libraries: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error listing libraries: %v", err), feedback.ErrGeneric) } libs := []*rpc.InstalledLibrary{} @@ -94,7 +96,7 @@ func GetList( libs = res.GetInstalledLibraries() } else { for _, lib := range res.GetInstalledLibraries() { - if lib.Library.CompatibleWith[fqbn.String()] { + if lib.GetLibrary().GetCompatibleWith()[fqbn.String()] { libs = append(libs, lib) } } @@ -112,35 +114,35 @@ func GetList( // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type installedResult struct { + InstalledLibs []*result.InstalledLibrary `json:"installed_libraries"` onlyUpdates bool - installedLibs []*rpc.InstalledLibrary } func (ir installedResult) Data() interface{} { - return ir.installedLibs + return ir } func (ir installedResult) String() string { - if len(ir.installedLibs) == 0 { + if len(ir.InstalledLibs) == 0 { if ir.onlyUpdates { - return tr("No libraries update is available.") + return i18n.Tr("No libraries update is available.") } - return tr("No libraries installed.") + return i18n.Tr("No libraries installed.") } - sort.Slice(ir.installedLibs, func(i, j int) bool { - return strings.ToLower(ir.installedLibs[i].Library.Name) < strings.ToLower(ir.installedLibs[j].Library.Name) || - strings.ToLower(ir.installedLibs[i].Library.ContainerPlatform) < strings.ToLower(ir.installedLibs[j].Library.ContainerPlatform) + sort.Slice(ir.InstalledLibs, func(i, j int) bool { + return strings.ToLower(ir.InstalledLibs[i].Library.Name) < strings.ToLower(ir.InstalledLibs[j].Library.Name) || + strings.ToLower(ir.InstalledLibs[i].Library.ContainerPlatform) < strings.ToLower(ir.InstalledLibs[j].Library.ContainerPlatform) }) t := table.New() - t.SetHeader(tr("Name"), tr("Installed"), tr("Available"), tr("Location"), tr("Description")) + t.SetHeader(i18n.Tr("Name"), i18n.Tr("Installed"), i18n.Tr("Available"), i18n.Tr("Location"), i18n.Tr("Description")) t.SetColumnWidthMode(1, table.Average) t.SetColumnWidthMode(2, table.Average) t.SetColumnWidthMode(4, table.Average) lastName := "" - for _, libMeta := range ir.installedLibs { - lib := libMeta.GetLibrary() + for _, libMeta := range ir.InstalledLibs { + lib := libMeta.Library name := lib.Name if name == lastName { name = ` "` @@ -148,15 +150,15 @@ func (ir installedResult) String() string { lastName = name } - location := lib.GetLocation().String() + location := string(lib.Location) if lib.ContainerPlatform != "" { - location = lib.GetContainerPlatform() + location = lib.ContainerPlatform } available := "" sentence := "" - if libMeta.GetRelease() != nil { - available = libMeta.GetRelease().GetVersion() + if libMeta.Release != nil { + available = libMeta.Release.Version sentence = lib.Sentence } diff --git a/internal/cli/lib/search.go b/internal/cli/lib/search.go index c44ced3778b..7103c5d9472 100644 --- a/internal/cli/lib/search.go +++ b/internal/cli/lib/search.go @@ -23,64 +23,111 @@ import ( "time" "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/lib" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initSearchCommand() *cobra.Command { +func initSearchCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var namesOnly bool var omitReleasesDetails bool searchCommand := &cobra.Command{ - Use: fmt.Sprintf("search [%s]", tr("LIBRARY_NAME")), - Short: tr("Searches for one or more libraries data."), - Long: tr("Search for one or more libraries data (case insensitive search)."), - Example: " " + os.Args[0] + " lib search audio", - Args: cobra.ArbitraryArgs, + Use: fmt.Sprintf("search [%s ...]", i18n.Tr("SEARCH_TERM")), + Short: i18n.Tr("Searches for one or more libraries matching a query."), + Long: i18n.Tr(`Search for libraries matching zero or more search terms. + +All searches are performed in a case-insensitive fashion. Queries containing +multiple search terms will return only libraries that match all of the terms. + +Search terms that do not match the QV syntax described below are basic search +terms, and will match libraries that include the term anywhere in any of the +following fields: + - Author + - Name + - Paragraph + - Provides + - Sentence + +A special syntax, called qualifier-value (QV), indicates that a search term +should be compared against only one field of each library index entry. This +syntax uses the name of an index field (case-insensitive), an equals sign (=) +or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'. + +QV search terms that use a colon separator will match all libraries with the +value anywhere in the named field, and QV search terms that use an equals +separator will match only libraries with exactly the provided value in the +named field. + +QV search terms can include embedded spaces using double-quote (") characters +around the value or the entire term, e.g. 'category="Data Processing"' and +'"category=Data Processing"' are equivalent. A QV term can include a literal +double-quote character by preceding it with a backslash (\) character. + +NOTE: QV search terms using double-quote or backslash characters that are +passed as command-line arguments may require quoting or escaping to prevent +the shell from interpreting those characters. + +In addition to the fields listed above, QV terms can use these qualifiers: + - Architectures + - Category + - Dependencies + - License + - Maintainer + - Types + - Version + - Website + `), + Example: " " + os.Args[0] + " lib search audio # " + i18n.Tr("basic search for \"audio\"") + "\n" + + " " + os.Args[0] + " lib search name:buzzer # " + i18n.Tr("libraries with \"buzzer\" in the Name field") + "\n" + + " " + os.Args[0] + " lib search name=pcf8523 # " + i18n.Tr("libraries with a Name exactly matching \"pcf8523\"") + "\n" + + " " + os.Args[0] + " lib search \"author:\\\"Daniel Garcia\\\"\" # " + i18n.Tr("libraries authored by Daniel Garcia") + "\n" + + " " + os.Args[0] + " lib search author=Adafruit name:gfx # " + i18n.Tr("libraries authored only by Adafruit with \"gfx\" in their Name") + "\n" + + " " + os.Args[0] + " lib search esp32 display maintainer=espressif # " + i18n.Tr("basic search for \"esp32\" and \"display\" limited to official Maintainer") + "\n" + + " " + os.Args[0] + " lib search dependencies:IRremote # " + i18n.Tr("libraries that depend on at least \"IRremote\"") + "\n" + + " " + os.Args[0] + " lib search dependencies=IRremote # " + i18n.Tr("libraries that depend only on \"IRremote\"") + "\n", + Args: cobra.ArbitraryArgs, Run: func(cmd *cobra.Command, args []string) { - runSearchCommand(args, namesOnly, omitReleasesDetails) + runSearchCommand(cmd.Context(), srv, args, namesOnly, omitReleasesDetails) }, } - searchCommand.Flags().BoolVar(&namesOnly, "names", false, tr("Show library names only.")) - searchCommand.Flags().BoolVar(&omitReleasesDetails, "omit-releases-details", false, tr("Omit library details far all versions except the latest (produce a more compact JSON output).")) + searchCommand.Flags().BoolVar(&namesOnly, "names", false, i18n.Tr("Show library names only.")) + searchCommand.Flags().BoolVar(&omitReleasesDetails, "omit-releases-details", false, i18n.Tr("Omit library details far all versions except the latest (produce a more compact JSON output).")) return searchCommand } // indexUpdateInterval specifies the time threshold over which indexes are updated const indexUpdateInterval = 60 * time.Minute -func runSearchCommand(args []string, namesOnly bool, omitReleasesDetails bool) { - inst := instance.CreateAndInit() +func runSearchCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, namesOnly bool, omitReleasesDetails bool) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli lib search`") - if indexNeedsUpdating(indexUpdateInterval) { - if err := commands.UpdateLibrariesIndex( - context.Background(), - &rpc.UpdateLibrariesIndexRequest{Instance: inst}, - feedback.ProgressBar(), - ); err != nil { - feedback.Fatal(tr("Error updating library index: %v", err), feedback.ErrGeneric) - } - instance.Init(inst) + stream, res := commands.UpdateLibrariesIndexStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + req := &rpc.UpdateLibrariesIndexRequest{Instance: inst, UpdateIfOlderThanSecs: int64(indexUpdateInterval.Seconds())} + if err := srv.UpdateLibrariesIndex(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error updating library index: %v", err), feedback.ErrGeneric) + } + if res().GetLibrariesIndex().GetStatus() == rpc.IndexUpdateReport_STATUS_UPDATED { + instance.Init(ctx, srv, inst) } - searchResp, err := lib.LibrarySearch(context.Background(), &rpc.LibrarySearchRequest{ + // Perform library search + searchResp, err := srv.LibrarySearch(ctx, &rpc.LibrarySearchRequest{ Instance: inst, SearchArgs: strings.Join(args, " "), OmitReleasesDetails: omitReleasesDetails, }) if err != nil { - feedback.Fatal(tr("Error searching for Libraries: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error searching for Libraries: %v", err), feedback.ErrGeneric) } - feedback.PrintResult(result{ - results: searchResp, + feedback.PrintResult(librarySearchResult{ + results: result.NewLibrarySearchResponse(searchResp), namesOnly: namesOnly, }) @@ -89,12 +136,12 @@ func runSearchCommand(args []string, namesOnly bool, omitReleasesDetails bool) { // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation -type result struct { - results *rpc.LibrarySearchResponse +type librarySearchResult struct { + results *result.LibrarySearchResponse namesOnly bool } -func (res result) Data() interface{} { +func (res librarySearchResult) Data() interface{} { if res.namesOnly { type LibName struct { Name string `json:"name"` @@ -105,89 +152,69 @@ func (res result) Data() interface{} { } names := []LibName{} - results := res.results.GetLibraries() - for _, lib := range results { + for _, lib := range res.results.Libraries { names = append(names, LibName{lib.Name}) } - return NamesOnly{ - names, - } + return NamesOnly{names} } return res.results } -func (res result) String() string { - results := res.results.GetLibraries() +func (res librarySearchResult) String() string { + results := res.results.Libraries if len(results) == 0 { - return tr("No libraries matching your search.") + return i18n.Tr("No libraries matching your search.") } var out strings.Builder - if res.results.GetStatus() == rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_FAILED { - out.WriteString(tr("No libraries matching your search.\nDid you mean...\n")) + if res.results.Status == result.LibrarySearchStatusFailed { + out.WriteString(i18n.Tr("No libraries matching your search.\nDid you mean...\n")) } for _, lib := range results { - if res.results.GetStatus() == rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS { - out.WriteString(tr(`Name: "%s"`, lib.Name) + "\n") + if res.results.Status == result.LibrarySearchStatusSuccess { + out.WriteString(i18n.Tr(`Name: "%s"`, lib.Name) + "\n") if res.namesOnly { continue } } else { - out.WriteString(fmt.Sprintf("%s\n", lib.Name)) + out.WriteString(lib.Name + "\n") continue } - latest := lib.GetLatest() + latest := lib.Latest deps := []string{} - for _, dep := range latest.GetDependencies() { - if dep.GetVersionConstraint() == "" { - deps = append(deps, dep.GetName()) + for _, dep := range latest.Dependencies { + if dep.VersionConstraint == "" { + deps = append(deps, dep.Name) } else { - deps = append(deps, dep.GetName()+" ("+dep.GetVersionConstraint()+")") + deps = append(deps, dep.Name+" ("+dep.VersionConstraint+")") } } - out.WriteString(fmt.Sprintf(" "+tr("Author: %s")+"\n", latest.Author)) - out.WriteString(fmt.Sprintf(" "+tr("Maintainer: %s")+"\n", latest.Maintainer)) - out.WriteString(fmt.Sprintf(" "+tr("Sentence: %s")+"\n", latest.Sentence)) - out.WriteString(fmt.Sprintf(" "+tr("Paragraph: %s")+"\n", latest.Paragraph)) - out.WriteString(fmt.Sprintf(" "+tr("Website: %s")+"\n", latest.Website)) + out.WriteString(" " + i18n.Tr("Author: %s", latest.Author) + "\n") + out.WriteString(" " + i18n.Tr("Maintainer: %s", latest.Maintainer) + "\n") + out.WriteString(" " + i18n.Tr("Sentence: %s", latest.Sentence) + "\n") + out.WriteString(" " + i18n.Tr("Paragraph: %s", latest.Paragraph) + "\n") + out.WriteString(" " + i18n.Tr("Website: %s", latest.Website) + "\n") if latest.License != "" { - out.WriteString(fmt.Sprintf(" "+tr("License: %s")+"\n", latest.License)) + out.WriteString(" " + i18n.Tr("License: %s", latest.License) + "\n") } - out.WriteString(fmt.Sprintf(" "+tr("Category: %s")+"\n", latest.Category)) - out.WriteString(fmt.Sprintf(" "+tr("Architecture: %s")+"\n", strings.Join(latest.Architectures, ", "))) - out.WriteString(fmt.Sprintf(" "+tr("Types: %s")+"\n", strings.Join(latest.Types, ", "))) - out.WriteString(fmt.Sprintf(" "+tr("Versions: %s")+"\n", strings.ReplaceAll(fmt.Sprint(lib.GetAvailableVersions()), " ", ", "))) + out.WriteString(" " + i18n.Tr("Category: %s", latest.Category) + "\n") + out.WriteString(" " + i18n.Tr("Architecture: %s", strings.Join(latest.Architectures, ", ")) + "\n") + out.WriteString(" " + i18n.Tr("Types: %s", strings.Join(latest.Types, ", ")) + "\n") + out.WriteString(" " + i18n.Tr("Versions: %s", strings.ReplaceAll(fmt.Sprint(lib.AvailableVersions), " ", ", ")) + "\n") if len(latest.ProvidesIncludes) > 0 { - out.WriteString(fmt.Sprintf(" "+tr("Provides includes: %s")+"\n", strings.Join(latest.ProvidesIncludes, ", "))) + out.WriteString(" " + i18n.Tr("Provides includes: %s", strings.Join(latest.ProvidesIncludes, ", ")) + "\n") } if len(latest.Dependencies) > 0 { - out.WriteString(fmt.Sprintf(" "+tr("Dependencies: %s")+"\n", strings.Join(deps, ", "))) + out.WriteString(" " + i18n.Tr("Dependencies: %s", strings.Join(deps, ", ")) + "\n") } } return out.String() } - -// indexNeedsUpdating returns whether library_index.json needs updating -func indexNeedsUpdating(timeout time.Duration) bool { - // Library index path is constant (relative to the data directory). - // It does not depend on board manager URLs or any other configuration. - dataDir := configuration.Settings.GetString("directories.Data") - indexPath := paths.New(dataDir).Join("library_index.json") - // Verify the index file exists and we can read its fstat attrs. - if indexPath.NotExist() { - return true - } - info, err := indexPath.Stat() - if err != nil { - return true - } - return time.Since(info.ModTime()) > timeout -} diff --git a/internal/cli/lib/uninstall.go b/internal/cli/lib/uninstall.go index 897b0203320..35855ad47fa 100644 --- a/internal/cli/lib/uninstall.go +++ b/internal/cli/lib/uninstall.go @@ -20,47 +20,51 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/lib" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUninstallCommand() *cobra.Command { +func initUninstallCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { uninstallCommand := &cobra.Command{ - Use: fmt.Sprintf("uninstall %s...", tr("LIBRARY_NAME")), - Short: tr("Uninstalls one or more libraries."), - Long: tr("Uninstalls one or more libraries."), + Use: fmt.Sprintf("uninstall %s...", i18n.Tr("LIBRARY_NAME")), + Short: i18n.Tr("Uninstalls one or more libraries."), + Long: i18n.Tr("Uninstalls one or more libraries."), Example: " " + os.Args[0] + " lib uninstall AudioZero", Args: cobra.MinimumNArgs(1), - Run: runUninstallCommand, + Run: func(cmd *cobra.Command, args []string) { + runUninstallCommand(cmd.Context(), srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetUninstallableLibraries(), cobra.ShellCompDirectiveDefault + return arguments.GetUninstallableLibraries(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } return uninstallCommand } -func runUninstallCommand(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runUninstallCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli lib uninstall`") + instance := instance.CreateAndInit(ctx, srv) - refs, err := ParseLibraryReferenceArgsAndAdjustCase(instance, args) + refs, err := ParseLibraryReferenceArgsAndAdjustCase(ctx, srv, instance, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } for _, library := range refs { - err := lib.LibraryUninstall(context.Background(), &rpc.LibraryUninstallRequest{ + req := &rpc.LibraryUninstallRequest{ Instance: instance, Name: library.Name, Version: library.Version, - }, feedback.TaskProgress()) - if err != nil { - feedback.Fatal(tr("Error uninstalling %[1]s: %[2]v", library, err), feedback.ErrGeneric) + } + stream := commands.LibraryUninstallStreamResponseToCallbackFunction(ctx, feedback.TaskProgress()) + if err := srv.LibraryUninstall(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error uninstalling %[1]s: %[2]v", library, err), feedback.ErrGeneric) } } diff --git a/internal/cli/lib/update_index.go b/internal/cli/lib/update_index.go index 9c989254bea..8bdb42e2af9 100644 --- a/internal/cli/lib/update_index.go +++ b/internal/cli/lib/update_index.go @@ -21,36 +21,54 @@ import ( "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUpdateIndexCommand() *cobra.Command { +func initUpdateIndexCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { updateIndexCommand := &cobra.Command{ Use: "update-index", - Short: tr("Updates the libraries index."), - Long: tr("Updates the libraries index to the latest version."), + Short: i18n.Tr("Updates the libraries index."), + Long: i18n.Tr("Updates the libraries index to the latest version."), Example: " " + os.Args[0] + " lib update-index", Args: cobra.NoArgs, - Run: runUpdateIndexCommand, + Run: func(cmd *cobra.Command, args []string) { + runUpdateIndexCommand(cmd.Context(), srv) + }, } return updateIndexCommand } -func runUpdateIndexCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runUpdateIndexCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { + inst := instance.CreateAndInit(ctx, srv) + logrus.Info("Executing `arduino-cli lib update-index`") - UpdateIndex(inst) + resp := UpdateIndex(ctx, srv, inst) + feedback.PrintResult(&libUpdateIndexResult{result.NewUpdateLibrariesIndexResponse_ResultResult(resp)}) } // UpdateIndex updates the index of libraries. -func UpdateIndex(inst *rpc.Instance) { - err := commands.UpdateLibrariesIndex(context.Background(), &rpc.UpdateLibrariesIndexRequest{ - Instance: inst, - }, feedback.ProgressBar()) - if err != nil { - feedback.Fatal(tr("Error updating library index: %v", err), feedback.ErrGeneric) +func UpdateIndex(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance) *rpc.UpdateLibrariesIndexResponse_Result { + req := &rpc.UpdateLibrariesIndexRequest{Instance: inst} + stream, resp := commands.UpdateLibrariesIndexStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + if err := srv.UpdateLibrariesIndex(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error updating library index: %v", err), feedback.ErrGeneric) } + return resp() +} + +type libUpdateIndexResult struct { + *result.UpdateLibrariesIndexResponse_ResultResult +} + +func (l *libUpdateIndexResult) String() string { + return "" +} + +func (l *libUpdateIndexResult) Data() interface{} { + return l } diff --git a/internal/cli/lib/upgrade.go b/internal/cli/lib/upgrade.go index 5375e5d6795..008eea8fdb9 100644 --- a/internal/cli/lib/upgrade.go +++ b/internal/cli/lib/upgrade.go @@ -20,55 +20,59 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/lib" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUpgradeCommand() *cobra.Command { +func initUpgradeCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { upgradeCommand := &cobra.Command{ Use: "upgrade", - Short: tr("Upgrades installed libraries."), - Long: tr("This command upgrades an installed library to the latest available version. Multiple libraries can be passed separated by a space. If no arguments are provided, the command will upgrade all the installed libraries where an update is available."), + Short: i18n.Tr("Upgrades installed libraries."), + Long: i18n.Tr("This command upgrades an installed library to the latest available version. Multiple libraries can be passed separated by a space. If no arguments are provided, the command will upgrade all the installed libraries where an update is available."), Example: " " + os.Args[0] + " lib upgrade \n" + " " + os.Args[0] + " lib upgrade Audio\n" + " " + os.Args[0] + " lib upgrade Audio ArduinoJson", Args: cobra.ArbitraryArgs, - Run: runUpgradeCommand, + Run: func(cmd *cobra.Command, args []string) { + runUpgradeCommand(cmd.Context(), srv, args) + }, } return upgradeCommand } -func runUpgradeCommand(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runUpgradeCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli lib upgrade`") - Upgrade(instance, args) + instance := instance.CreateAndInit(ctx, srv) + Upgrade(ctx, srv, instance, args) } // Upgrade upgrades the specified libraries -func Upgrade(instance *rpc.Instance, libraries []string) { +func Upgrade(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, libraries []string) { var upgradeErr error if len(libraries) == 0 { req := &rpc.LibraryUpgradeAllRequest{Instance: instance} - upgradeErr = lib.LibraryUpgradeAll(req, feedback.ProgressBar(), feedback.TaskProgress()) + stream := commands.LibraryUpgradeAllStreamResponseToCallbackFunction(ctx, feedback.ProgressBar(), feedback.TaskProgress()) + upgradeErr = srv.LibraryUpgradeAll(req, stream) } else { for _, libName := range libraries { req := &rpc.LibraryUpgradeRequest{ Instance: instance, Name: libName, } - upgradeErr = lib.LibraryUpgrade(context.Background(), req, feedback.ProgressBar(), feedback.TaskProgress()) - if upgradeErr != nil { + stream := commands.LibraryUpgradeStreamResponseToCallbackFunction(ctx, feedback.ProgressBar(), feedback.TaskProgress()) + if upgradeErr = srv.LibraryUpgrade(req, stream); upgradeErr != nil { break } } } if upgradeErr != nil { - feedback.Fatal(fmt.Sprintf("%s: %v", tr("Error upgrading libraries"), upgradeErr), feedback.ErrGeneric) + feedback.Fatal(fmt.Sprintf("%s: %v", i18n.Tr("Error upgrading libraries"), upgradeErr), feedback.ErrGeneric) } logrus.Info("Done") diff --git a/internal/cli/monitor/monitor.go b/internal/cli/monitor/monitor.go index b15cd5bb436..3ee32524256 100644 --- a/internal/cli/monitor/monitor.go +++ b/internal/cli/monitor/monitor.go @@ -26,79 +26,138 @@ import ( "strings" "time" - "github.com/arduino/arduino-cli/commands/monitor" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/fatih/color" "github.com/sirupsen/logrus" "github.com/spf13/cobra" "go.bug.st/cleanup" ) -var tr = i18n.Tr - // NewCommand created a new `monitor` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var ( - raw bool - portArgs arguments.Port - describe bool - configs []string - quiet bool - timestamp bool - fqbn arguments.Fqbn + portArgs arguments.Port + fqbnArg arguments.Fqbn + profileArg arguments.Profile + raw bool + describe bool + configs []string + quiet bool + timestamp bool ) monitorCommand := &cobra.Command{ Use: "monitor", - Short: tr("Open a communication port with a board."), - Long: tr("Open a communication port with a board."), + Short: i18n.Tr("Open a communication port with a board."), + Long: i18n.Tr("Open a communication port with a board."), Example: "" + " " + os.Args[0] + " monitor -p /dev/ttyACM0\n" + " " + os.Args[0] + " monitor -p /dev/ttyACM0 --describe", Run: func(cmd *cobra.Command, args []string) { - runMonitorCmd(&portArgs, &fqbn, configs, describe, timestamp, quiet, raw) + sketchPath := "" + if len(args) > 0 { + sketchPath = args[0] + } + runMonitorCmd(cmd.Context(), srv, &portArgs, &fqbnArg, &profileArg, sketchPath, configs, describe, timestamp, quiet, raw) }, } - portArgs.AddToCommand(monitorCommand) - monitorCommand.Flags().BoolVar(&raw, "raw", false, tr("Set terminal in raw mode (unbuffered).")) - monitorCommand.Flags().BoolVar(&describe, "describe", false, tr("Show all the settings of the communication port.")) - monitorCommand.Flags().StringSliceVarP(&configs, "config", "c", []string{}, tr("Configure communication port settings. The format is <ID>=<value>[,<ID>=<value>]...")) - monitorCommand.Flags().BoolVarP(&quiet, "quiet", "q", false, tr("Run in silent mode, show only monitor input and output.")) - monitorCommand.Flags().BoolVar(×tamp, "timestamp", false, tr("Timestamp each incoming line.")) - fqbn.AddToCommand(monitorCommand) - monitorCommand.MarkFlagRequired("port") + portArgs.AddToCommand(monitorCommand, srv) + profileArg.AddToCommand(monitorCommand, srv) + monitorCommand.Flags().BoolVar(&raw, "raw", false, i18n.Tr("Set terminal in raw mode (unbuffered).")) + monitorCommand.Flags().BoolVar(&describe, "describe", false, i18n.Tr("Show all the settings of the communication port.")) + monitorCommand.Flags().StringSliceVarP(&configs, "config", "c", []string{}, i18n.Tr("Configure communication port settings. The format is <ID>=<value>[,<ID>=<value>]...")) + monitorCommand.Flags().BoolVarP(&quiet, "quiet", "q", false, i18n.Tr("Run in silent mode, show only monitor input and output.")) + monitorCommand.Flags().BoolVar(×tamp, "timestamp", false, i18n.Tr("Timestamp each incoming line.")) + fqbnArg.AddToCommand(monitorCommand, srv) return monitorCommand } -func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []string, describe, timestamp, quiet, raw bool) { - instance := instance.CreateAndInit() +func runMonitorCmd( + ctx context.Context, srv rpc.ArduinoCoreServiceServer, + portArgs *arguments.Port, fqbnArg *arguments.Fqbn, profileArg *arguments.Profile, sketchPathArg string, + configs []string, describe, timestamp, quiet, raw bool, +) { logrus.Info("Executing `arduino-cli monitor`") - if !configuration.HasConsole { + if !feedback.HasConsole() { quiet = true } - // TODO: Should use sketch default_port/protocol? - portAddress, portProtocol, err := portArgs.GetPortAddressAndProtocol(instance, "", "") + var ( + inst *rpc.Instance + profile *rpc.SketchProfile + fqbn string + defaultPort, defaultProtocol string + ) + + // Flags takes maximum precedence over sketch.yaml + // If {--port --fqbn --profile} are set we ignore the profile. + // If both {--port --profile} are set we read the fqbn in the following order: profile -> default_fqbn -> discovery + // If only --port is set we read the fqbn in the following order: default_fqbn -> discovery + // If only --fqbn is set we read the port in the following order: default_port + sketchPath := arguments.InitSketchPath(sketchPathArg) + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) + if err != nil && !portArgs.IsPortFlagSet() { + feedback.Fatal( + i18n.Tr("Error getting default port from `sketch.yaml`. Check if you're in the correct sketch folder or provide the --port flag: %s", err), + feedback.ErrGeneric, + ) + } + sketch := resp.GetSketch() + if sketch != nil { + defaultPort, defaultProtocol = sketch.GetDefaultPort(), sketch.GetDefaultProtocol() + } + if fqbnArg.String() == "" { + if profileArg.Get() == "" { + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, sketch.GetDefaultProfile().GetName(), sketchPath) + } else { + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, profileArg.Get(), sketchPath) + } + } + if inst == nil { + inst = instance.CreateAndInit(ctx, srv) + } + // Priority on how to retrieve the fqbn + // 1. from flag + // 2. from profile + // 3. from default_fqbn specified in the sketch.yaml + // 4. try to detect from the port + switch { + case fqbnArg.String() != "": + fqbn = fqbnArg.String() + case profile.GetFqbn() != "": + fqbn = profile.GetFqbn() + case sketch.GetDefaultFqbn() != "": + fqbn = sketch.GetDefaultFqbn() + default: + fqbn, _ = portArgs.DetectFQBN(ctx, inst, srv) + } + + portAddress, portProtocol, err := portArgs.GetPortAddressAndProtocol(ctx, inst, srv, defaultPort, defaultProtocol) if err != nil { feedback.FatalError(err, feedback.ErrGeneric) } - enumerateResp, err := monitor.EnumerateMonitorPortSettings(context.Background(), &rpc.EnumerateMonitorPortSettingsRequest{ - Instance: instance, + enumerateResp, err := srv.EnumerateMonitorPortSettings(ctx, &rpc.EnumerateMonitorPortSettingsRequest{ + Instance: inst, PortProtocol: portProtocol, - Fqbn: fqbn.String(), + Fqbn: fqbn, }) if err != nil { - feedback.Fatal(tr("Error getting port settings details: %s", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error getting port settings details: %s", err), feedback.ErrGeneric) } if describe { - feedback.PrintResult(&detailsResult{Settings: enumerateResp.Settings}) + settings := make([]*result.MonitorPortSettingDescriptor, len(enumerateResp.GetSettings())) + for i, v := range enumerateResp.GetSettings() { + settings[i] = result.NewMonitorPortSettingDescriptor(v) + } + feedback.PrintResult(&detailsResult{Settings: settings}) return } @@ -116,14 +175,14 @@ func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []str var setting *rpc.MonitorPortSettingDescriptor for _, s := range enumerateResp.GetSettings() { if k == "" { - if contains(s.EnumValues, v) { + if contains(s.GetEnumValues(), v) { setting = s break } } else { - if strings.EqualFold(s.SettingId, k) { - if !contains(s.EnumValues, v) { - feedback.Fatal(tr("invalid port configuration value for %s: %s", k, v), feedback.ErrBadArgument) + if strings.EqualFold(s.GetSettingId(), k) { + if !contains(s.GetEnumValues(), v) { + feedback.Fatal(i18n.Tr("invalid port configuration value for %s: %s", k, v), feedback.ErrBadArgument) } setting = s break @@ -131,32 +190,18 @@ func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []str } } if setting == nil { - feedback.Fatal(tr("invalid port configuration: %s", config), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("invalid port configuration: %s", config), feedback.ErrBadArgument) } - configuration.Settings = append(configuration.Settings, &rpc.MonitorPortSetting{ - SettingId: setting.SettingId, + configuration.Settings = append(configuration.GetSettings(), &rpc.MonitorPortSetting{ + SettingId: setting.GetSettingId(), Value: v, }) if !quiet { - feedback.Print(tr("Monitor port settings:")) - feedback.Print(fmt.Sprintf("%s=%s", setting.SettingId, v)) + feedback.Print(i18n.Tr("Monitor port settings:")) + feedback.Print(fmt.Sprintf("%s=%s", setting.GetSettingId(), v)) } } } - portProxy, _, err := monitor.Monitor(context.Background(), &rpc.MonitorRequest{ - Instance: instance, - Port: &rpc.Port{Address: portAddress, Protocol: portProtocol}, - Fqbn: fqbn.String(), - PortConfiguration: configuration, - }) - if err != nil { - feedback.FatalError(err, feedback.ErrGeneric) - } - defer portProxy.Close() - - if !quiet { - feedback.Print(tr("Connected to %s! Press CTRL-C to exit.", portAddress)) - } ttyIn, ttyOut, err := feedback.InteractiveStreams() if err != nil { @@ -167,12 +212,14 @@ func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []str ttyOut = newTimeStampWriter(ttyOut) } - ctx, cancel := cleanup.InterruptableContext(context.Background()) + ctx, cancel := cleanup.InterruptableContext(ctx) if raw { - feedback.SetRawModeStdin() - defer func() { - feedback.RestoreModeStdin() - }() + if feedback.IsInteractive() { + if err := feedback.SetRawModeStdin(); err != nil { + feedback.Warning(i18n.Tr("Error setting raw mode: %s", err.Error())) + } + defer feedback.RestoreModeStdin() + } // In RAW mode CTRL-C is not converted into an Interrupt by // the terminal, we must intercept ASCII 3 (CTRL-C) on our own... @@ -183,11 +230,27 @@ func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []str ttyIn = io.TeeReader(ttyIn, ctrlCDetector) } + monitorServer, portProxy := commands.MonitorServerToReadWriteCloser(ctx, &rpc.MonitorPortOpenRequest{ + Instance: inst, + Port: &rpc.Port{Address: portAddress, Protocol: portProtocol}, + Fqbn: fqbn, + PortConfiguration: configuration, + }) + go func() { + if !quiet { + feedback.Print(i18n.Tr("Connecting to %s. Press CTRL-C to exit.", portAddress)) + } + if err := srv.Monitor(monitorServer); err != nil { + feedback.FatalError(err, feedback.ErrGeneric) + } + portProxy.Close() + cancel() + }() go func() { _, err := io.Copy(ttyOut, portProxy) if err != nil && !errors.Is(err, io.EOF) { if !quiet { - feedback.Print(tr("Port closed: %v", err)) + feedback.Print(i18n.Tr("Port closed: %v", err)) } } cancel() @@ -196,7 +259,7 @@ func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []str _, err := io.Copy(portProxy, ttyIn) if err != nil && !errors.Is(err, io.EOF) { if !quiet { - feedback.Print(tr("Port closed: %v", err)) + feedback.Print(i18n.Tr("Port closed: %v", err)) } } cancel() @@ -219,7 +282,7 @@ func (cd *charDetectorWriter) Write(buf []byte) (int, error) { } type detailsResult struct { - Settings []*rpc.MonitorPortSettingDescriptor `json:"settings"` + Settings []*result.MonitorPortSettingDescriptor `json:"settings"` } func (r *detailsResult) Data() interface{} { @@ -227,9 +290,13 @@ func (r *detailsResult) Data() interface{} { } func (r *detailsResult) String() string { + if len(r.Settings) == 0 { + return "" + } t := table.New() + t.SetHeader(i18n.Tr("ID"), i18n.Tr("Setting"), i18n.Tr("Default"), i18n.Tr("Values")) + green := color.New(color.FgGreen) - t.SetHeader(tr("ID"), tr("Setting"), tr("Default"), tr("Values")) sort.Slice(r.Settings, func(i, j int) bool { return r.Settings[i].Label < r.Settings[j].Label }) diff --git a/internal/cli/outdated/outdated.go b/internal/cli/outdated/outdated.go index 8a56f21b36a..ce9b3c87510 100644 --- a/internal/cli/outdated/outdated.go +++ b/internal/cli/outdated/outdated.go @@ -16,56 +16,74 @@ package outdated import ( + "context" "fmt" "os" "sort" "strings" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/core" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" "github.com/arduino/arduino-cli/internal/cli/lib" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand creates a new `outdated` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { outdatedCommand := &cobra.Command{ Use: "outdated", - Short: tr("Lists cores and libraries that can be upgraded"), - Long: tr(`This commands shows a list of installed cores and/or libraries + Short: i18n.Tr("Lists cores and libraries that can be upgraded"), + Long: i18n.Tr(`This commands shows a list of installed cores and/or libraries that can be upgraded. If nothing needs to be updated the output is empty.`), Example: " " + os.Args[0] + " outdated\n", Args: cobra.NoArgs, - Run: runOutdatedCommand, + Run: func(cmd *cobra.Command, args []string) { + runOutdatedCommand(cmd.Context(), srv) + }, } return outdatedCommand } -func runOutdatedCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runOutdatedCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { logrus.Info("Executing `arduino-cli outdated`") - Outdated(inst) + inst := instance.CreateAndInit(ctx, srv) + Outdated(ctx, srv, inst) } // Outdated prints a list of outdated platforms and libraries -func Outdated(inst *rpc.Instance) { +func Outdated(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance) { feedback.PrintResult( - outdatedResult{core.GetList(inst, false, true), lib.GetList(inst, []string{}, false, true)}, + newOutdatedResult( + core.GetList(ctx, srv, inst, false, true), + lib.GetList(ctx, srv, inst, []string{}, false, true)), ) } // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type outdatedResult struct { - Platforms []*rpc.Platform `json:"platforms,omitempty"` - InstalledLibs []*rpc.InstalledLibrary `json:"libraries,omitempty"` + Platforms []*result.PlatformSummary `json:"platforms,omitempty"` + InstalledLibs []*result.InstalledLibrary `json:"libraries,omitempty"` +} + +func newOutdatedResult(inPlatforms []*rpc.PlatformSummary, inLibraries []*rpc.InstalledLibrary) *outdatedResult { + res := &outdatedResult{ + Platforms: make([]*result.PlatformSummary, len(inPlatforms)), + InstalledLibs: make([]*result.InstalledLibrary, len(inLibraries)), + } + for i, v := range inPlatforms { + res.Platforms[i] = result.NewPlatformSummary(v) + } + for i, v := range inLibraries { + res.InstalledLibs[i] = result.NewInstalledLibrary(v) + } + return res } func (ir outdatedResult) Data() interface{} { @@ -74,18 +92,18 @@ func (ir outdatedResult) Data() interface{} { func (ir outdatedResult) String() string { if len(ir.Platforms) == 0 && len(ir.InstalledLibs) == 0 { - return tr("No outdated platforms or libraries found.") + return i18n.Tr("No outdated platforms or libraries found.") } // A table useful both for platforms and libraries, where some of the fields will be blank. t := table.New() t.SetHeader( - tr("ID"), - tr("Name"), - tr("Installed"), - tr("Latest"), - tr("Location"), - tr("Description"), + i18n.Tr("ID"), + i18n.Tr("Name"), + i18n.Tr("Installed"), + i18n.Tr("Latest"), + i18n.Tr("Location"), + i18n.Tr("Description"), ) t.SetColumnWidthMode(2, table.Average) t.SetColumnWidthMode(3, table.Average) @@ -93,11 +111,14 @@ func (ir outdatedResult) String() string { // Based on internal/cli/core/list.go for _, p := range ir.Platforms { - name := p.Name + name := "" + if latest := p.GetLatestRelease(); latest != nil { + name = latest.Name + } if p.Deprecated { - name = fmt.Sprintf("[%s] %s", tr("DEPRECATED"), name) + name = fmt.Sprintf("[%s] %s", i18n.Tr("DEPRECATED"), name) } - t.AddRow(p.Id, name, p.Installed, p.Latest, "", "") + t.AddRow(p.Id, name, p.InstalledVersion, p.LatestVersion, "", "") } // Based on internal/cli/lib/list.go @@ -115,7 +136,7 @@ func (ir outdatedResult) String() string { }) lastName := "" for _, libMeta := range ir.InstalledLibs { - lib := libMeta.GetLibrary() + lib := libMeta.Library name := lib.Name if name == lastName { name = ` "` @@ -123,15 +144,15 @@ func (ir outdatedResult) String() string { lastName = name } - location := lib.GetLocation().String() + location := string(lib.Location) if lib.ContainerPlatform != "" { - location = lib.GetContainerPlatform() + location = lib.ContainerPlatform } available := "" sentence := "" - if libMeta.GetRelease() != nil { - available = libMeta.GetRelease().GetVersion() + if libMeta.Release != nil { + available = libMeta.Release.Version sentence = lib.Sentence } diff --git a/internal/cli/sketch/archive.go b/internal/cli/sketch/archive.go index e21221aa3e7..4c1063bbf5a 100644 --- a/internal/cli/sketch/archive.go +++ b/internal/cli/sketch/archive.go @@ -20,22 +20,22 @@ import ( "fmt" "os" - sk "github.com/arduino/arduino-cli/commands/sketch" + "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) // initArchiveCommand creates a new `archive` command -func initArchiveCommand() *cobra.Command { +func initArchiveCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var includeBuildDir, overwrite bool archiveCommand := &cobra.Command{ - Use: fmt.Sprintf("archive <%s> <%s>", tr("sketchPath"), tr("archivePath")), - Short: tr("Creates a zip file containing all sketch files."), - Long: tr("Creates a zip file containing all sketch files."), + Use: fmt.Sprintf("archive <%s> <%s>", i18n.Tr("sketchPath"), i18n.Tr("archivePath")), + Short: i18n.Tr("Creates a zip file containing all sketch files."), + Long: i18n.Tr("Creates a zip file containing all sketch files."), Example: "" + " " + os.Args[0] + " archive\n" + " " + os.Args[0] + " archive .\n" + @@ -43,41 +43,45 @@ func initArchiveCommand() *cobra.Command { " " + os.Args[0] + " archive /home/user/Arduino/MySketch\n" + " " + os.Args[0] + " archive /home/user/Arduino/MySketch /home/user/MySketchArchive.zip", Args: cobra.MaximumNArgs(2), - Run: func(cmd *cobra.Command, args []string) { runArchiveCommand(args, includeBuildDir, overwrite) }, + Run: func(cmd *cobra.Command, args []string) { + runArchiveCommand(cmd.Context(), srv, args, includeBuildDir, overwrite) + }, } - archiveCommand.Flags().BoolVar(&includeBuildDir, "include-build-dir", false, tr("Includes %s directory in the archive.", "build")) - archiveCommand.Flags().BoolVarP(&overwrite, "overwrite", "f", false, tr("Overwrites an already existing archive")) + archiveCommand.Flags().BoolVar(&includeBuildDir, "include-build-dir", false, i18n.Tr("Includes %s directory in the archive.", "build")) + archiveCommand.Flags().BoolVarP(&overwrite, "overwrite", "f", false, i18n.Tr("Overwrites an already existing archive")) return archiveCommand } -func runArchiveCommand(args []string, includeBuildDir bool, overwrite bool) { +func runArchiveCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, includeBuildDir bool, overwrite bool) { logrus.Info("Executing `arduino-cli sketch archive`") - - sketchPath := paths.New(".") - if len(args) >= 1 { - sketchPath = paths.New(args[0]) + sketchPathArg := "" + if len(args) > 0 { + sketchPathArg = args[0] } - if msg := sk.WarnDeprecatedFiles(sketchPath); msg != "" { - feedback.Warning(msg) + archivePathArg := "" + if len(args) > 1 { + archivePathArg = args[1] } - archivePath := "" - if len(args) == 2 { - archivePath = args[1] + sketchPath := arguments.InitSketchPath(sketchPathArg) + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) + if err != nil { + feedback.FatalError(err, feedback.ErrGeneric) } + sk := resp.GetSketch() + feedback.WarnAboutDeprecatedFiles(sk) - _, err := sk.ArchiveSketch(context.Background(), + if _, err := srv.ArchiveSketch(ctx, &rpc.ArchiveSketchRequest{ SketchPath: sketchPath.String(), - ArchivePath: archivePath, + ArchivePath: archivePathArg, IncludeBuildDir: includeBuildDir, Overwrite: overwrite, - }) - - if err != nil { - feedback.Fatal(tr("Error archiving: %v", err), feedback.ErrGeneric) + }, + ); err != nil { + feedback.Fatal(i18n.Tr("Error archiving: %v", err), feedback.ErrGeneric) } } diff --git a/internal/cli/sketch/new.go b/internal/cli/sketch/new.go index ff141417ad0..024d53e851c 100644 --- a/internal/cli/sketch/new.go +++ b/internal/cli/sketch/new.go @@ -20,33 +20,35 @@ import ( "os" "strings" - "github.com/arduino/arduino-cli/arduino/globals" - sk "github.com/arduino/arduino-cli/commands/sketch" + "github.com/arduino/arduino-cli/internal/arduino/globals" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initNewCommand() *cobra.Command { +func initNewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var overwrite bool newCommand := &cobra.Command{ Use: "new", - Short: tr("Create a new Sketch"), - Long: tr("Create a new Sketch"), + Short: i18n.Tr("Create a new Sketch"), + Long: i18n.Tr("Create a new Sketch"), Example: " " + os.Args[0] + " sketch new MultiBlinker", Args: cobra.ExactArgs(1), - Run: func(cmd *cobra.Command, args []string) { runNewCommand(args, overwrite) }, + Run: func(cmd *cobra.Command, args []string) { + runNewCommand(cmd.Context(), srv, args, overwrite) + }, } - newCommand.Flags().BoolVarP(&overwrite, "overwrite", "f", false, tr("Overwrites an existing .ino sketch.")) + newCommand.Flags().BoolVarP(&overwrite, "overwrite", "f", false, i18n.Tr("Overwrites an existing .ino sketch.")) return newCommand } -func runNewCommand(args []string, overwrite bool) { +func runNewCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, overwrite bool) { logrus.Info("Executing `arduino-cli sketch new`") // Trim to avoid issues if user creates a sketch adding the .ino extesion to the name inputSketchName := args[0] @@ -66,20 +68,32 @@ func runNewCommand(args []string, overwrite bool) { } else { sketchDirPath, err = paths.New(trimmedSketchName).Abs() if err != nil { - feedback.Fatal(tr("Error creating sketch: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error creating sketch: %v", err), feedback.ErrGeneric) } sketchDir = sketchDirPath.Parent().String() sketchName = sketchDirPath.Base() } - _, err = sk.NewSketch(context.Background(), &rpc.NewSketchRequest{ + _, err = srv.NewSketch(ctx, &rpc.NewSketchRequest{ SketchName: sketchName, SketchDir: sketchDir, Overwrite: overwrite, }) if err != nil { - feedback.Fatal(tr("Error creating sketch: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error creating sketch: %v", err), feedback.ErrGeneric) } - feedback.Print(tr("Sketch created in: %s", sketchDirPath)) + feedback.PrintResult(sketchResult{SketchDirPath: sketchDirPath}) +} + +type sketchResult struct { + SketchDirPath *paths.Path `json:"sketch_path"` +} + +func (ir sketchResult) Data() interface{} { + return ir +} + +func (ir sketchResult) String() string { + return i18n.Tr("Sketch created in: %s", ir.SketchDirPath) } diff --git a/internal/cli/sketch/sketch.go b/internal/cli/sketch/sketch.go index fa172d3148e..65ae9a1838f 100644 --- a/internal/cli/sketch/sketch.go +++ b/internal/cli/sketch/sketch.go @@ -18,23 +18,22 @@ package sketch import ( "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand created a new `sketch` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { sketchCommand := &cobra.Command{ Use: "sketch", - Short: tr("Arduino CLI sketch commands."), - Long: tr("Arduino CLI sketch commands."), + Short: i18n.Tr("Arduino CLI sketch commands."), + Long: i18n.Tr("Arduino CLI sketch commands."), Example: " " + os.Args[0] + " sketch new MySketch", } - sketchCommand.AddCommand(initNewCommand()) - sketchCommand.AddCommand(initArchiveCommand()) + sketchCommand.AddCommand(initNewCommand(srv)) + sketchCommand.AddCommand(initArchiveCommand(srv)) return sketchCommand } diff --git a/internal/cli/update/update.go b/internal/cli/update/update.go index 693daae6244..950f347a7b4 100644 --- a/internal/cli/update/update.go +++ b/internal/cli/update/update.go @@ -16,43 +16,44 @@ package update import ( + "context" "os" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/core" "github.com/arduino/arduino-cli/internal/cli/instance" "github.com/arduino/arduino-cli/internal/cli/lib" "github.com/arduino/arduino-cli/internal/cli/outdated" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand creates a new `update` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var showOutdated bool updateCommand := &cobra.Command{ Use: "update", - Short: tr("Updates the index of cores and libraries"), - Long: tr("Updates the index of cores and libraries to the latest versions."), + Short: i18n.Tr("Updates the index of cores and libraries"), + Long: i18n.Tr("Updates the index of cores and libraries to the latest versions."), Example: " " + os.Args[0] + " update", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { - runUpdateCommand(showOutdated) + runUpdateCommand(cmd.Context(), srv, showOutdated) }, } - updateCommand.Flags().BoolVar(&showOutdated, "show-outdated", false, tr("Show outdated cores and libraries after index update")) + updateCommand.Flags().BoolVar(&showOutdated, "show-outdated", false, i18n.Tr("Show outdated cores and libraries after index update")) return updateCommand } -func runUpdateCommand(showOutdated bool) { - inst := instance.CreateAndInit() +func runUpdateCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, showOutdated bool) { logrus.Info("Executing `arduino-cli update`") - lib.UpdateIndex(inst) - core.UpdateIndex(inst) - instance.Init(inst) + inst := instance.CreateAndInit(ctx, srv) + + lib.UpdateIndex(ctx, srv, inst) + core.UpdateIndex(ctx, srv, inst) + instance.Init(ctx, srv, inst) if showOutdated { - outdated.Outdated(inst) + outdated.Outdated(ctx, srv, inst) } } diff --git a/internal/cli/updater/updater.go b/internal/cli/updater/updater.go index 77e73785de7..0ba9498ab11 100644 --- a/internal/cli/updater/updater.go +++ b/internal/cli/updater/updater.go @@ -17,120 +17,19 @@ package updater import ( "fmt" - "os" - "strings" - "time" - "github.com/arduino/arduino-cli/arduino/httpclient" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" - "github.com/arduino/arduino-cli/internal/inventory" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/arduino-cli/version" "github.com/fatih/color" - semver "go.bug.st/relaxed-semver" ) -var tr = i18n.Tr - -// CheckForUpdate returns the latest available version if greater than -// the one running and it makes sense to check for an update, nil in all other cases -func CheckForUpdate(currentVersion *semver.Version) *semver.Version { - if !shouldCheckForUpdate(currentVersion) { - return nil - } - - return ForceCheckForUpdate(currentVersion) -} - -// ForceCheckForUpdate always returns the latest available version if greater than -// the one running, nil in all other cases -func ForceCheckForUpdate(currentVersion *semver.Version) *semver.Version { - defer func() { - // Always save the last time we checked for updates at the end - inventory.Store.Set("updater.last_check_time", time.Now()) - inventory.WriteStore() - }() - - latestVersion, err := semver.Parse(getLatestRelease()) - if err != nil { - return nil - } - - if currentVersion.GreaterThanOrEqual(latestVersion) { - // Current version is already good enough - return nil - } - - return latestVersion -} - // NotifyNewVersionIsAvailable prints information about the new latestVersion func NotifyNewVersionIsAvailable(latestVersion string) { msg := fmt.Sprintf("\n\n%s %s → %s\n%s", - color.YellowString(tr("A new release of Arduino CLI is available:")), + color.YellowString(i18n.Tr("A new release of Arduino CLI is available:")), color.CyanString(version.VersionInfo.VersionString), color.CyanString(latestVersion), color.YellowString("https://arduino.github.io/arduino-cli/latest/installation/#latest-packages")) feedback.Warning(msg) } - -// shouldCheckForUpdate return true if it actually makes sense to check for new updates, -// false in all other cases. -func shouldCheckForUpdate(currentVersion *semver.Version) bool { - if strings.Contains(currentVersion.String(), "git-snapshot") || strings.Contains(currentVersion.String(), "nightly") { - // This is a dev build, no need to check for updates - return false - } - - if !configuration.Settings.GetBool("updater.enable_notification") { - // Don't check if the user disabled the notification - return false - } - - if inventory.Store.IsSet("updater.last_check_time") && time.Since(inventory.Store.GetTime("updater.last_check_time")).Hours() < 24 { - // Checked less than 24 hours ago, let's wait - return false - } - - // Don't check when running on CI or on non interactive consoles - return !isCI() && configuration.IsInteractive && configuration.HasConsole -} - -// based on https://github.com/watson/ci-info/blob/HEAD/index.js -func isCI() bool { - return os.Getenv("CI") != "" || // GitHub Actions, Travis CI, CircleCI, Cirrus CI, GitLab CI, AppVeyor, CodeShip, dsari - os.Getenv("BUILD_NUMBER") != "" || // Jenkins, TeamCity - os.Getenv("RUN_ID") != "" // TaskCluster, dsari -} - -// getLatestRelease queries the official Arduino download server for the latest release, -// if there are no errors or issues a version string is returned, in all other case an empty string. -func getLatestRelease() string { - client, err := httpclient.New() - if err != nil { - return "" - } - - // We just use this URL to check if there's a new release available and - // never show it to the user, so it's fine to use the Linux one for all OSs. - URL := "https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_64bit.tar.gz" - res, err := client.Head(URL) - if err != nil { - // Yes, we ignore it - return "" - } - - // Get redirected URL - location := res.Request.URL.String() - - // The location header points to the latest release of the CLI, it's supposed to be formatted like this: - // https://downloads.arduino.cc/arduino-cli/arduino-cli_0.18.3_Linux_64bit.tar.gz - // so we split it to get the version, if there are not enough splits something must have gone wrong. - split := strings.Split(location, "_") - if len(split) < 2 { - return "" - } - - return split[1] -} diff --git a/internal/cli/upgrade/upgrade.go b/internal/cli/upgrade/upgrade.go index 937abd845fa..8740add67d1 100644 --- a/internal/cli/upgrade/upgrade.go +++ b/internal/cli/upgrade/upgrade.go @@ -16,39 +16,39 @@ package upgrade import ( + "context" "os" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/core" "github.com/arduino/arduino-cli/internal/cli/instance" "github.com/arduino/arduino-cli/internal/cli/lib" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand creates a new `upgrade` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var postInstallFlags arguments.PrePostScriptsFlags upgradeCommand := &cobra.Command{ Use: "upgrade", - Short: tr("Upgrades installed cores and libraries."), - Long: tr("Upgrades installed cores and libraries to latest version."), + Short: i18n.Tr("Upgrades installed cores and libraries."), + Long: i18n.Tr("Upgrades installed cores and libraries to latest version."), Example: " " + os.Args[0] + " upgrade", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { - runUpgradeCommand(postInstallFlags.DetectSkipPostInstallValue(), postInstallFlags.DetectSkipPreUninstallValue()) + runUpgradeCommand(cmd.Context(), srv, postInstallFlags.DetectSkipPostInstallValue(), postInstallFlags.DetectSkipPreUninstallValue()) }, } postInstallFlags.AddToCommand(upgradeCommand) return upgradeCommand } -func runUpgradeCommand(skipPostInstall bool, skipPreUninstall bool) { - inst := instance.CreateAndInit() +func runUpgradeCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, skipPostInstall bool, skipPreUninstall bool) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli upgrade`") - lib.Upgrade(inst, []string{}) - core.Upgrade(inst, []string{}, skipPostInstall, skipPreUninstall) + lib.Upgrade(ctx, srv, inst, []string{}) + core.Upgrade(ctx, srv, inst, []string{}, skipPostInstall, skipPreUninstall) } diff --git a/internal/cli/upload/upload.go b/internal/cli/upload/upload.go index b17f323dc8c..90ba5bf6d7d 100644 --- a/internal/cli/upload/upload.go +++ b/internal/cli/upload/upload.go @@ -22,14 +22,13 @@ import ( "os" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/core" - sk "github.com/arduino/arduino-cli/commands/sketch" - "github.com/arduino/arduino-cli/commands/upload" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/arduino-cli/version" "github.com/sirupsen/logrus" @@ -50,12 +49,12 @@ var ( ) // NewCommand created a new `upload` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { uploadFields := map[string]string{} uploadCommand := &cobra.Command{ Use: "upload", - Short: tr("Upload Arduino sketches."), - Long: tr("Upload Arduino sketches. This does NOT compile the sketch prior to upload."), + Short: i18n.Tr("Upload Arduino sketches."), + Long: i18n.Tr("Upload Arduino sketches. This does NOT compile the sketch prior to upload."), Example: "" + " " + os.Args[0] + " upload /home/user/Arduino/MySketch -p /dev/ttyACM0 -b arduino:avr:uno\n" + " " + os.Args[0] + " upload -p 192.168.10.1 -b arduino:avr:uno --upload-field password=abc", @@ -64,25 +63,25 @@ func NewCommand() *cobra.Command { arguments.CheckFlagsConflicts(cmd, "input-file", "input-dir") }, Run: func(cmd *cobra.Command, args []string) { - runUploadCommand(args, uploadFields) + runUploadCommand(cmd.Context(), srv, args, uploadFields) }, } - fqbnArg.AddToCommand(uploadCommand) - portArgs.AddToCommand(uploadCommand) - profileArg.AddToCommand(uploadCommand) - uploadCommand.Flags().StringVarP(&importDir, "input-dir", "", "", tr("Directory containing binaries to upload.")) - uploadCommand.Flags().StringVarP(&importFile, "input-file", "i", "", tr("Binary file to upload.")) - uploadCommand.Flags().BoolVarP(&verify, "verify", "t", false, tr("Verify uploaded binary after the upload.")) - uploadCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, tr("Optional, turns on verbose mode.")) - programmer.AddToCommand(uploadCommand) - uploadCommand.Flags().BoolVar(&dryRun, "dry-run", false, tr("Do not perform the actual upload, just log out actions")) + fqbnArg.AddToCommand(uploadCommand, srv) + portArgs.AddToCommand(uploadCommand, srv) + profileArg.AddToCommand(uploadCommand, srv) + uploadCommand.Flags().StringVarP(&importDir, "input-dir", "", "", i18n.Tr("Directory containing binaries to upload.")) + uploadCommand.Flags().StringVarP(&importFile, "input-file", "i", "", i18n.Tr("Binary file to upload.")) + uploadCommand.Flags().BoolVarP(&verify, "verify", "t", false, i18n.Tr("Verify uploaded binary after the upload.")) + uploadCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, i18n.Tr("Optional, turns on verbose mode.")) + programmer.AddToCommand(uploadCommand, srv) + uploadCommand.Flags().BoolVar(&dryRun, "dry-run", false, i18n.Tr("Do not perform the actual upload, just log out actions")) uploadCommand.Flags().MarkHidden("dry-run") - arguments.AddKeyValuePFlag(uploadCommand, &uploadFields, "upload-field", "F", nil, tr("Set a value for a field required to upload.")) + arguments.AddKeyValuePFlag(uploadCommand, &uploadFields, "upload-field", "F", nil, i18n.Tr("Set a value for a field required to upload.")) return uploadCommand } -func runUploadCommand(args []string, uploadFieldsArgs map[string]string) { +func runUploadCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, uploadFieldsArgs map[string]string) { logrus.Info("Executing `arduino-cli upload`") path := "" @@ -90,23 +89,22 @@ func runUploadCommand(args []string, uploadFieldsArgs map[string]string) { path = args[0] } sketchPath := arguments.InitSketchPath(path) - - if msg := sk.WarnDeprecatedFiles(sketchPath); importDir == "" && importFile == "" && msg != "" { - feedback.Warning(msg) - } - - sketch, err := sk.LoadSketch(context.Background(), &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) - if err != nil && importDir == "" && importFile == "" { - feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrGeneric) + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) + sketch := resp.GetSketch() + if importDir == "" && importFile == "" { + if err != nil { + feedback.Fatal(i18n.Tr("Error during Upload: %v", err), feedback.ErrGeneric) + } + feedback.WarnAboutDeprecatedFiles(sketch) } var inst *rpc.Instance - var profile *rpc.Profile + var profile *rpc.SketchProfile if profileArg.Get() == "" { - inst, profile = instance.CreateAndInitWithProfile(sketch.GetDefaultProfile().GetName(), sketchPath) + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, sketch.GetDefaultProfile().GetName(), sketchPath) } else { - inst, profile = instance.CreateAndInitWithProfile(profileArg.Get(), sketchPath) + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, profileArg.Get(), sketchPath) } if fqbnArg.String() == "" { @@ -116,57 +114,56 @@ func runUploadCommand(args []string, uploadFieldsArgs map[string]string) { defaultFQBN := sketch.GetDefaultFqbn() defaultAddress := sketch.GetDefaultPort() defaultProtocol := sketch.GetDefaultProtocol() - fqbn, port := arguments.CalculateFQBNAndPort(&portArgs, &fqbnArg, inst, defaultFQBN, defaultAddress, defaultProtocol) + fqbn, port := arguments.CalculateFQBNAndPort(ctx, &portArgs, &fqbnArg, inst, srv, defaultFQBN, defaultAddress, defaultProtocol) - userFieldRes, err := upload.SupportedUserFields(context.Background(), &rpc.SupportedUserFieldsRequest{ + userFieldRes, err := srv.SupportedUserFields(ctx, &rpc.SupportedUserFieldsRequest{ Instance: inst, Fqbn: fqbn, - Protocol: port.Protocol, + Protocol: port.GetProtocol(), }) if err != nil { - msg := tr("Error during Upload: %v", err) + msg := i18n.Tr("Error during Upload: %v", err) // Check the error type to give the user better feedback on how // to resolve it - var platformErr *arduino.PlatformNotFoundError + var platformErr *cmderrors.PlatformNotFoundError if errors.As(err, &platformErr) { split := strings.Split(platformErr.Platform, ":") if len(split) < 2 { - panic(tr("Platform ID is not correct")) + panic(i18n.Tr("Platform ID is not correct")) } msg += "\n" - if platform, err := core.PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: platformErr.Platform, - AllVersions: false, + if platform, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: platformErr.Platform, }); err != nil { msg += err.Error() } else if len(platform.GetSearchOutput()) > 0 { - msg += tr("Try running %s", fmt.Sprintf("`%s core install %s`", version.VersionInfo.Application, platformErr.Platform)) + msg += i18n.Tr("Try running %s", fmt.Sprintf("`%s core install %s`", version.VersionInfo.Application, platformErr.Platform)) } else { - msg += tr("Platform %s is not found in any known index\nMaybe you need to add a 3rd party URL?", platformErr.Platform) + msg += i18n.Tr("Platform %s is not found in any known index\nMaybe you need to add a 3rd party URL?", platformErr.Platform) } } feedback.Fatal(msg, feedback.ErrGeneric) } fields := map[string]string{} - if len(userFieldRes.UserFields) > 0 { + if len(userFieldRes.GetUserFields()) > 0 { if len(uploadFieldsArgs) > 0 { // If the user has specified some fields via cmd-line, we don't ask for them - for _, field := range userFieldRes.UserFields { - if value, ok := uploadFieldsArgs[field.Name]; ok { - fields[field.Name] = value + for _, field := range userFieldRes.GetUserFields() { + if value, ok := uploadFieldsArgs[field.GetName()]; ok { + fields[field.GetName()] = value } else { - feedback.Fatal(tr("Missing required upload field: %s", field.Name), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Missing required upload field: %s", field.GetName()), feedback.ErrBadArgument) } } } else { // Otherwise prompt the user for them - feedback.Print(tr("Uploading to specified board using %s protocol requires the following info:", port.Protocol)) - if f, err := arguments.AskForUserFields(userFieldRes.UserFields); err != nil { - msg := fmt.Sprintf("%s: %s", tr("Error getting user input"), err) + feedback.Print(i18n.Tr("Uploading to specified board using %s protocol requires the following info:", port.GetProtocol())) + if f, err := arguments.AskForUserFields(userFieldRes.GetUserFields()); err != nil { + msg := fmt.Sprintf("%s: %s", i18n.Tr("Error getting user input"), err) feedback.Fatal(msg, feedback.ErrGeneric) } else { fields = f @@ -178,6 +175,14 @@ func runUploadCommand(args []string, uploadFieldsArgs map[string]string) { path = sketchPath.String() } + prog := profile.GetProgrammer() + if prog == "" || programmer.GetProgrammer() != "" { + prog = programmer.String(ctx, inst, srv, fqbn) + } + if prog == "" { + prog = sketch.GetDefaultProgrammer() + } + stdOut, stdErr, stdIOResult := feedback.OutputStreams() req := &rpc.UploadRequest{ Instance: inst, @@ -188,26 +193,34 @@ func runUploadCommand(args []string, uploadFieldsArgs map[string]string) { Verify: verify, ImportFile: importFile, ImportDir: importDir, - Programmer: programmer.String(), + Programmer: prog, DryRun: dryRun, UserFields: fields, } - if res, err := upload.Upload(context.Background(), req, stdOut, stdErr); err != nil { - feedback.FatalError(err, feedback.ErrGeneric) + stream, streamResp := commands.UploadToServerStreams(ctx, stdOut, stdErr) + if err := srv.Upload(req, stream); err != nil { + errcode := feedback.ErrGeneric + if errors.Is(err, &cmderrors.ProgrammerRequiredForUploadError{}) { + errcode = feedback.ErrMissingProgrammer + } + if errors.Is(err, &cmderrors.MissingProgrammerError{}) { + errcode = feedback.ErrMissingProgrammer + } + feedback.FatalError(err, errcode) } else { io := stdIOResult() feedback.PrintResult(&uploadResult{ Stdout: io.Stdout, Stderr: io.Stderr, - UpdatedUploadPort: res.UpdatedUploadPort, + UpdatedUploadPort: result.NewPort(streamResp().GetUpdatedUploadPort()), }) } } type uploadResult struct { - Stdout string `json:"stdout"` - Stderr string `json:"stderr"` - UpdatedUploadPort *rpc.Port `json:"updated_upload_port,omitempty"` + Stdout string `json:"stdout"` + Stderr string `json:"stderr"` + UpdatedUploadPort *result.Port `json:"updated_upload_port,omitempty"` } func (r *uploadResult) Data() interface{} { @@ -218,5 +231,5 @@ func (r *uploadResult) String() string { if r.UpdatedUploadPort == nil { return "" } - return tr("New upload port: %[1]s (%[2]s)", r.UpdatedUploadPort.Address, r.UpdatedUploadPort.Protocol) + return i18n.Tr("New upload port: %[1]s (%[2]s)", r.UpdatedUploadPort.Address, r.UpdatedUploadPort.Protocol) } diff --git a/internal/cli/usage.go b/internal/cli/usage.go index 0858fd7fffd..31c335569bc 100644 --- a/internal/cli/usage.go +++ b/internal/cli/usage.go @@ -15,22 +15,18 @@ package cli -import ( - "github.com/arduino/arduino-cli/i18n" -) - -var tr = i18n.Tr +import "github.com/arduino/arduino-cli/internal/i18n" func getUsageTemplate() string { // Force i18n to generate translation strings - _ = tr("Usage:") - _ = tr("Aliases:") - _ = tr("Examples:") - _ = tr("Available Commands:") - _ = tr("Flags:") - _ = tr("Global Flags:") - _ = tr("Additional help topics:") - _ = tr("Use %s for more information about a command.") + _ = i18n.Tr("Usage:") + _ = i18n.Tr("Aliases:") + _ = i18n.Tr("Examples:") + _ = i18n.Tr("Available Commands:") + _ = i18n.Tr("Flags:") + _ = i18n.Tr("Global Flags:") + _ = i18n.Tr("Additional help topics:") + _ = i18n.Tr("Use %s for more information about a command.", "") return `{{tr "Usage:"}}{{if .Runnable}} {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} diff --git a/internal/cli/version/version.go b/internal/cli/version/version.go index e445d751fc8..5748ded3a64 100644 --- a/internal/cli/version/version.go +++ b/internal/cli/version/version.go @@ -16,35 +16,35 @@ package version import ( - "fmt" + "context" "os" "strings" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/updater" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/arduino-cli/version" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - semver "go.bug.st/relaxed-semver" ) -var tr = i18n.Tr - // NewCommand created a new `version` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { versionCommand := &cobra.Command{ Use: "version", - Short: tr("Shows version number of Arduino CLI."), - Long: tr("Shows the version number of Arduino CLI which is installed on your system."), + Short: i18n.Tr("Shows version number of Arduino CLI."), + Long: i18n.Tr("Shows the version number of Arduino CLI which is installed on your system."), Example: " " + os.Args[0] + " version", Args: cobra.NoArgs, - Run: runVersionCommand, + Run: func(cmd *cobra.Command, args []string) { + runVersionCommand(cmd.Context(), srv) + }, } return versionCommand } -func runVersionCommand(cmd *cobra.Command, args []string) { +func runVersionCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { logrus.Info("Executing `arduino-cli version`") info := version.VersionInfo @@ -55,20 +55,21 @@ func runVersionCommand(cmd *cobra.Command, args []string) { return } - currentVersion, err := semver.Parse(info.VersionString) + latestVersion := "" + res, err := srv.CheckForArduinoCLIUpdates(ctx, &rpc.CheckForArduinoCLIUpdatesRequest{}) if err != nil { - feedback.Fatal(fmt.Sprintf("Error parsing current version: %s", err), feedback.ErrGeneric) + feedback.Warning("Failed to check for updates: " + err.Error()) + } else { + latestVersion = res.GetNewestVersion() } - latestVersion := updater.CheckForUpdate(currentVersion) - if feedback.GetFormat() != feedback.Text && latestVersion != nil { - // Set this only we managed to get the latest version - info.LatestVersion = latestVersion.String() + if feedback.GetFormat() != feedback.Text { + info.LatestVersion = latestVersion } feedback.PrintResult(info) - if feedback.GetFormat() == feedback.Text && latestVersion != nil { - updater.NotifyNewVersionIsAvailable(latestVersion.String()) + if feedback.GetFormat() == feedback.Text && latestVersion != "" { + updater.NotifyNewVersionIsAvailable(latestVersion) } } diff --git a/docsgen/main.go b/internal/docsgen/main.go similarity index 84% rename from docsgen/main.go rename to internal/docsgen/main.go index 5bb4a3fcc4b..fa175fff583 100644 --- a/docsgen/main.go +++ b/internal/docsgen/main.go @@ -18,7 +18,7 @@ package main import ( "os" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli" "github.com/spf13/cobra/doc" ) @@ -31,11 +31,10 @@ func main() { os.MkdirAll(os.Args[1], 0755) // Create the output folder if it doesn't already exist - configuration.Settings = configuration.Init(configuration.FindConfigFileInArgs(os.Args)) - cli := cli.NewCommand() + srv := commands.NewArduinoCoreServer() + cli := cli.NewCommand(srv) cli.DisableAutoGenTag = true // Disable addition of auto-generated date stamp - err := doc.GenMarkdownTree(cli, os.Args[1]) - if err != nil { + if err := doc.GenMarkdownTree(cli, os.Args[1]); err != nil { panic(err) } } diff --git a/internal/go-configmap/cli.go b/internal/go-configmap/cli.go new file mode 100644 index 00000000000..d467cfc9c32 --- /dev/null +++ b/internal/go-configmap/cli.go @@ -0,0 +1,109 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap + +import ( + "fmt" + "strconv" + "strings" +) + +func (c *Map) SetFromCLIArgs(key string, args ...string) error { + if len(args) == 0 { + c.Delete(key) + return nil + } + + // in case of schemaless configuration, we don't know the type of the setting + // we will save it as a string or array of strings + if len(c.schema) == 0 { + switch len(args) { + case 1: + c.Set(key, args[0]) + default: + c.Set(key, args) + } + return nil + } + + // Find the correct type for the given setting + valueType, ok := c.schema[key] + if !ok { + return fmt.Errorf("key not found: %s", key) + } + + var value any + isArray := false + { + var conversionError error + switch valueType.String() { + case "uint": + value, conversionError = strconv.Atoi(args[0]) + case "bool": + value, conversionError = strconv.ParseBool(args[0]) + case "string": + value = args[0] + case "[]string": + value = args + isArray = true + default: + return fmt.Errorf("unhandled type: %s", valueType) + } + if conversionError != nil { + return fmt.Errorf("error setting value: %v", conversionError) + } + } + if !isArray && len(args) != 1 { + return fmt.Errorf("error setting value: key is not an array, but multiple values were provided") + } + + return c.Set(key, value) +} + +func (c *Map) InjectEnvVars(env []string, prefix string) []error { + if prefix != "" { + prefix = strings.ToUpper(prefix) + "_" + } + + errs := []error{} + + envKeyToConfigKey := map[string]string{} + for _, k := range c.AllKeys() { + normalizedKey := prefix + strings.ToUpper(k) + normalizedKey = strings.ReplaceAll(normalizedKey, ".", "_") + envKeyToConfigKey[normalizedKey] = k + } + + for _, e := range env { + // Extract key and value from env + envKey, envValue, ok := strings.Cut(e, "=") + if !ok { + continue + } + + // Check if the configuration has a matching key + key, ok := envKeyToConfigKey[strings.ToUpper(envKey)] + if !ok { + continue + } + + // Update the configuration value + if err := c.SetFromCLIArgs(key, envValue); err != nil { + errs = append(errs, err) + } + } + return errs +} diff --git a/internal/go-configmap/configuration.go b/internal/go-configmap/configuration.go new file mode 100644 index 00000000000..e1a9dbb791e --- /dev/null +++ b/internal/go-configmap/configuration.go @@ -0,0 +1,219 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap + +import ( + "fmt" + "reflect" + "strings" +) + +type Map struct { + values map[string]any + schema map[string]reflect.Type +} + +func New() *Map { + return &Map{ + values: make(map[string]any), + schema: make(map[string]reflect.Type), + } +} + +func (c Map) Get(key string) any { + value, _ := c.GetOk(key) + return value +} + +func (c Map) GetOk(key string) (any, bool) { + keys := strings.Split(key, ".") + return c.get(keys) +} + +func (c Map) get(keys []string) (any, bool) { + if len(keys) == 0 { + return nil, false + } + value, ok := c.values[keys[0]] + if len(keys) == 1 { + return value, ok + } + + if subConf, ok := value.(*Map); ok { + return subConf.get(keys[1:]) + } + return nil, false +} + +func (c Map) Set(key string, value any) error { + if len(c.schema) > 0 { + t, ok := c.schema[key] + if !ok { + return fmt.Errorf("schema not defined for key '%s'", key) + } + newValue, err := tryConversion(value, t) + if err != nil { + return fmt.Errorf("invalid type for key '%s': %w", key, err) + } + value = newValue + } + keys := strings.Split(key, ".") + c.set(keys, value) + return nil +} + +func tryConversion(current any, desiredType reflect.Type) (any, error) { + currentType := reflect.TypeOf(current) + if currentType == desiredType { + return current, nil + } + + switch desiredType.Kind() { + case reflect.Uint: + // Exception for JSON decoder: json decoder will decode all numbers as float64 + if currentFloat, ok := current.(float64); ok { + return uint(currentFloat), nil + } + if currentInt, ok := current.(int); ok { + return uint(currentInt), nil + } + case reflect.Int: + // Exception for JSON decoder: json decoder will decode all numbers as float64 + if currentFloat, ok := current.(float64); ok { + return int(currentFloat), nil + } + case reflect.Array, reflect.Slice: + currentArray, ok := current.([]any) + if !ok && current != nil { + break + } + + resArray := reflect.MakeSlice(desiredType, len(currentArray), len(currentArray)) + for i, elem := range currentArray { + newElem, err := tryConversion(elem, desiredType.Elem()) + if err != nil { + return nil, err + } + resArray.Index(i).Set(reflect.ValueOf(newElem)) + } + return resArray.Interface(), nil + } + + currentTypeString := currentType.String() + if currentTypeString == "[]interface {}" { + currentTypeString = "array" + } + return nil, fmt.Errorf("invalid conversion, got %s but want %v", currentTypeString, desiredType) +} + +func (c Map) set(keys []string, value any) { + if len(keys) == 0 { + return + } + if len(keys) == 1 { + c.values[keys[0]] = value + return + } + + var subConf *Map + if subValue, ok := c.values[keys[0]]; !ok { + subConf = New() + c.values[keys[0]] = subConf + } else if conf, ok := subValue.(*Map); !ok { + subConf = New() + c.values[keys[0]] = subConf + } else { + subConf = conf + } + subConf.set(keys[1:], value) +} + +func (c Map) Delete(key string) { + keys := strings.Split(key, ".") + c.delete(keys) +} + +func (c Map) delete(keys []string) { + if len(keys) == 0 { + return + } + if len(keys) == 1 { + delete(c.values, keys[0]) + return + } + + if subValue, ok := c.values[keys[0]]; !ok { + return + } else if subConf, ok := subValue.(*Map); !ok { + return + } else { + subConf.delete(keys[1:]) + } +} + +func (c *Map) Merge(x *Map) error { + for xk, xv := range x.values { + if xSubConf, ok := xv.(*Map); ok { + if subConf, ok := c.values[xk].(*Map); ok { + if err := subConf.Merge(xSubConf); err != nil { + return err + } + continue + } + return fmt.Errorf("cannot merge sub-configuration into non sub-configuration: '%s'", xk) + } + + v, ok := c.values[xk] + if !ok { + return fmt.Errorf("target key do not exist: '%s'", xk) + } + if reflect.TypeOf(v) != reflect.TypeOf(xv) { + return fmt.Errorf("invalid types for key '%s': got %T but want %T", xk, v, xv) + } + c.values[xk] = xv + } + return nil +} + +func (c *Map) AllKeys() []string { + return c.allKeys("") +} + +func (c *Map) Schema() map[string]reflect.Type { + return c.schema +} + +func (c *Map) allKeys(prefix string) []string { + keys := []string{} + if len(c.schema) > 0 { + for k := range c.schema { + keys = append(keys, prefix+k) + } + } else { + for k, v := range c.values { + if subConf, ok := v.(*Map); ok { + keys = append(keys, subConf.allKeys(prefix+k+".")...) + } else { + keys = append(keys, prefix+k) + } + } + } + return keys +} + +func (c *Map) SetKeyTypeSchema(key string, t any) { + c.schema[key] = reflect.TypeOf(t) +} diff --git a/internal/go-configmap/configuration_test.go b/internal/go-configmap/configuration_test.go new file mode 100644 index 00000000000..c9c025cb3ce --- /dev/null +++ b/internal/go-configmap/configuration_test.go @@ -0,0 +1,218 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap_test + +import ( + "encoding/json" + "testing" + + "github.com/arduino/arduino-cli/internal/go-configmap" + "github.com/stretchr/testify/require" + "gopkg.in/yaml.v3" +) + +func TestConfiguration(t *testing.T) { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + require.Equal(t, "bar", c.Get("foo")) + require.Equal(t, "baz", c.Get("fooz.bar")) + require.Equal(t, 42, c.Get("answer")) + + yml, err := yaml.Marshal(c) + require.NoError(t, err) + + d := configmap.New() + err = yaml.Unmarshal(yml, &d) + require.NoError(t, err) + + yml2, err := yaml.Marshal(d) + require.NoError(t, err) + require.Equal(t, string(yml), string(yml2)) + + d.Set("fooz.abc", "def") + d.Set("fooz.cde", "fgh") + require.Equal(t, "def", d.Get("fooz.abc")) + require.Equal(t, "fgh", d.Get("fooz.cde")) + d.Delete("fooz.abc") + require.Nil(t, d.Get("fooz.abc")) + require.Equal(t, "fgh", d.Get("fooz.cde")) + d.Delete("fooz") + require.Nil(t, d.Get("fooz.cde")) +} + +func TestYAMLCleanUpOfZeroValues(t *testing.T) { + inYml := []byte(` +foo: bar +directories: + builtins: {} +`) + c := configmap.New() + outYml1, err := yaml.Marshal(c) + require.NoError(t, err) + require.Equal(t, "{}\n", string(outYml1)) + + err = yaml.Unmarshal(inYml, &c) + require.NoError(t, err) + + outYml2, err := yaml.Marshal(c) + require.NoError(t, err) + require.Equal(t, "foo: bar\n", string(outYml2)) +} + +func TestApplyEnvVars(t *testing.T) { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + c.InjectEnvVars([]string{"APP_FOO=app-bar", "APP_FOOZ_BAR=app-baz"}, "APP") + require.Equal(t, "app-bar", c.Get("foo")) + require.Equal(t, "app-baz", c.Get("fooz.bar")) + require.Equal(t, 42, c.Get("answer")) +} + +func TestMerge(t *testing.T) { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + + d := configmap.New() + d.Set("answer", 24) + require.NoError(t, c.Merge(d)) + require.Equal(t, "bar", c.Get("foo")) + require.Equal(t, "baz", c.Get("fooz.bar")) + require.Equal(t, 24, c.Get("answer")) + + e := configmap.New() + e.Set("fooz.bar", "barz") + require.NoError(t, c.Merge(e)) + require.Equal(t, "bar", c.Get("foo")) + require.Equal(t, "barz", c.Get("fooz.bar")) + require.Equal(t, 24, c.Get("answer")) + + f := configmap.New() + f.Set("fooz.bar", 10) + require.EqualError(t, c.Merge(f), "invalid types for key 'bar': got string but want int") + + g := configmap.New() + g.Set("fooz.bart", "baz") + require.EqualError(t, c.Merge(g), "target key do not exist: 'bart'") +} + +func TestAllKeys(t *testing.T) { + { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + require.ElementsMatch(t, []string{"foo", "fooz.bar", "answer"}, c.AllKeys()) + } + { + inYml := []byte(` +foo: bar +dir: + a: yes + b: no + c: {} + d: + - 1 + - 2 +`) + c := configmap.New() + err := yaml.Unmarshal(inYml, &c) + require.NoError(t, err) + require.ElementsMatch(t, []string{"foo", "dir.a", "dir.b", "dir.d"}, c.AllKeys()) + } +} + +func TestSchema(t *testing.T) { + c := configmap.New() + c.SetKeyTypeSchema("string", "") + c.SetKeyTypeSchema("int", 15) + c.SetKeyTypeSchema("obj.string", "") + c.SetKeyTypeSchema("obj.int", 15) + c.SetKeyTypeSchema("uint", uint(15)) + c.SetKeyTypeSchema("obj.uint", uint(15)) + c.SetKeyTypeSchema("array", []string{}) + c.SetKeyTypeSchema("obj.array", []string{}) + + // Set array of string + require.NoError(t, c.Set("array", []string{"abc", "def"})) + require.NoError(t, c.Set("obj.array", []string{"abc", "def"})) + require.Equal(t, []string{"abc", "def"}, c.Get("array")) + require.Equal(t, []string{"abc", "def"}, c.Get("obj.array")) + // Set array of string with array of any + require.NoError(t, c.Set("array", []any{"abc", "def"})) + require.NoError(t, c.Set("obj.array", []any{"abc", "def"})) + require.Equal(t, []string{"abc", "def"}, c.Get("array")) + require.Equal(t, []string{"abc", "def"}, c.Get("obj.array")) + // Set array of string with array of int + require.EqualError(t, c.Set("array", []any{"abc", 123}), "invalid type for key 'array': invalid conversion, got int but want string") + require.EqualError(t, c.Set("obj.array", []any{"abc", 123}), "invalid type for key 'obj.array': invalid conversion, got int but want string") + + // Set string + require.NoError(t, c.Set("string", "abc")) + require.NoError(t, c.Set("obj.string", "abc")) + require.Equal(t, "abc", c.Get("string")) + require.Equal(t, "abc", c.Get("obj.string")) + // Set string with int + require.EqualError(t, c.Set("string", 123), "invalid type for key 'string': invalid conversion, got int but want string") + require.EqualError(t, c.Set("obj.string", 123), "invalid type for key 'obj.string': invalid conversion, got int but want string") + + // Set int + require.NoError(t, c.Set("int", 123)) + require.NoError(t, c.Set("obj.int", 123)) + require.Equal(t, 123, c.Get("int")) + require.Equal(t, 123, c.Get("obj.int")) + // Set int with string + require.EqualError(t, c.Set("int", "abc"), "invalid type for key 'int': invalid conversion, got string but want int") + require.EqualError(t, c.Set("obj.int", "abc"), "invalid type for key 'obj.int': invalid conversion, got string but want int") + + // Set uint + require.NoError(t, c.Set("uint", uint(234))) + require.NoError(t, c.Set("obj.uint", uint(234))) + require.Equal(t, uint(234), c.Get("uint")) + require.Equal(t, uint(234), c.Get("obj.uint")) + // Set uint using int + require.NoError(t, c.Set("uint", 345)) + require.NoError(t, c.Set("obj.uint", 345)) + require.Equal(t, uint(345), c.Get("uint")) + require.Equal(t, uint(345), c.Get("obj.uint")) + // Set uint using float + require.NoError(t, c.Set("uint", 456.0)) + require.NoError(t, c.Set("obj.uint", 456.0)) + require.Equal(t, uint(456), c.Get("uint")) + require.Equal(t, uint(456), c.Get("obj.uint")) + // Set uint using string + require.EqualError(t, c.Set("uint", "567"), "invalid type for key 'uint': invalid conversion, got string but want uint") + require.EqualError(t, c.Set("obj.uint", "567"), "invalid type for key 'obj.uint': invalid conversion, got string but want uint") + require.Equal(t, uint(456), c.Get("uint")) + require.Equal(t, uint(456), c.Get("obj.uint")) + + json1 := []byte(`{"string":"abcd","int":1234,"obj":{"string":"abcd","int":1234}}`) + require.NoError(t, json.Unmarshal(json1, &c)) + require.Equal(t, "abcd", c.Get("string")) + require.Equal(t, 1234, c.Get("int")) + require.Equal(t, "abcd", c.Get("obj.string")) + require.Equal(t, 1234, c.Get("obj.int")) + + json2 := []byte(`{"string":123,"int":123,"obj":{"string":"abc","int":123}}`) + require.EqualError(t, json.Unmarshal(json2, &c), "invalid type for key 'string': invalid conversion, got float64 but want string") + json3 := []byte(`{"string":"avc","int":123,"obj":{"string":123,"int":123}}`) + require.EqualError(t, json.Unmarshal(json3, &c), "invalid type for key 'obj.string': invalid conversion, got float64 but want string") +} diff --git a/internal/go-configmap/errors.go b/internal/go-configmap/errors.go new file mode 100644 index 00000000000..2ad42f3e129 --- /dev/null +++ b/internal/go-configmap/errors.go @@ -0,0 +1,54 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap + +import "strings" + +// UnmarshalErrors is a collection of errors that occurred during unmarshalling. +// Do not return this type directly, but use its result() method instead. +type UnmarshalErrors struct { + wrapped []error +} + +func (e *UnmarshalErrors) append(err error) { + e.wrapped = append(e.wrapped, err) +} + +func (e *UnmarshalErrors) result() error { + if len(e.wrapped) == 0 { + return nil + } + return e +} + +func (e *UnmarshalErrors) Error() string { + if len(e.wrapped) == 1 { + return e.wrapped[0].Error() + } + errs := []string{"multiple errors:"} + for _, err := range e.wrapped { + errs = append(errs, "- "+err.Error()) + } + return strings.Join(errs, "\n") +} + +// WrappedErrors returns the list of errors that occurred during unmarshalling. +func (e *UnmarshalErrors) WrappedErrors() []error { + if e == nil { + return nil + } + return e.wrapped +} diff --git a/internal/go-configmap/json.go b/internal/go-configmap/json.go new file mode 100644 index 00000000000..7ab0deaad4f --- /dev/null +++ b/internal/go-configmap/json.go @@ -0,0 +1,52 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap + +import "encoding/json" + +func (c Map) MarshalJSON() ([]byte, error) { + return json.Marshal(c.values) +} + +func (c *Map) UnmarshalJSON(data []byte) error { + in := map[string]any{} + if err := json.Unmarshal(data, &in); err != nil { + return err + } + + c.values = map[string]any{} + for k, v := range flattenMap(in) { + if err := c.Set(k, v); err != nil { + return err + } + } + return nil +} + +func flattenMap(in map[string]any) map[string]any { + out := map[string]any{} + for k, v := range in { + switch v := v.(type) { + case map[string]any: + for kk, vv := range flattenMap(v) { + out[k+"."+kk] = vv + } + default: + out[k] = v + } + } + return out +} diff --git a/executils/process_test.go b/internal/go-configmap/json_test.go similarity index 53% rename from executils/process_test.go rename to internal/go-configmap/json_test.go index 4e50f51993f..54566589baf 100644 --- a/executils/process_test.go +++ b/internal/go-configmap/json_test.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2021 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,30 +13,36 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package executils +package configmap_test import ( - "context" + "encoding/json" + "fmt" "testing" - "time" + "github.com/arduino/arduino-cli/internal/go-configmap" "github.com/stretchr/testify/require" ) -func TestProcessWithinContext(t *testing.T) { - // Build `delay` helper inside testdata/delay - builder, err := NewProcess(nil, "go", "build") +func TestJson(t *testing.T) { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + require.Equal(t, "bar", c.Get("foo")) + require.Equal(t, "baz", c.Get("fooz.bar")) + require.Equal(t, 42, c.Get("answer")) + + j1, err := json.Marshal(c) + require.NoError(t, err) + fmt.Println(string(j1)) + + d := configmap.New() + err = json.Unmarshal(j1, d) require.NoError(t, err) - builder.SetDir("testdata/delay") - require.NoError(t, builder.Run()) + require.Equal(t, "baz", d.Get("fooz.bar")) - // Run delay and test if the process is terminated correctly due to context - process, err := NewProcess(nil, "testdata/delay/delay") + j2, err := json.Marshal(d) require.NoError(t, err) - start := time.Now() - ctx, cancel := context.WithTimeout(context.Background(), 250*time.Millisecond) - err = process.RunWithinContext(ctx) - require.Error(t, err) - require.Less(t, time.Since(start), 500*time.Millisecond) - cancel() + require.Equal(t, string(j1), string(j2)) } diff --git a/internal/go-configmap/types.go b/internal/go-configmap/types.go new file mode 100644 index 00000000000..d6a032b8dd6 --- /dev/null +++ b/internal/go-configmap/types.go @@ -0,0 +1,215 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap + +import ( + "errors" + "fmt" + "time" +) + +func (c Map) GetStringOk(key string) (string, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return "", false, nil + } + if s, ok := v.(string); ok { + return s, true, nil + } + return "", false, errors.New(key + " is not a string") +} + +func (c Map) GetString(key string) string { + v, ok, err := c.GetStringOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return "" +} + +func (c Map) SetString(key string, value string) { + c.Set(key, value) +} + +func (c Map) GetBoolOk(key string) (bool, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return false, false, nil + } + if b, ok := v.(bool); ok { + return b, true, nil + } + return false, false, errors.New(key + " is not a bool") +} + +func (c Map) GetBool(key string) bool { + v, ok, err := c.GetBoolOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return false +} + +func (c Map) SetBool(key string, value bool) { + c.Set(key, value) +} + +func (c Map) GetUintOk(key string) (uint, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return 0, false, nil + } + if i, ok := v.(uint); ok { + return i, true, nil + } + return 0, false, errors.New(key + " is not a uint") +} + +func (c Map) GetUint(key string) uint { + v, ok, err := c.GetUintOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return 0 +} + +func (c Map) SetUint(key string, value uint) { + c.Set(key, value) +} + +func (c Map) GetIntOk(key string) (int, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return 0, false, nil + } + if i, ok := v.(int); ok { + return i, true, nil + } + return 0, false, errors.New(key + " is not a uint") +} + +func (c Map) GetInt(key string) int { + v, ok, err := c.GetIntOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return 0 +} + +func (c Map) SetInt(key string, value int) { + c.Set(key, value) +} + +func (c Map) GetUint32Ok(key string) (uint32, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return 0, false, nil + } + if i, ok := v.(uint32); ok { + return i, true, nil + } + return 0, false, errors.New(key + " is not a uint32") +} + +func (c Map) GetUint32(key string) uint32 { + v, ok, err := c.GetUint32Ok(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return 0 +} + +func (c Map) SetUint32(key string, value uint32) { + c.Set(key, value) +} + +func (c Map) GetStringSliceOk(key string) ([]string, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return nil, false, nil + } + if genArray, ok := v.([]string); ok { + return genArray, true, nil + } + if genArray, ok := v.([]interface{}); ok { + // transform []interface{} to []string + var strArray []string + for i, gen := range genArray { + if str, ok := gen.(string); ok { + strArray = append(strArray, str) + } else { + return nil, false, fmt.Errorf("%s[%d] is not a string", key, i) + } + } + return strArray, true, nil + } + return nil, false, fmt.Errorf("%s is not an array of strings", key) +} + +func (c Map) GetStringSlice(key string) []string { + v, ok, err := c.GetStringSliceOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return nil +} + +func (c Map) GetDurationOk(key string) (time.Duration, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return 0, false, nil + } + if s, ok := v.(string); !ok { + return 0, false, errors.New(key + " is not a Duration") + } else if d, err := time.ParseDuration(s); err != nil { + return 0, false, fmt.Errorf("%s is not a valid Duration: %w", key, err) + } else { + return d, true, nil + } +} + +func (c Map) GetDuration(key string) time.Duration { + v, ok, err := c.GetDurationOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return 0 +} + +func (c Map) SetDuration(key string, value time.Duration) { + c.SetString(key, value.String()) +} diff --git a/arduino/libraries/librariesindex/reference.go b/internal/go-configmap/yaml.go similarity index 60% rename from arduino/libraries/librariesindex/reference.go rename to internal/go-configmap/yaml.go index a69663ee8f5..e58f8f31ecf 100644 --- a/arduino/libraries/librariesindex/reference.go +++ b/internal/go-configmap/yaml.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,21 +13,27 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package librariesindex +package configmap import ( - semver "go.bug.st/relaxed-semver" + "gopkg.in/yaml.v3" ) -// Reference uniquely identify a Library in the library index -type Reference struct { - Name string // The name of the parsed item. - Version *semver.Version // The Version of the parsed item. +func (c Map) MarshalYAML() (interface{}, error) { + return c.values, nil } -func (r *Reference) String() string { - if r.Version == nil { - return r.Name +func (c *Map) UnmarshalYAML(node *yaml.Node) error { + in := map[string]any{} + if err := node.Decode(&in); err != nil { + return err } - return r.Name + "@" + r.Version.String() + + errs := &UnmarshalErrors{} + for k, v := range flattenMap(in) { + if err := c.Set(k, v); err != nil { + errs.append(err) + } + } + return errs.result() } diff --git a/internal/go-configmap/yaml_test.go b/internal/go-configmap/yaml_test.go new file mode 100644 index 00000000000..9293f70662f --- /dev/null +++ b/internal/go-configmap/yaml_test.go @@ -0,0 +1,48 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap_test + +import ( + "fmt" + "testing" + + "github.com/arduino/arduino-cli/internal/go-configmap" + "github.com/stretchr/testify/require" + "gopkg.in/yaml.v3" +) + +func TestYaml(t *testing.T) { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + require.Equal(t, "bar", c.Get("foo")) + require.Equal(t, "baz", c.Get("fooz.bar")) + require.Equal(t, 42, c.Get("answer")) + + y1, err := yaml.Marshal(c) + require.NoError(t, err) + fmt.Println(string(y1)) + + d := configmap.New() + err = yaml.Unmarshal(y1, d) + require.NoError(t, err) + require.Equal(t, "baz", d.Get("fooz.bar")) + + y2, err := yaml.Marshal(d) + require.NoError(t, err) + require.Equal(t, string(y1), string(y2)) +} diff --git a/i18n/README.md b/internal/i18n/README.md similarity index 100% rename from i18n/README.md rename to internal/i18n/README.md diff --git a/i18n/cmd/ast/parser.go b/internal/i18n/cmd/ast/parser.go similarity index 97% rename from i18n/cmd/ast/parser.go rename to internal/i18n/cmd/ast/parser.go index 9126a4ada8e..d8d558cd975 100644 --- a/i18n/cmd/ast/parser.go +++ b/internal/i18n/cmd/ast/parser.go @@ -24,7 +24,7 @@ import ( "path/filepath" "strconv" - "github.com/arduino/arduino-cli/i18n/cmd/po" + "github.com/arduino/arduino-cli/internal/i18n/cmd/po" ) // GenerateCatalog generates the i18n message catalog for the go source files diff --git a/i18n/cmd/commands/catalog/catalog.go b/internal/i18n/cmd/commands/catalog/catalog.go similarity index 100% rename from i18n/cmd/commands/catalog/catalog.go rename to internal/i18n/cmd/commands/catalog/catalog.go diff --git a/i18n/cmd/commands/catalog/generate_catalog.go b/internal/i18n/cmd/commands/catalog/generate_catalog.go similarity index 96% rename from i18n/cmd/commands/catalog/generate_catalog.go rename to internal/i18n/cmd/commands/catalog/generate_catalog.go index c895660867a..1c65c640ffc 100644 --- a/i18n/cmd/commands/catalog/generate_catalog.go +++ b/internal/i18n/cmd/commands/catalog/generate_catalog.go @@ -19,7 +19,7 @@ import ( "os" "path/filepath" - "github.com/arduino/arduino-cli/i18n/cmd/ast" + "github.com/arduino/arduino-cli/internal/i18n/cmd/ast" "github.com/spf13/cobra" ) diff --git a/i18n/cmd/commands/root.go b/internal/i18n/cmd/commands/root.go similarity index 88% rename from i18n/cmd/commands/root.go rename to internal/i18n/cmd/commands/root.go index e05403669c0..14559dcfee9 100644 --- a/i18n/cmd/commands/root.go +++ b/internal/i18n/cmd/commands/root.go @@ -16,8 +16,8 @@ package commands import ( - "github.com/arduino/arduino-cli/i18n/cmd/commands/catalog" - "github.com/arduino/arduino-cli/i18n/cmd/commands/transifex" + "github.com/arduino/arduino-cli/internal/i18n/cmd/commands/catalog" + "github.com/arduino/arduino-cli/internal/i18n/cmd/commands/transifex" "github.com/spf13/cobra" ) diff --git a/i18n/cmd/commands/transifex/pull_transifex.go b/internal/i18n/cmd/commands/transifex/pull_transifex.go similarity index 100% rename from i18n/cmd/commands/transifex/pull_transifex.go rename to internal/i18n/cmd/commands/transifex/pull_transifex.go diff --git a/i18n/cmd/commands/transifex/push_transifex.go b/internal/i18n/cmd/commands/transifex/push_transifex.go similarity index 100% rename from i18n/cmd/commands/transifex/push_transifex.go rename to internal/i18n/cmd/commands/transifex/push_transifex.go diff --git a/i18n/cmd/commands/transifex/transifex.go b/internal/i18n/cmd/commands/transifex/transifex.go similarity index 100% rename from i18n/cmd/commands/transifex/transifex.go rename to internal/i18n/cmd/commands/transifex/transifex.go diff --git a/i18n/cmd/main.go b/internal/i18n/cmd/main.go similarity index 93% rename from i18n/cmd/main.go rename to internal/i18n/cmd/main.go index 69b1373251e..8752c9d668e 100644 --- a/i18n/cmd/main.go +++ b/internal/i18n/cmd/main.go @@ -19,7 +19,7 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/i18n/cmd/commands" + "github.com/arduino/arduino-cli/internal/i18n/cmd/commands" ) func main() { diff --git a/i18n/cmd/po/catalog.go b/internal/i18n/cmd/po/catalog.go similarity index 100% rename from i18n/cmd/po/catalog.go rename to internal/i18n/cmd/po/catalog.go diff --git a/i18n/cmd/po/catalog_test.go b/internal/i18n/cmd/po/catalog_test.go similarity index 100% rename from i18n/cmd/po/catalog_test.go rename to internal/i18n/cmd/po/catalog_test.go diff --git a/i18n/cmd/po/merge.go b/internal/i18n/cmd/po/merge.go similarity index 100% rename from i18n/cmd/po/merge.go rename to internal/i18n/cmd/po/merge.go diff --git a/i18n/cmd/po/merge_test.go b/internal/i18n/cmd/po/merge_test.go similarity index 100% rename from i18n/cmd/po/merge_test.go rename to internal/i18n/cmd/po/merge_test.go diff --git a/i18n/cmd/po/parser.go b/internal/i18n/cmd/po/parser.go similarity index 100% rename from i18n/cmd/po/parser.go rename to internal/i18n/cmd/po/parser.go diff --git a/i18n/cmd/po/parser_test.go b/internal/i18n/cmd/po/parser_test.go similarity index 100% rename from i18n/cmd/po/parser_test.go rename to internal/i18n/cmd/po/parser_test.go diff --git a/i18n/convert.go b/internal/i18n/convert.go similarity index 100% rename from i18n/convert.go rename to internal/i18n/convert.go diff --git a/i18n/convert_test.go b/internal/i18n/convert_test.go similarity index 100% rename from i18n/convert_test.go rename to internal/i18n/convert_test.go diff --git a/i18n/data/.gitkeep b/internal/i18n/data/.gitkeep similarity index 100% rename from i18n/data/.gitkeep rename to internal/i18n/data/.gitkeep diff --git a/i18n/data/README.md b/internal/i18n/data/README.md similarity index 74% rename from i18n/data/README.md rename to internal/i18n/data/README.md index e795dcd7735..5d8d773c26d 100644 --- a/i18n/data/README.md +++ b/internal/i18n/data/README.md @@ -6,7 +6,7 @@ This folder contains the [localization](https://wikipedia.org/wiki/Language_loca at the source: - **en.po** - edit the string in the source code file indicated by the comment above it <br /> e.g., a comment - `#: commands/upload/upload.go:615` indicates the source string is at line 615 of the file - [`commands/upload/upload.go`](../../commands/upload/upload.go) + `#: internal/cli/lib/check_deps.go:102` indicates the source string is at line 102 of the file + [`internal/cli/lib/check_deps.go`](../../../internal/cli/lib/check_deps.go) - **All other files** - the localization is done on **Transifex**: <br /> https://explore.transifex.com/arduino-1/arduino-cli/ diff --git a/i18n/data/ar.po b/internal/i18n/data/ar.po similarity index 67% rename from i18n/data/ar.po rename to internal/i18n/data/ar.po index 004f4258ca7..7f5b7d9fac7 100644 --- a/i18n/data/ar.po +++ b/internal/i18n/data/ar.po @@ -4,103 +4,88 @@ # Mark Asaad, 2022 # Osama Breman, 2023 # طارق عبد الفتاح, 2023 +# Ahmed Gaafar, 2024 # msgid "" msgstr "" -"Last-Translator: طارق عبد الفتاح, 2023\n" +"Last-Translator: Ahmed Gaafar, 2024\n" "Language-Team: Arabic (https://app.transifex.com/arduino-1/teams/108174/ar/)\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s %[2]s النسخة : %[3]s commit : %[4]s التاريخ : %[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "الملف %[1]s اصبح غير مدعوما! راجع %[2]s للمزيد من المعلومات" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]s غير صالح . جار اعادة بناء كل شيء" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]s مطلوب و لكن %[2]s مثبت حاليا" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "%[1]s التنسيق مفقود" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s , رسالة : %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s , المنفذ : %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s , المنافذ : %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, نسخة البوتوكول : %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "تم تنزيل %s مسبقا" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "%s و %s لا يمكن استخدامهما معا" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "%s تم تثبيته بنجاح" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "%s مثبت مسبقا" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "%s ليس مسارا صحيحا" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "%s غير مدار بواسطة مدير الحزمات" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "يجب تثبيت %s" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "%s النسق مفقود" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "'%s' لديه توقيع غير صحيح" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "'build.core' و 'build.variant' تشيران الى منصة مختلفة : %[1]s و %[2]s" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(مخفي)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "(الشكل القديم)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" @@ -108,7 +93,7 @@ msgstr "" "مسارات --git url و zip-path-- غير مفعلة افتراضيا . للمزيد من المعلومات راجع " ": %v" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." @@ -116,24 +101,24 @@ msgstr "" "flags الخاصة ب --git-url و --zip-path تسمح بتثبيت ملفات غير موثوقة , " "استخدمها على مسؤوليتك الخاصة" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "لا يمكن استخدام git-url-- او zip-path-- مع install-in-builtin-dir--" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "ملف ino. موجود مسبقا" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "نسخة جديدة من CLI متوفرة " -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "عليك وصل مبرمجة للرفع" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "ARCH" @@ -141,101 +126,105 @@ msgstr "ARCH" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "دليل استخدام سطر موجه الاوامر للاردوينو" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "مواضيع مساعدة اضافية :" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "اضافة قيمة او اكثر الى احد الاعدادات" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "اسماء مستعارة" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "جميع المنصات محدثة" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "كل الانوية محدثة باخر اصدار مسبقا" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "%s مثبت مسبقا" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "البدائل ل %[1]s : %[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "حدث خطأ اثناء اضافة النماذج الاولية" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "حدث خطأ اثناء الكشف عن المكتبات" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "" "الحاق سجل التصحيح الى الملف المحدد (Append debug logging to the specified " "file)" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "المعمارية : %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "الارشيف موجود مسبقا" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "جار ارشفة built core (caching) في : %[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "اوامر مشروع Arduino CLI" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "واجهة موجه سطر الاوامر للاردوينو (Arduino CLI)" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "اوامر لوحات الاردوينو" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "اوامر cache الخاصة بالاردوينو" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "اوامر الاردوينو المتعلقة بالمكتبات" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "ضبط الاردوينو" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "عمليات نواة الاردوينو (Arduino core operations)" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "خطأ بالمدخلات : %v" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "يربط اللوحة بالمشروع" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "المؤلف : %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." @@ -243,7 +232,7 @@ msgstr "" "لا يمكن تنفيذ التثبيت التلقائي للمكتبة في هذه الحالة , الرجاء ازالة كل النسخ" " المطابقة يدويا و الاعادة" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." @@ -251,252 +240,256 @@ msgstr "" "لا يمكن تنفيذ الغاء التثبيت التلقائي للمكتبة في هذه الحالة , الرجاء ازالتها " "يدويا و الاعادة" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "متوفر" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "الاوامر المتوفرة" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "الملف الثنائي (Binary file) الذي تريد رفعه" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "اسم اللوحة" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "اسم اللوحة" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "نسخة اللوحة :" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "ملف محمل الإقلاع (Bootloader) تم تحدديده لكنه مفقود: %[1]s" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" "Builds الخاصة ب 'core.a' تحفظ في هذا المسار و سيتم وضعها في الكاش و سيعاد " "استخدامها" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "تعذر انشاء مسار البيانات %s" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "تعذر انشاء المشروع" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "تعذر تنزيل المكتبة" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "تعذر ايجاد التبعيات للمنصة %s" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "تعذر فتح المشروع" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "تعذر وضع عدة قيم في المفتاح %v" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "نعذر تحديث المشروع" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "لا يمكن استخدام العلامات التالية مع بعضها البعض : %s " -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "تعذر كتابة ملف التهيئة : %v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "تعذر كتابة سجل مصحح الاخطاء : %s" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "تعذر انشاء مجلد لل \"build cache\"" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "تعذر انشاء مسار البناء" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "تعذر انشاء مسار ملف التهيئة : %v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "تعذر انشاء ملف التهيئة : %v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "تعذر انشاء مسار مؤقت" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "تعذر انشاء ملف temp" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "تعذر حذف المفتاح %[1]s:%[2]v" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "تعذر تشغيل اداة debug" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "تعذر ايجاد المسار المطلق : %v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "تعذر تثبيت المنصة" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "تعذر تثبيت الاداة %s" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "تعذر اجراء اعادة تشغيل المنفذ : %s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 msgid "Cannot upgrade platform" msgstr "تعذر تحديث المنصة" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "تعذر كتابة الملف %[1]s : %[2]v" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "الفئة : %s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "التحقق من حالة التبعيات (dependencies) للمكتبة المختارة" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" "المجموع الاختباري (Checksum) لا يتطابق مع المجموع الاختباري (checksum) " "الموجود في package.json " -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "المجموع الاختباري (Checksum) :" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "تنظيف cache" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" "قائمة يفصل بين محتوياتها فاصلة تحوي عناوين URL الاضافية لمدير اللوحات " -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "الامر يبقى قيد التشغيل و يطبع قائمة للوحات المتصلة عندما يوجد تغيير" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "المشروع المترجم لم يتم ايجاده في %s" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "يترجم مشاريع الاردوينو" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "يتم ترجمة النواة" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "يتم ترجمة المكتبات" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "يتم ترجمة المكتبة \"%[1]s\"" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "ترجمة الشيفرة البرمجية..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" "ملف التهيئة موجود مسبقا , استخدم --overwrite للتخلص من الملف الموجود مسبقا" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "تمت كتابة ملف التهيئة في : %s" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "اعدادات الضبط ل %s" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "تكوين إعدادات منفذ الاتصال. التنسيق هو <ID>=<value>[,<ID>=<value>]" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "جار تهيئة المنصة" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "جار تهيئة الاداة" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "متصل" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "متصل الى %s ! اضغط CTRL-C للخروج" +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "النواة" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "تعذر الاتصال بواسطة HTTP" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "تعذر انشاء فهرس داخل المسار" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "تعذر القيام بـ deeply cache لــ core build : %[1]s" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "تعذر معرفة حجم البرنامج" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "تعذر ايجاد المسار الحالي %v" @@ -504,7 +497,7 @@ msgstr "تعذر ايجاد المسار الحالي %v" msgid "Create a new Sketch" msgstr "انشاء مشروع جديد" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "انشاء و طباعة اعدادات البروفايل من البناء (build)" @@ -512,7 +505,7 @@ msgstr "انشاء و طباعة اعدادات البروفايل من البن msgid "Creates a zip file containing all sketch files." msgstr "انشاء ملف zip يحوي كل ملفات المشروع" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." @@ -520,7 +513,7 @@ msgstr "" "انشاء او تحديث ملف الضبط في مسار البيانات او في مسار مخصص مع اعدادات التهيئة" " الحالية" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." @@ -528,90 +521,88 @@ msgstr "" "في الوقت الحالي , بروفايلات البناء (Build Profiles) تدعم حصرا المكتبات " "المتوافرة في مدير المكتبات للاردوينو (Arduino Library Manager)" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "مهملة (غير موصى باستخدامها)" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "Daemon يقوم بالاستماع على %s : %s" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "تصحيح مشاريع الاردوينو" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "تصحيح اخطاء مشاريع الاردوينو (يفتح هذا الامر جلسة gdb تفاعلية)" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "مترجم التصحيح على سبيل المثال : %s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "تصحيح الاخطاء (Debugging) غير مدعوم للوحة %s" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "تصحيح الاخطاء (Debugging) مدعوم :" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "إفتراضي" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "تم تحديد FQBN الافتراضي الى :" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "تم تحديد المنفذ الافتراضي الى :" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "حذف كاش التحميلات (download cache) الخاص بمدير اللوحات/المكتبات" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" -"حذف محتويات مجلد `directories.downloads` حيث يتم تخزين ملفات الارشيف مؤقتا " -"اثناء تثبيت المكتبات و منصات اللوحات" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "حذف مفتاح الاعدادات و كل مفاتيحه الفرعية" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "تبعيات : %s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "الوصف" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "الكشف عن المكتبات المستخدمة ..." -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "تكتشف و تعرض قائمة اللوحات المتصلة الى هذا الكومبيوتر" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "المسار الذي يحوي الملفات الثنائية للتصحيح" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "المجلد الذي يحوي الملفات الثنائية (binaries) التي سيتم رفعها" @@ -627,295 +618,306 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "الغاء تفعيل وصف الاكتمال في واجهات الاوامر التي تدعم ذلك" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "قطع الاتصال" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "يعرض فقط اتصالات gRPC التي تم اعطاؤها" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "عدم تثبيت التبعيات (dependencies)" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "لا تكتب فوق المكتبات المثبتة مسبقا" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "لا تكتب فوق المنصات المثبتة مسبقا" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "لا تقم بالرفع , فقط قم بتسجيل الاحداث" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "" "عدم انهاء عمليات daemon في حال تم انهاء العملية الام (Do not terminate " "daemon process if the parent process dies)" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "لا تحاول تحديث المكتبات أذا تم تثبيتها." + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "يتم تنزيل %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "جار تنزيل فهرس التوقيعات %s" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "جار تنزيل الفهرس : %s" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "جار تحميل المكتبة %s" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "جار تنزيل الاداة الناقصة" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "جار تنزيل الحزم" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "جار تحميل المنصة %s" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "جار تحميل الاداة" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "يقوم بتنزيل نواة او اكثر و ادواتها التابعة لها" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "يقوم بتنزيل مكتبة او اكثر بدون تثبيتها" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "تفعيل تسجيل تصحيح الاخطاء لمكالمات gRPC " -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "ادخل مسار لملف zip" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" "ادخل عنوان git URL الخاص بالمكتبات المستضافة على المستودعات (repositories)" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" "خطأ اثناء اضافة الملف لارشيف المشروع (Error adding file to sketch archive)" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "خطا اثناء ارشفة built core (caching) في %[1]s : %[2]s" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "خطا اثناء ارشفة :%v" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" "خطا اثناء حساب مسار الملف النسبي (Error calculating relative file path)" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "خطأ اثناء تنظيف الكاش : %v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "تعذر تحويل المسار الى مطلق : %v" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "خطا اثناء نسخ ملف الخرج %s" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "خطأ في أنشاء ملف التعريفات:%v" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "خطا اثناء انشاء النسخة %v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "خطا اثناء انشاء مسار الخرج" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "خطا اثناء انشاء ارشيف المشروع" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "خطأ اثناء انشاء المشروع : %v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "خطا اثناء البحث عن اللوحات : %v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "خطا اثناء تحميل %[1]s : %[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "خطأ اثناء تحميل %s" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "خطأ اثناء تحميل الفهرس '%s'" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "خطأ اثناء تحميل توقيع الفهرس : '%s'" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "خطأ اثناء تحميل المكتبة %s" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "خطأ اثناء تنزيل المنصة %s" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "خطا اثناء تنزيل الاداة %s" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "خطا اثناء التصحيح : %v" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "خطا اثناء اكتشاف FBQN : %v" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "خطا اثناء ترميز JSON الخاص بالخرج : %v" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "خطا اثناء الرفع : %v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "خطأ اثناء القيام بYAML econding للخرج : %v" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "خطأ اثناء بناء : %v" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "خطأ اثناء تثبيت : %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "خطأ اثناء الغاء تثبيت : %v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "خطا اثناء تطوير : %v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "خطأ اثناء استخراج %s" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "خطا اثناء البحث عن build artifacts" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "خطأ اثناء الحصول على معلومات التصحيح %v" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "خطا اثناء جلب المسار المطلق لارشيف المشروع" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "خطأ اثناء الحصول على معلومات اللوحة %v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "خطأ اثناء الحصول على المسار الحالي من اجل قاعدة بيانات الترجمة %s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "خطأ اثناء الحصول على المعلومات للمكتبة %s" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "خطا اثناء جلب بيانات المكتبة : %v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "خطأ اثناء جلب البيانات الوصفية (metadata) للمنفذ : %v" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "" "خطأ اثناء الحصول على بيانات اعدادات المنفذ (port settings details) : %s" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "تعذر الحصول على مدخلات المستخدم" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "تعذر تهيئة مثال : %v" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "خطأ اثناء تثبيت %v:%s" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "خطأ اثناء تثبيت مكتبة GIT : %v" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "خطأ اثناء تثبيت مكتبة ZIP : %v" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "خطأ اثناء تثبيت المكتبة %s" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "خطأ اثناء تثبيت المنصة %s" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "خطأ اثناء تثبيت الاداة %s" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "خطا اثناء انشاء قائمة باللوحات : %v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "تعذر احصاء المكتبات : %v" @@ -923,44 +925,40 @@ msgstr "تعذر احصاء المكتبات : %v" msgid "Error listing platforms: %v" msgstr "خطأ اثناء انشاء قائمة تحوي جميع المنصات : %v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "خطا اثناء تحميل منصة الهاردوير" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "خطأ اثناء تحميل الفهرس %s" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "خطأ اثناء فتح %s" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "تعذر فتح الملف الذي يحوي سجلات التصحيح (debug logging file) : %s" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "خطا اثناء فتح الكود المصدر الذي يتجاوز ملف البيانات : %v" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "تعذر تقطيع علامة show-properties-- : %v" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "خطا اثناء قراءة مسار البناء" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "خطا اثناء قراءة ملف التهيئة : %v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "خطا اثناء قراءة ملفات المشروع" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "خطا اثناء حل التبعيات ل %[1]s:%[2]s" @@ -968,208 +966,223 @@ msgstr "خطا اثناء حل التبعيات ل %[1]s:%[2]s" msgid "Error retrieving core list: %v" msgstr "خطا اثناء استعادة قائمة النواة : %v" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "خطا اثناء التراجع عن التغييرات : %s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "خطا اثناء حفظ فهرس التنزيلات" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" "خطأ اثناء حفظ توقيع الفهرس الذي تم تحميله (downloaded index signature)" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "خطا اثناء البحث عن اللوحات : %v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "خطا اثناء البحث عن مكتبات : %v" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "خطأ اثناء البحث عن المنصة : %v" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" "تعذر القيام بسلسلة قاعدة بيانات الترجمة (Error serializing compilation " "database) : %s" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "خطأ في وضع قيمة: %v" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "تعذر بدء الاكتشاف : %v" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "خطا اثناء الغاء تثبيت %[1]s: %[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "خطا اثناء تحديث فهرس المكتبات : %v" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "تعذر ترقية المكتبات" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "خطا اثناء تطوير المنصة : %s" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "تعذر التحقق من التوقيع" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "تعذر العثور على المكتبات التي ضُمِّنَت (included) من قبل : %[1]s" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "خطأ اثناء تحديد حجم المشروع : %s" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "خطأ اثناء كتابة قاعدة بيانات الترجمة (compilation database) : %s" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "خطأ في كتابة الملف: %v" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "خطأ : وصف الامر غير مدعوم من قبل %v" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "خطأ : كود مصدري خاطئ سيقوم بالكتابة فوق ملف البيانات : %v" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "الحدث" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "الامثلة للمكتبة %s" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "الامثلة : " -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "الملف التنفيذي الذي سيتم تصحيحه (Executable to debug)" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "توقعت وجود المشروع المترجم في المسار %s . لكنني وجدت ملفا بدلا عن ذلك" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "فشل محي الشريحة" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "فشل المبرمجة" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "فشل حرق محمل الاقلاع" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "فشل انشاء مسار البيانات" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "فشل انشاء مسار التنزيلات" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "تعذر الاستماع على منفذ TCP : %[1]s . %[2]s منفذ غير صالح" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "تعذر الاستماع على منفذ TCP : %[1]s . %[2]s اسم غير معروف" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "تعذر الاستماع على منفذ TCP : %[1]s . خطأ غير متوقع %[2]v " -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "تعذر الاستماع على منفذ TCP : %s . العناوين قيد الاستخدام مسبقا" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "تعذر الرفع" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "الملف : " -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "تشفير البرنامج الثابت او توقيعه يحتاج تحديد الخصائص التالية" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "اول رسالة يجب ان تحوي على طلب التصحيح و ليس البيانات" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "العلامة %[1]s اجبارية عند استخدامها بالتوازي مع : %[2]s" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "الاعلام :" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" "التشغيل الاجباري لسكربت post-install (تستخدم اذا كان CLI لا يعمل بشكل " "متفاعل)" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "تخطي سكربت POST-install اجباريا (تستخدم اذا كان CLI يعمل بشكل متفاعل)" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "اسم اللوحة المؤهلة بالكامل FQBN مثال : arduino:avr:uno" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "سيرفر GDB '%s' غير مدعوم" @@ -1186,15 +1199,19 @@ msgstr "يولد سكربت الاكمال" msgid "Generates completion scripts for various shells" msgstr "يولد سكربتات اكمال من اجل مختلف ال shells" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "يتم توليد النماذج الاولية للتوابع :" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "علامات عامة :" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1202,31 +1219,31 @@ msgstr "" "المتغيرات العامة تستخدم %[1]s بايت (%[3]s%%) من الرام ، تبقى %[4]s بايت " "للمتغيرات المحلية. الحجم الاقصى %[2]s بايت." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "المتغيرات العامة تستخدم %[1]s بايت من الذاكرة المتغيرة." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "خصائص التعرُّف" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "" "اذا تم تحديده فان مجموعة الكود الثنائي الذي تم بناؤه سيتم تصديره الى مجلد " "المشروع" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." @@ -1234,167 +1251,166 @@ msgstr "" "اذا تم تحديده فانه سيعطيك كل النوى المثبتة و القابلة للتثبيت بالاضافة الى " "التي تم تثبيتها يدويا" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "يتضمن الاحصاء المكتبات المدمجة (بالمنصات و IDE)" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "يُضمِّن في الارشيف المجلد %s" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "تثبيت المكتبات داخل مجلد IDE-Builtin" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "تم التنصيب" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "تم تثبيت %s" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "جار تثبيت %s" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "جار تثبيت المكتبة %s" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "جار تثبيت المنصة %s" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "جار تثبيت الاداة %s" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" "يقوم بتثبيت نواة او اكثر و ادواتها التابعة لها (corresponding tool " "dependencies)" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "يقوم بتثبيت مكتبة او اكثر تم تحديدها مسبقا على النظام" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "خطأ داخلي في الكاش (Internal error in cache)" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "غير صالح '‍%[1]s' : الصفة : %[2]s" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "نداء خاطئ : المفروض عرض مساعدة لكنه غير متوفر الا في الوضع النصي" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "FBQN غير صالح" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "عنوان TCP غير صالح لان المنفذ غير موجود" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "URL غير صالح" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "URL الاضافي غير صالح : %v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" -msgstr "ارشيف غير صالح : الملف %{1}s غير موجود في الارشيف %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "تم اعطاء وسيط غير صالح %v" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "خصائص البناء غير صالحة" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "data size regexp غير صالح : %s" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "eeprom size regexp غير صالح %s" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "نسخة خاطئة " -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "عنصر عير صالح %s" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "مكتبة غير صالحة" -#: configuration/network.go:63 +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "" + +#: internal/cli/configuration/network.go:66 msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "network.proxy غير صالح '%[1]s': %[2]s" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "اعداد خاطئ لـ log-level-- : %s" - -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "صيغة اخراج خاطئة : %s" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "فهرس الحزمة غير صالح في %s" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "معطيات خاطئة %s: النسخة غير مسموح بها" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "قيمة pid غير صالحة : '%s'" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "ملف تعريف غير صالح" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "وصفة غير صالحة ضمن platform.txt" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "size regexp غير صالح : %s" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "مهلة غير صالحة" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "نسخة غير صالحة" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "قيمة vid غير صالحة : '%s'" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." @@ -1402,73 +1418,74 @@ msgstr "" "يقوم بانتاج قاعدة الترجمة بدون القيام بالترجمة فعليا . سيتم تجاوز كل اوامر " "البناء ما عدا pre* hooks." -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "LIBNAME" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "المكتبة" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "اسم المكتبة" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "الأخير" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "المكتبة %[1]s تم تحديدها بانها precompiled" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "تم تثبيت المكتبة %[1]s ولكن بنسخة اخرى : %[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "المكتبة %s مثبتة باخر اصدار مسبقا" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "المكتبة %s غير مثبتة" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "تعذر ايجاد المكتبة %s" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "المكتبة '%s' غير موجودة" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" "المكتبة لا تستطيع استخدام الملفين '%[1]s' 'و' '%[2]s' معا . تحقق مرة اخرى في" " '%[3]s'." -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "فشل تثبيت المكتبة" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "المكتبة مثبتة" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "رخصة" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "جار ربط كل شيء مع بعضه" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" @@ -1476,15 +1493,15 @@ msgstr "" "انشاء قائمة اللوحات التي منصة دعمها مثبتة. تستطيع البحث \n" "عن لوحة محددة اذا قمت بتحديد اسم اللوحة" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "اظهر كل اللوحات المعروفة و FBQN الخاص بها" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "اعرض كل اللوحات المتصلة" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." @@ -1492,7 +1509,7 @@ msgstr "" "اعرض كل خيارات اللوحات مفصولة عن بعضها بفواصل . او يمكن استخدامها عدة مرات " "من اجل عدة خيارات" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." @@ -1500,15 +1517,15 @@ msgstr "" "قائمة من خصائص البناء الخاصة مفصولة عن بعضها البعض بفواصل . او يمكن ان " "تستخدم عدة مرات من اجل عدة خصائص" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "انشاء قائمة بالمكتبات القابلة للتحديث" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "انشاء قائمة بالمنصات القابلة للتحديث" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "انشاء قائمة بجميع اللوحات المتصلة" @@ -1516,116 +1533,122 @@ msgstr "انشاء قائمة بجميع اللوحات المتصلة" msgid "Lists cores and libraries that can be upgraded" msgstr "يحصي النوى و المكتبات التي يمكن ترقيتها" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "جار تحميل ملف الفهرس : %v" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "الموقع" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "ذاكرة منخفضة متبقية، مشاكل عدم إستقرار قد تحدث." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "القائم بالصيانة : %s" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" "الحد الاقصى لزمن البحث عن المنفذ : على سبيل المثال 30 ثانية , 1 دقيقة " -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "الرسائل بهذه المرحلة و ما فوق سيتم تسجيلها . المراحل الصالحة هي : %s" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "'%[1]s' مفقود من المكتبة في %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "FBQN مفقود (Fully Qualified Board Name)" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "يوجد منفذ مفقود" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "عنوان المنفذ مفقود" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "يوجد بروتوكول منفذ مفقود" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "المبرمج مفقود" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr " size regexp مفقود" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "مسار السكتش مفقود" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "المراقب '%s' غير موجود" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "اعدادات منفذ المراقبة " -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "العثور على عدة مكتبات لـ\"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "الاسم" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "الاسم\"%s\"" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "منفذ التحميل الجديد: %[1]s(%[2]s)" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "لا يوجد اية لوحات" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "لم يتم تحديد منفذ افتراضي او FQBN " +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "لا توجد اية مكتبات" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "لا يوجد مكتبات مثبتة" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "لا توجد مكتبات تطابق بحثك" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1633,51 +1656,51 @@ msgstr "" "لا توجد مكتبات متطابقة مع بحثك\n" "هل تقصد...\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "لا يوجد تحديثات متاحة للمكتبات" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "لا يوجد مراقب متاح لبرتوكول المنفذ %s" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "لا يوجد مكتبات او منصات قديمة" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "لا توجد منصات مثبتة" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "ﻻ يوجد منصات تطابق بحثك" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "تعذر ايجاد منفذ رفع , باستخدام %s كرجوع احتياطي fallback" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "تعذر ايجاد حل تبعيات صالح" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "الذاكرة غير كافية؛ راجع %[1]s لنصائح حول استخدامها بكفائة" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "غير مستخدم : %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "نظام التشغيل:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "لوحة أردوينو الرسمية:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." @@ -1685,46 +1708,46 @@ msgstr "" "ازالة تفاصيل المكتبة في كل النسخ عدا اخر نسخة (يعطي اخراج json مضغوط بشكل " "اكبر)" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "فتح منفذ تواصل مع اللوحة" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "اختيار:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" "اختياري، يمكن أن يكون: %s. يُستخدم لإخبار ال gcc أي مستوي تحذير يَستخدِم (-W" " flag)" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "اختياري , يقوم بتنظيف مجلد البناء ولا يستخدم اي بناء مخزن مؤقتا" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "اختياري , يحسن مخرجات المترجم خلال تصحيح الاخطاء بدلا عن الاصدار" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "اختياري , يكبح كل خرج" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "اختياري، يُفعل الوضع المفصل." -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" "اختياري , مسار لملف json. الذي يحتوي على البدائل من الكود المصدري للمشروع" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." @@ -1732,52 +1755,52 @@ msgstr "" "تجاوز احد خصائص البناء باستخدام قيمة خاصة . يمكن استخدامه عدة مرات من اجل " "عدة خصائص" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "الكتابة فوق ملف التهيئة الموجود سابقا" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "يكتب فوق ارشيف موجود سابقا" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "يكتب فوق ملف ino. موجود مسبقا" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "المُغَلِّف" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "URL الخاص بالحزمة" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "حافظ الحزمة :" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "اسم الحزمة :" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "المساعدة الخاصة بالحزمة اونلاين" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "موقع الحزمة على الويب" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "المقطع : %s" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "المسار" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." @@ -1785,7 +1808,7 @@ msgstr "" "المسار الى مجموعة من المكتبات . يمكن استخدامه عدة مرات او من اجل عدة مدخلات " "حيث يتم فصلها باستخدام فاصلة" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." @@ -1793,11 +1816,11 @@ msgstr "" "المسار الى المجلد الاصلي لمكتبة واحدة . يمكن استخدامه عدة مرات او من اجل عدة" " مدخلات حيث يتم فصلها باستخدام فاصلة" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "مسار للملف حيث تُكتب السجلات" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." @@ -1805,19 +1828,20 @@ msgstr "" "المسار الذي يتم فيه حفظ الملفات التي تمت ترجمتها , اذا تم ازالته , سيتم " "انشاء مجلد داخل المسار المؤقت الافتراضي في نظام التشغيل" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "جار تفعيل 1200-bps touch reset على المنفذ التسلسلي %s" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "المنصة %s مثبتة سابقا" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "تم تثبيت المنصة: %s" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" @@ -1825,55 +1849,55 @@ msgstr "" "المنصة %sغير موجودة في اي فهرس معروف\n" "ربما تحتاج الى اضافة عنوان url من طرف 3 " -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "تم إلغاء تثبيت المنصة: %s" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "المنصة '%s' هي باخر اصدار مسبقا" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "المنصة '%s' غير موجودة" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "Platform ID" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "id المنصة غير صحيح" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "عنوان url للمنصة :" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "معمارية المنصة :" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "فئة المنصة :" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "المجموع الاختباري للمنصة :" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "اسم ملف المنصة:" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "اسم المنصة:" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "حجم المنصة (بالبايت) :" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" @@ -1881,7 +1905,7 @@ msgstr "" "الرجاء تحديد FQBN . لقد تم اكتشاف عدة لوحات على المنفذ %[1]s الذي يستخدم " "بروتوكول %[2]s" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" @@ -1889,34 +1913,39 @@ msgstr "" "الرجاء تحديد FQBN . تعذر التعرف على اللوحة على المنفذ %[1]s ذات البروتوكول " "%[2]s " -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "منفذ" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "المنفذ %v مغلق" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "خطا في مراقب المنفذ" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "تعذر ايجاد المكتبة التي تمت ترجمتها مسبقا في \"%[1]s\"" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "طباعة تفاصيل عن لوحة." -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "طباعة الكود قبل معالجته الى stdout بدلا من الترجمة " -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "طباعة السجلات على الخرج الافتراضي" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "طباعة اعدادات الضبط الحالية." @@ -1925,170 +1954,209 @@ msgstr "طباعة اعدادات الضبط الحالية." msgid "Prints the current configuration." msgstr "طباعة اعدادات الضبط الحالية." -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "تعذر ايجاد الملف الشخصي '%s'" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "تعذر ايجاد المبرمجة '%s'" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "اسم المبرمجة" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "المبرمجة التي سيتم استخدامها , مثال : atmel_ice" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "المبرمجات : " -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "الخاصية '%s' غير معرفة" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "البروتوكول" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "يشمل : %s" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "يزيل قيمة او اكثر من اعداد" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "تبديل %[1]s ب %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "استبدال المنصة %[1]s بـ %[2]s" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "الادوات المطلوبة :" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "التشغيل كناطر على المنفذ : %s" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "التشغيل ضمن الوضع الصامت , يظهر فقط شاشة الادخال و الاخراج " -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." -msgstr "يعمل كناطر من اجل تهيئة النوى و المكتبات و يتم مرة واحدة" +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "جار تشغيل البناء العادي من النواة" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "حفظ ادوات البناء ضمن هذا المجلد" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "البحث عن لوحة ضمن مدير اللوحات باستخدام كلمات مفتاحية" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "البحث عن لوحة ضمن مدير اللوحات" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "البحث عن نواة ضمن مدير اللوحات باستخدام كلمات مفتاحية" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "البحث عن نواة ضمن مدير اللوحات" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." -msgstr "البحث عن بيانات مكتبة او اكثر (غير حساس لحالة الاحرف)" - #: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "البحث عن بيانات مكتبة او اكثر" +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "" + +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "الجملة : %s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "استجابة السيرفر : %s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "تحديد قيمة للاعداد" -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -"تحديد القيم الافتراضية للمنفذ و FQBN . اذا لم يتم تحديد منفذ او FQBN , سيتم " -"اظهار المنفذ و FQBN الافتراضي الحالي" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "تحديد مكان حفظ ملف الضبط" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "اعداد" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "مفتاح الاعداد غير موجود" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "اظهار كل النوى المتوفرة" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "اظهار كل اعدادات منفذ التواصل" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "اظهار اللوحات التي تم تحديدها كمخفي في المنصة" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." @@ -2096,26 +2164,26 @@ msgstr "" "يظهر خصائص البناء . الخصائص متوسعة , استخدم \n" "\"show properties=unexpanded--\" اذا اردتها كما كانت معرفة بالظبط" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "اظهار تفاصيل اللوحة كاملة" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" "اظهار معلومات حول لوحة, خصوصا اذا كانت اللوحة تملك خيار لتكون محددة في FQBN " -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "اظهار اسم المكتبة فقط" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "عرض قائمة المبرمجات المتاحة" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "اظهار البيانات الوصفية لجلسة التصحيح بدلا من بدء المصحح" @@ -2124,11 +2192,11 @@ msgstr "اظهار البيانات الوصفية لجلسة التصحيح ب msgid "Show outdated cores and libraries after index update" msgstr "اظهار النوى و المكتبات القديم بعد تحديث الفهرس" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "عرض قائمة المكتبات المثبتة" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2141,15 +2209,15 @@ msgstr "" "اذا حدد المدخل LIBNAME القائمة فان القائمة ستكون محددة بما في هذا المدخل\n" "المكتبة : افتراضيا , المكتبات المدمجة بالمنصات و النوى لا يتم عرضها في القائمة , يمكن عرضها في القائمة من خلال اضافة علامة all--" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "يعرض قائمة من المنصات المثبتة" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "يظهر قائمة الامثلة الخاصة بالمكتبات" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." @@ -2157,40 +2225,40 @@ msgstr "" "يظهر قائمة الامثلة الخاصة بالمكتبات . يمكن اعطاء اسم كمدخل من اجل البحث ضمن " "مكتبة محددة" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "عرض رقم نسخة Arduino CLI المثبتة على نظامك" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "عرض رقم نسخة Arduino CLI" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "الحجم (بالبايت) :" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "لا يمكن وضع المشروع ضمن مسار البناء . الرجاء تحديد مسار بناء مختلف" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "تم انشاء المشروع في : %s" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "ملف التعريف للمشروع الذي سيتم استخدامه" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" "الشيفرة البرمجية كبير جدا; راجع %[1]s\n" "لنصائح لاختصارها." -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2198,76 +2266,88 @@ msgstr "" "المشروع يستخدم %[1]s بايت (%[3]s%%) من ذاكرة التخزين . الحجم الاقصى للبرنامج" " %[2]s بايت" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" "المشاريع ذوي اللاحقة pde. في حالة تقاعد , الرجاء تغيير لاحقة الملف الى ino." -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "تخطي ربط البرنامج النهائي القابل للتنفيذ" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "جار تخطي 1200bps touch reset لانه لم يتم تحديد منفذ تسلسلي" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "جار تخطي انشاء الارشيف لـ : %[1]s" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "جار تخطي ترجمة : %[1]s" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "جار تخطي الكشف عن توابع المكتبة %[1]s التي تمت ترجمتها مسبقا" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "جار تخطي ضبط المنصة" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "جار تخطي ضبط الاداة" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "جار تخطي : %[1]s" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "يمكن تحديث بعض الفهارس" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" "فشلت بعض الترقيات , الرجاء الاطلاع على الخرج من اجل المزيد من المعلومات" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "TOUCH : خطا اثناء اعادة الضبط : %s" - -#: internal/cli/daemon/daemon.go:58 +#: internal/cli/daemon/daemon.go:76 msgid "The TCP port the daemon will listen to" msgstr "منفذ TCP  الذي سيستمع اليه الناطر" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "" + +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "ملف التهيئة المخصص (اذا لم يتم تحديده سيتم استخدام الملف الافتراضي)" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "يجب استخدام العلامة debug-file-- مع debug--" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" @@ -2275,7 +2355,7 @@ msgstr "" "المفتاح '%[1]v' ليس قائمة من الاشياء , لا يمكن الاضافة اليه\n" "ربما يمكنك استخدام %[2]s" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" @@ -2283,11 +2363,11 @@ msgstr "" "المفتاح '%[1]v' ليس قائمة من الاشياء , لا يمكن ازالته \n" "ربما يمكنك استخدام %[2]s" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "يوجد عدة نسخ مثبتة من المكتبة %s" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." @@ -2295,7 +2375,7 @@ msgstr "" "اسم مفتاح التشفير المخصص الذي سيستخدم لتشفير ملف ثنائي اثناء الترجمة . " "يستخدم فقط من قبل المنصات التي تدعم ذلك" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." @@ -2303,11 +2383,11 @@ msgstr "" "اسم مفتاح التوقيع المخصص الذي سيستخدم لتوقيع ملف ثنائي اثناء الترجمة . " "يستخدم فقط من قبل المنصات التي تدعم ذلك" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "تنسيق الخرج الخاص بالسجلات , يمكن ان يكون : %s" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." @@ -2315,11 +2395,11 @@ msgstr "" "المسار الى المجلد للبحث عن مفتاح خاص لتوقيع و تشفير الملف الثنائي , يتم " "استخدامه من قبل المنصات التي تدعم ذلك فقط" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "المنصة لا تدعم '%[1]s' من اجل المكتبات الغير مترجمة" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2338,106 +2418,107 @@ msgstr "" "هذا الامر يظهر قائمة النوى و/أو المكتبات المثبتة التي يمكن ترقيتها. اذا لم " "يوجد اي شيء يحتاج للتحديث فالخرج سيكون فارغا" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "الاداة %s مثبتة مسبقا" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "تم الغاء تثبيت الاداة %s" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "مجموعة الادوات '%s' غير مدعومة" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "مسار مجموعة الادوات" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "بادئة مجموعة الادوات " -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "نوع مجموعة الادوات" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "جرب تشغيل %s" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "يفعل الوضع المطول" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "نوع" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "الأنواع: %s" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "URL:" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" "تعذر تخزين نواة البناء مؤقتا , الرجاء اخبار المحافظين %[1]s لمتابعة %[2]s" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "تعذر ايجاد مجلد Documents : %v" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "تعذر ايجاد مجلد Local App Data : %v" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "تعذر ايجاد user home dir : %v" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "تعذر فتح ملف من اجل انشاء سجلات : %s" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "تعذر تقطيع عنوان URL" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "إلغاء تثبيت %s" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "إلغاء تثبيت %s، الأداة لم تعد مطلوبة" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "يلغي تثبيت نواة او اكثر مع ادواتها و توابعها في حال لم يتم استخدامها " -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "يلغي تثبيت مكتبة او اكثر " -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "غير معروف" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "FQBN غير معروف" @@ -2449,23 +2530,23 @@ msgstr "يحدث فهرس المكتبات و النوى" msgid "Updates the index of cores and libraries to the latest versions." msgstr "يحجث فهرس المكتبات و النوى الى اخر نسخة" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "يحدث فهرس النوى الى اخر نسخة" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "يحدث فهرس النوى" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "يحدث فهرس المكتبات الى اخر نسخة" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "يحدث فهرس المكتبات" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "الترقية لا تقبل مدخلات مع نسخة" @@ -2477,54 +2558,54 @@ msgstr "يحدث المكتبات و النوى المثبتة الى اخر ن msgid "Upgrades installed cores and libraries." msgstr "يحدث المكتبات و النوى المثبتة" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "يحدث المكتبات المثبتة" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "يحدث منصة او كل المنصات الى اخر نسخة" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "يرفع مشاريع الاردوينو" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "يرفع مشاريع الاردوينو , و لا يقوم بترجمة المشروع قبل الرفع مطلقا !" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "عنوان منفذ الرفع : مثال , COM3 او /dev/ttyACM2" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "تم ايجاد منفذ الرفع في %s" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "بروتوكول منفذ الرفع , مثال : serial \"تسلسلي\"" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "يرفع الملف الثنائي بعد الترجمة" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "يرفع محمل الاقلاع على اللوحة باستخدام مبرمجة خارجية" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "يرفع محمل الاقلاع" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" "جار الرفع الى لوحة مخصصة باستخدام بروتوكول %s الذي يتطلب المعلومات التالية" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" @@ -2532,103 +2613,104 @@ msgstr "" "لا يمكن استخدام فواصل مع عناوين url , افصل عدة عناوين url باستخدام متغير بيئة \"env var\" ملحوقا بمسافة \n" "%s" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "الاستخدام" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "استخدم %s من اجل المزيد من المعلومات حول امر معين" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "المكتبة المستخدمة" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "المنصة المستخدمة" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "مستخدم : %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "يتم استخدام اللوحة '%[1]s' من منصة داخل المجلد %[2]s" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "يتم استخدام توابع المكتبة التي تم تخزينها مؤقتا من اجل الملف : %[1]s" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "يتم استخدام النواة '%[1]s' من منصة داخل الملف %[2]s " -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "استخدام المكتبة %[1]s الإصدار %[2]s في المجلد: %[3]s %[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "استخدام المكتبة %[1]s في المجلد: %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "يتم استخدام النواة التي تم ترجمتها مسبقا %[1]s" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "يتم استخدام المكتبة التي تم ترجمتها مسبقا %[1]s" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "استخدام الملف المترجم سابقا: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "النسخة" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "رقم النسخة" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "القيم" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "التاكد من الملف الثنائي الذي سيتم رفعه قبل الرفع" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "النسخة" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "النسخ : %s" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "تحذير , تعذرت تهيئة المنصة %s" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "تحذير , تعذر تهيئة الاداة %s" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "تحذير : المشروع سيترجم باستخدام مكتبة خاصة او اكثر . " -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2636,49 +2718,45 @@ msgstr "" "تحذير: المكتبة %[1]s تعمل على معمارية %[2]s وقد لا تتوافق مع لوحتك الحالية " "التي تعمل على معمارية %[3]s." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "يتم انتظار منفذ الرفع (upload port) ... " -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" "تحذير , اللوحة %[1]s لا تُعرّف الخاصة %[2]s . تم وضع التحديد الالي لـ %[3]s" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "الموقع : %s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "جار كتابة اعدادات الضبط الحالية الى ملف الضبط" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "تكتب الاعدادات الضبط الحالية في ملف التهيئة داخل مجلد البيانات" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "جار كتابة ملف التهيئة : %v" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" "لا يمكنك استخدام flag %s اثناء الترجمة باستخدام بروفايل (while compiling " "with a profile)" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "تلبيد \"hash\" الارشيف يختلف عن تلبيد \"hash\" الفهرس" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "الارشيف غير صالح : يوجد عدة ملفات داخل ملف zip في المرحلة العليا" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "الارشيف غير صالح : لا يوجد اي ملفات داخل ملف zip في المرحلة العليا" @@ -2686,375 +2764,346 @@ msgstr "الارشيف غير صالح : لا يوجد اي ملفات داخل msgid "archivePath" msgstr "مسار الارشيف" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "نمط arduino-preprocessor مفقود" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "الكشف التلقائي عن بقايا البناء : %s" - -#: internal/cli/feedback/stdio.go:35 +#: internal/cli/feedback/stdio.go:37 msgid "available only in text format" msgstr "متوفر في الوضع النصي حصرا" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "تعذر ايجاد الملف الثنائي (Binary file) داخل %s" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "اللوحة %s غير موجودة" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "اسم اللوحة" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "مجلد المكتبات المدمجة غير محدد" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "جار استدعاء %[1]s :%[2]w" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "تعذر العثور على اخر اصدار من %s" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "تعذر العثور على اخر اصدار من الاداة %s" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "تعذر ايحاد ملف المشروع الرئيسي داخل %s" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "تعذر ايجاد نمط للاكتشاف بواسطة id %s" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "تعذر استعادة standard error stream %s" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "تعذر استعادة standard error stream %s" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "المرشحون" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "تعذر تشغيل اداة الرفع : %s" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "جار التاكد من اكتمال ملف الارشيف" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "جار تنظيف مسار البناء (build path)" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "الامر" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "الامر '%[1]s' اخفق في : %[2]s" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "الامر اخفق : %s" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" "التواصل غير متزامن (communication out of sync) , توقعتُ وصول '%[1]s' لكن وصل" " ما يلي '%[2]s'" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "جار حوسبة التلبيد \"hash\" : %s" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "جار نسخ المكتبة الى مجلد الوجهة" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "تعذر ايجاد ادوات صالحة للبناء (valid build artifact)" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "تعذر الكتابة فوقه" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "تعذر ازالة المكتبة القديمة" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "تعذر تحديث ملف المشروع" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "جار انشاء ملف تخزن مؤقت للنواة : %s" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "جار انشاء installed.json داخل %[1]s : %[2]s" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "جار انشاء مسار مؤقت للاستخراج : %s" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "" "قسم البيانات تخطى الحجم المتوفر في اللوحة (data section exceeds available " "space in board)" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "التبعية (dependency) '%s' غير متوفرة" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "الوجهة موجودة مسبقا" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "تعذر التثبيت لان مجلد الوجهة %s موجود مسبقا " -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "مجلد الوجهة موجودة مسبقا" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "المجلد غير موجود : %s" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" -msgstr "عملية الكشف %[1]s لم تبدأ : %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "المستكشف %s غير موجود" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "تعذر تثبيت المستكشف %s" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "تعذر ايجاد اصدار المستكشف %s" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "تنزيل نسخة محددة (في هذه الحالة ستكون النسخة 1.6.9)" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "تنزيل اخر نسخة من Arduino SAMD core" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "تم تحميله" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "جار تنزيل الاداة %[1]s : %[2]s" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "معرف اللوحة خالي (empty board identifier)" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "خطا اثناء تحميل ملفات المشروع :" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "تعذر فتح %s" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "تعذر تقطيع القيمة : %v" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "تعذر تقطيع قيود النسخة" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "" "خطأ اثناء معالجة الرد من السيرفر (error processing response from server)" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "خطا اثناء القيام باستعلامات مع Arduino Cloud Api" -#: arduino/resources/install.go:67 +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" +msgstr "" + +#: internal/arduino/resources/install.go:68 msgid "extracting archive: %s" msgstr "جار استخراج الارشيف : %s" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" -msgstr "جار استخراج الارشيف : %w" - -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "تعذر حساب تلبيد \"hash\" ملف \"%s\"" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "تعذر تهيئة http client" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "حجم الارشيف الذي تم جلبه يختلف عن الحجم المحدد في الفهرس" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "ملفات الارشيف يجب ان توضع في مسار فرعي" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "جار البحث عن المسار المطلق (absolute path) لـ %s" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "الاعلام" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "الوصلة الرمزية symlink التالية %s" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "من اجل نسخة محددة" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "من اجل اخر نسخة" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "من اجل النسخة الحالية " -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" -msgstr "جار انتاج installation.id : %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" -msgstr "جار انتاج installation.secret : %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "جار جلب معلومات ملف الارشيف : %s" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "جار جلب معلومات الارشيف : %s" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "جار جلب مسار الارشيف : %s" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "جار الحصول على خصائص البناء للوحة %[1]s : %[2]s " -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "جار الحصول على توابع المستكشف من اجل المنصة %[1]s:%[2]s" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "جار الحصول على توابع الشاشة من اجل المنصة %[1]s:%[2]s" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "جار الحصول على المجلد الاصل لـ %[1]s : %[2]s" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "جار الحصول على توابع الاداة من اجل المنصة %[1]s:%[2]s" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "لم يتم تحديد مجلد التثبيت" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "جار تثبيت الاداة %[1]s : %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "جار تثبيت المنصة %[1]s : %[2]s" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "الطرفية \"terminal \" التفاعلية لا تدعم تنسيق الخرج التالي %s" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "يوجد directive \"عبارة برمجية بداخل الكود المصدري\" غير صالحة %s" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "رسالة 'add' غير صالحة : المنفذ غير موجود" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "رسالة 'remove' غير صالحة : المنفذ غير موجود" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "تنسيق المجموع الاختباري \"checksum\" غير صالح : %s" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "اعداد التهيئة غير صالح : %s" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "معمارية النواة الفارغة غير صالحة '%s'" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "معطى النواة الفارغة غير صالح" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "اسم النواة الفارغة غير صالح '%s'" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "مرجع النواة الفارغة غير صالح '%s'" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "نسخة النواة الفارغة غير صالحة : %s" @@ -3066,83 +3115,83 @@ msgstr "اسم المكتبة الفارغة غير صالح " msgid "invalid empty library version: %s" msgstr "نسخة المكتبة الفارغة غير صالحة : %s" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "تم ايجاد اعداد اعداد فارغ غير صالح" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "عنوان url لـ git غير صالح" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "علامة تلبيد \"hash\" غير صالحة '%[1]s' : %[2]s" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "عنصر غير صالح %s" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "يوجد directive للمكتبة \"عبارة برمجية بداخل الكود المصدري\" غير صالح %s" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "تخطيط المكتبة غير صالح : %s" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "موقع المكتبة غير صالح : %s" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "مكتبة غير صالحة : لا يوجد ترويسة في الملف" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "خيار غير صالح %s" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "خيار غير صالح %s" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "مسار غير صالح اثناء انشاء مجلد التهيئة %[1]s الخطا : %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" -msgstr "مسار غير صالح اثناء كتابة ملف inventory %[1]s الخطا : %[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "حجم ملف ارشيف المنصة غير صالح : %s" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "معرف المنصة غير صالح" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "عنوان url لفهرس المنصة غير صالح" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "مرجع الشاشة القابلة للوصل غير صالح : %s" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "قيمة الضبط الخاصة بالمنفذ غير صالحة : %s:%s" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "اعدادات الضبط للمنفذ غير صالحة" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "وصفة غير صالحة %[1]s : %[2]s" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " @@ -3152,150 +3201,161 @@ msgstr "" "\"_\" , المحارف المتبقية يمكنها ان تحوي \"-\" و \".\" بالاضافة الى ما سبق , " "المحرف الاخير لا يمكن ان يكون \".\"" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "قيمة خاطئة '%[1]s' من اجل الخيار %[2]s" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "مجلد النسخة خاطئ %s" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "نسخة خاطئة " -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "تعذر ايجاد المفتاح في الاعدادات" - -#: internal/cli/core/search.go:45 +#: internal/cli/core/search.go:39 msgid "keywords" msgstr "الكلمات المفتاحية" -#: arduino/libraries/librariesmanager/install.go:130 +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "مكتبات من أنشاء دانيل جراسيا" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:126 msgid "library %s already installed" msgstr "المكتبة %s مثبتة مسبقا" -#: arduino/libraries/librariesmanager/install.go:319 +#: internal/arduino/libraries/librariesmanager/install.go:315 msgid "library not valid" msgstr "المكتبة غير صالحة" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" -msgstr "مسار المكتبة غير موجود : %s" - -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "جار الاستماع للمنافذ التسلسلية" - -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 msgid "loading %[1]s: %[2]s" msgstr "جار تحميل %[1]s:%[2]s" -#: arduino/cores/packagemanager/loader.go:351 +#: internal/arduino/cores/packagemanager/loader.go:314 msgid "loading boards: %s" msgstr "جار تحميل اللوحات : %s" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" -msgstr "جار تحميل حزمة الادوات من %s" - -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "جار تحميل ملف json index %[1]s : %[2]s" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "جار تحميل المكتبة من %[1]s : %[2]s" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "جار تحميل خصائص المكتبة (library.properties) : %s" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "جار تحميل المنصة اصدار %s" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "جار تحميل platform.txt" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "جار تحميل المنصات المطلوبة %s" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "جار تحميل الادوات المطلوبة %s" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "جار تحميل اصدار الاداة (tool release) في %s" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "جار البحث عن boards.txt داخل %s" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "الملف الرئيسي مفقود من المشروع : %s" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "يوجد directive \"عبارة برمجية بداخل الكود المصدري\" مفقودة %s" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "المجموع الاختباري (checksum) لـ %s مفقود" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "تعذر العثور على الحزمة %[1]s التي التي تشير اليها اللوحة %[2]s " -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" "يوجد حزمة مفقودة من الفهرس %s , لا يمكن ضمان التحديثات المستقبلية بسبب ذلك" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" "تعذر العثور على المنصة %[1]s : %[2]s التي التي تشير اليها اللوحة %[3]s" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" "تعذر العثور على المنصة اصدار (platform release) %[1]s : %[2]s التي التي تشير" " اليها اللوحة %[3]s" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" -msgstr "" +msgstr "هناك توقيع غير موجود" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "تعذر ايجاد اصدار المراقب : %s" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "جار نقل الارشيف الذي تم استخراجه الى مجلد الوجهة : %s" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "تم ايجاد اكثر من build artifacts : '%[1]s' و '%[2]s'" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "تم العثور على اكثر من ملف مشروع رئيسي main sketch file (%[1]v,%[2]v)" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" @@ -3303,408 +3363,385 @@ msgstr "" "لا يوجد نسخة متوافقة من الاداة %[1]s من اجل نظام التشغيل الحالي , جرب " "التواصل مع %[2]s" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "لم يتم تحديد اي برنامج قابل للتنفيذ (executable)" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "لا يوجد نسخ محددة" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "لم يتم تحديد مجلد/ملف المشروع او البناء " -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "لا يوجد ملف او مجلد مشابه" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "لا يوجد مجلد اصلي في الارشيف , تم ايجاد %[1]s و %[2]s" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "لم يتم تحديد اي منفذ للرفع" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "تعذر ايجاد اي مشروع صالح في %[2]s : %[1]sمفقود" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "لا يوجد نسخة متوفرة لنظام التشغيل الحالي , جرب التواصل مع %s" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "لا يعمل في الطرفية \"terminal\"" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "جار فتح ملف الارشيف : %s" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "جار فتح boards.txt" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "جار فتح منفذ عند 1200bps" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "جار فتح ملف التوقيع : %s" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "جار فتح الملف الهدف : %s" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "الحزمة %sغير موجودة " -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "الحزمة '%s' غير موجودة" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "جار تقطيع حزمة فهرس IDE" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "جار تقطيع FQBN : %s" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "جار تقطيع ملف library_index.json : %s" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "المسار المحدد ليس مجلدا لمنصة : %s" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "تعذر ايجاد المنصة %[1]s في الحزمة %[2]s" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" -msgstr "لا يوجد اصدارات متاحة للمنصة %s" - -#: arduino/cores/packagemanager/package_manager.go:298 +#: internal/arduino/cores/packagemanager/package_manager.go:341 msgid "platform %s is not installed" msgstr "المنصة %s غير مثبتة" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "المنصة غير متاحة لنظام التشغيل الخاص بك" + +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "المنصة غير مثبتة" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "الرجاء استخدام build-property-- بدلا من ذلك" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "تم اضافة الكشف عن الاشياء القابلة للوصل مسبقا : %s" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "المنفذ" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "تعذر ايجاد المنفذ : %[1]s %[2]s" -#: arduino/monitor/monitor.go:236 +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "بروجرامر" + +#: internal/arduino/monitor/monitor.go:235 msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "نسخة البروتوكول غير مدعومة : تم طلب %[1]d , فكان الرد %[2]d" -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" -msgstr "نسخة البروتوكول غير مدعومة : تم طلب 1 , فكان الرد %d" - -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" -msgstr "يتم قراءة %[1]s : %[2]s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "جار قراءة المجلد %[1]s : %[2]s" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" -msgstr "جار قراءة المجلد %[1]s الذي يحوي %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "جار قراءة المجلد %s" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" -msgstr "جار قراءة المجلد %w الذي يحوي %s" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" +msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "جار قراءة الملف %[1]s : %[2]s" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" -msgstr "جار قراءة الملفات %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "جاري قرأت الملفات" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "جار قراءة ترويسة المكتبة : %s" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" -msgstr "جار قراءة المجلد الاصلي للمكتبة %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" -msgstr "جار قراءة ترويسة المكتبة %w " +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "جار قراءة library_index.json : %s" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "جار قراءة المجلد الاصلي للحزمة : %s" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "جاري قرأت ملفات المذكرة" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "تعذر ايجاد الوصفة '%s'" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "تعذر ايجاد الاصدار %[1]s للاداة %[2]s" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "الاصدار لا يمكن ان يكون صفر \"nil\"" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "جار ازالة ملف الارشيف المتخرب %s" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "جار ازالة مجلد المكتبة %s" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "جار ازالة ملفات المنصة %s" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "تعذر ايجاد النسخة المطلوبة %[1]s من اجل المنصة %[2]s" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "جار ازالة المفاتيح العامة للاردوينو : %s" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "جار فحص الامثلة %s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "جاري فحص امثلة المذكرة" -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" -msgstr "جار البحث عن builtin_tools_versions.txt في %[1]s : %[2]s" - -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "جار البحث عن المجلد الاصلي لـ %s" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "جار ضبط DTR الى OFF" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "لا يمكن ان يكون اسم المشروع فارغا" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "اسم المشروع لا يمكن ان يكون اسما محجوزا \"%[1]s\"" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "اسم المشروع طويل جدا (%[1]d محرف) , الطول الاقصى المسموح به هو %[2]d" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "مسار المشروع غير صالح" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "مسار المشروع" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "المصدر \"source \" ليس مجلدا" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "جار بدء الاكتشاف %s" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "جار فحص المجموع الاختباري للارشيف %s" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "جار فحص حجم الارشيف : %s" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "جار فحص ما اذا كان الارشيف تم تخزينه مؤقتا %s" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "جار فحص تكامل ملف الارشيف المحلي : %s" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "القسم النصي تخطى المساحة المتوفرة في اللوحة" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "ربما قاعدة بيانات الترجمة ناقصة او غير دقيقة" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "هذه المنصة لا تملك اي اصدارات" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "استجاب السيرفر بالحالة %s" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "نفذ الوقت اثناء انتظار الرسالة " -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "نفذ الوقت اثناء انتظار الرسالة من %s" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "الاداة %s لا تتم ادارتها من قبل مدير الحزم" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "الاداة %s غير موجودة" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "الاداة '%[1]s' غير موجودة ضمن الحزمة '%[2]s'" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "الاداة غير مثبتة" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "اصدار الاداة غير موجود : %s" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "نسخة الاداة %s غير موجودة" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" "يجب ان يكون هناك اصدارين من نفس المكتبة %[1]s , هذا %[2]s و هذا %[3]s" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "تعذر حوسبة المسار النسبي للمشروع من اجل العنصر" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "تعذر انشاء مجلد لحفظ المشروع" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "تعذر انشاء مجلد يحوي العنصر" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr " %v : unable to marshal config to YAML" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "تعذر قراءة محتويات العنصر الهدف" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "تعذر قراءة محتويات العنصر الاصل" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "تعذر الكتابة الى المجلد الوجهة" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "حزمة غير معروفة %s" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "منصة غير معروفة %s:%s" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "لاحقة المشروع غير معروفة '%s'" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "خوارزمية تليبد \"hash\" غير مدعومة %s" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "جار تحديث arduino:samd لاخر اصدار" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "تحديث كل شيء الى اخر اصدار" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "خطا اثناء الرفع %s" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "مجلد المستخدم غير محدد" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "ادخال المستخدم لا يدعم تنسيق الخرج '%s'" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "ادخال المستخدم غير مدعوم في الوضع الغير تفاعلي" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "الاصدار %s غير مدعوم من اجل نظام التشغيل الحالي" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "الاصدار %s غير موجود" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "تنسيق خاطئ في استجابة السيرفر" diff --git a/internal/i18n/data/be.po b/internal/i18n/data/be.po new file mode 100644 index 00000000000..094c595c1cf --- /dev/null +++ b/internal/i18n/data/be.po @@ -0,0 +1,3612 @@ +# +msgid "" +msgstr "" +"Language-Team: Belarusian (https://app.transifex.com/arduino-1/teams/108174/be/)\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#: version/version.go:56 +msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:462 +msgid "%[1]s folder is no longer supported! See %[2]s for more information" +msgstr "" + +#: internal/arduino/builder/build_options_manager.go:140 +msgid "%[1]s invalid, rebuilding all" +msgstr "" + +#: internal/cli/lib/check_deps.go:124 +msgid "%[1]s is required but %[2]s is currently installed." +msgstr "" + +#: internal/arduino/builder/builder.go:488 +msgid "%[1]s pattern is missing" +msgstr "" + +#: internal/arduino/resources/download.go:51 +msgid "%s already downloaded" +msgstr "" + +#: commands/service_upload.go:754 +msgid "%s and %s cannot be used together" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 +msgid "%s installed" +msgstr "" + +#: internal/cli/lib/check_deps.go:121 +msgid "%s is already installed." +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 +msgid "%s is not a directory" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 +msgid "%s is not managed by package manager" +msgstr "" + +#: internal/cli/lib/check_deps.go:118 +msgid "%s must be installed." +msgstr "" + +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 +msgid "%s pattern is missing" +msgstr "" + +#: commands/cmderrors/cmderrors.go:818 +msgid "'%s' has an invalid signature" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:443 +msgid "" +"'build.core' and 'build.variant' refer to different platforms: %[1]s and " +"%[2]s" +msgstr "" + +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 +msgid "(hidden)" +msgstr "" + +#: internal/arduino/builder/libraries.go:302 +msgid "(legacy)" +msgstr "" + +#: internal/cli/lib/install.go:82 +msgid "" +"--git-url and --zip-path are disabled by default, for more information see: " +"%v" +msgstr "" + +#: internal/cli/lib/install.go:84 +msgid "" +"--git-url and --zip-path flags allow installing untrusted files, use it at " +"your own risk." +msgstr "" + +#: internal/cli/lib/install.go:87 +msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" +msgstr "" + +#: commands/service_sketch_new.go:66 +msgid ".ino file already exists" +msgstr "" + +#: internal/cli/updater/updater.go:30 +msgid "A new release of Arduino CLI is available:" +msgstr "" + +#: commands/cmderrors/cmderrors.go:299 +msgid "A programmer is required to upload" +msgstr "" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "ARCH" +msgstr "" + +#: internal/cli/generatedocs/generatedocs.go:80 +msgid "ARDUINO COMMAND LINE MANUAL" +msgstr "" + +#: internal/cli/usage.go:28 +msgid "Additional help topics:" +msgstr "" + +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 +msgid "Adds one or more values to a setting." +msgstr "" + +#: internal/cli/usage.go:23 +msgid "Aliases:" +msgstr "" + +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 +msgid "All the cores are already at the latest version" +msgstr "" + +#: commands/service_library_install.go:135 +msgid "Already installed %s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:91 +msgid "Alternatives for %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 +msgid "An error occurred adding prototypes" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:213 +msgid "An error occurred detecting libraries" +msgstr "" + +#: internal/cli/daemon/daemon.go:85 +msgid "Append debug logging to the specified file" +msgstr "" + +#: internal/cli/lib/search.go:208 +msgid "Architecture: %s" +msgstr "" + +#: commands/service_sketch_archive.go:69 +msgid "Archive already exists" +msgstr "" + +#: internal/arduino/builder/core.go:163 +msgid "Archiving built core (caching) in: %[1]s" +msgstr "" + +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 +msgid "Arduino CLI sketch commands." +msgstr "" + +#: internal/cli/cli.go:88 +msgid "Arduino CLI." +msgstr "" + +#: internal/cli/cli.go:89 +msgid "Arduino Command Line Interface (arduino-cli)." +msgstr "" + +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 +msgid "Arduino board commands." +msgstr "" + +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 +msgid "Arduino cache commands." +msgstr "" + +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 +msgid "Arduino commands about libraries." +msgstr "" + +#: internal/cli/config/config.go:35 +msgid "Arduino configuration commands." +msgstr "" + +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 +msgid "Arduino core operations." +msgstr "" + +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 +msgid "Arguments error: %v" +msgstr "" + +#: internal/cli/board/attach.go:36 +msgid "Attaches a sketch to a board." +msgstr "" + +#: internal/cli/lib/search.go:199 +msgid "Author: %s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:79 +msgid "" +"Automatic library install can't be performed in this case, please manually " +"remove all duplicates and retry." +msgstr "" + +#: commands/service_library_uninstall.go:87 +msgid "" +"Automatic library uninstall can't be performed in this case, please manually" +" remove them." +msgstr "" + +#: internal/cli/lib/list.go:138 +msgid "Available" +msgstr "" + +#: internal/cli/usage.go:25 +msgid "Available Commands:" +msgstr "" + +#: internal/cli/upload/upload.go:74 +msgid "Binary file to upload." +msgstr "" + +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "Board Name" +msgstr "" + +#: internal/cli/board/details.go:139 +msgid "Board name:" +msgstr "" + +#: internal/cli/board/details.go:141 +msgid "Board version:" +msgstr "" + +#: internal/arduino/builder/sketch.go:243 +msgid "Bootloader file specified but missing: %[1]s" +msgstr "" + +#: internal/cli/compile/compile.go:98 +msgid "Builds of 'core.a' are saved into this path to be cached and reused." +msgstr "" + +#: internal/arduino/resources/index.go:65 +msgid "Can't create data directory %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:511 +msgid "Can't create sketch" +msgstr "" + +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 +msgid "Can't download library" +msgstr "" + +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 +msgid "Can't find dependencies for platform %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:537 +msgid "Can't open sketch" +msgstr "" + +#: commands/cmderrors/cmderrors.go:524 +msgid "Can't update sketch" +msgstr "" + +#: internal/cli/arguments/arguments.go:34 +msgid "Can't use the following flags together: %s" +msgstr "" + +#: internal/cli/daemon/daemon.go:112 +msgid "Can't write debug log: %s" +msgstr "" + +#: commands/service_compile.go:190 commands/service_compile.go:199 +msgid "Cannot create build cache directory" +msgstr "" + +#: commands/service_compile.go:177 +msgid "Cannot create build directory" +msgstr "" + +#: internal/cli/config/init.go:100 +msgid "Cannot create config file directory: %v" +msgstr "" + +#: internal/cli/config/init.go:124 +msgid "Cannot create config file: %v" +msgstr "" + +#: commands/cmderrors/cmderrors.go:781 +msgid "Cannot create temp dir" +msgstr "" + +#: commands/cmderrors/cmderrors.go:799 +msgid "Cannot create temp file" +msgstr "" + +#: internal/cli/config/delete.go:55 +msgid "Cannot delete the key %[1]s: %[2]v" +msgstr "" + +#: commands/service_debug_run.go:69 +msgid "Cannot execute debug tool" +msgstr "" + +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 +msgid "Cannot find absolute path: %v" +msgstr "" + +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 +msgid "Cannot install platform" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 +msgid "Cannot install tool %s" +msgstr "" + +#: commands/service_upload.go:532 +msgid "Cannot perform port reset: %s" +msgstr "" + +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 +msgid "Cannot upgrade platform" +msgstr "" + +#: internal/cli/lib/search.go:207 +msgid "Category: %s" +msgstr "" + +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 +msgid "Check dependencies status for the specified library." +msgstr "" + +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 +msgid "Checksum differs from checksum in package.json" +msgstr "" + +#: internal/cli/board/details.go:190 +msgid "Checksum:" +msgstr "" + +#: internal/cli/cache/cache.go:32 +msgid "Clean caches." +msgstr "" + +#: internal/cli/cli.go:181 +msgid "Comma-separated list of additional URLs for the Boards Manager." +msgstr "" + +#: internal/cli/board/list.go:56 +msgid "" +"Command keeps running and prints list of connected boards whenever there is " +"a change." +msgstr "" + +#: commands/service_debug_config.go:176 commands/service_upload.go:440 +msgid "Compiled sketch not found in %s" +msgstr "" + +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 +msgid "Compiles Arduino sketches." +msgstr "" + +#: internal/arduino/builder/builder.go:422 +msgid "Compiling core..." +msgstr "" + +#: internal/arduino/builder/builder.go:401 +msgid "Compiling libraries..." +msgstr "" + +#: internal/arduino/builder/libraries.go:133 +msgid "Compiling library \"%[1]s\"" +msgstr "" + +#: internal/arduino/builder/builder.go:385 +msgid "Compiling sketch..." +msgstr "" + +#: internal/cli/config/init.go:94 +msgid "" +"Config file already exists, use --overwrite to discard the existing one." +msgstr "" + +#: internal/cli/config/init.go:179 +msgid "Config file written to: %s" +msgstr "" + +#: internal/cli/debug/debug.go:238 +msgid "Configuration options for %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:74 +msgid "" +"Configure communication port settings. The format is " +"<ID>=<value>[,<ID>=<value>]..." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 +msgid "Configuring platform." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 +msgid "Configuring tool." +msgstr "" + +#: internal/cli/board/list.go:196 +msgid "Connected" +msgstr "" + +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "" + +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +msgid "Core" +msgstr "" + +#: internal/cli/configuration/network.go:103 +msgid "Could not connect via HTTP" +msgstr "" + +#: commands/instances.go:487 +msgid "Could not create index directory" +msgstr "" + +#: internal/arduino/builder/core.go:41 +msgid "Couldn't deeply cache core build: %[1]s" +msgstr "" + +#: internal/arduino/builder/sizer.go:154 +msgid "Couldn't determine program size" +msgstr "" + +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 +msgid "Couldn't get current working directory: %v" +msgstr "" + +#: internal/cli/sketch/new.go:37 internal/cli/sketch/new.go:38 +msgid "Create a new Sketch" +msgstr "" + +#: internal/cli/compile/compile.go:95 +msgid "Create and print a profile configuration from the build." +msgstr "" + +#: internal/cli/sketch/archive.go:37 internal/cli/sketch/archive.go:38 +msgid "Creates a zip file containing all sketch files." +msgstr "" + +#: internal/cli/config/init.go:46 +msgid "" +"Creates or updates the configuration file in the data directory or custom " +"directory with the current configuration settings." +msgstr "" + +#: internal/cli/compile/compile.go:327 +msgid "" +"Currently, Build Profiles only support libraries available through Arduino " +"Library Manager." +msgstr "" + +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" +msgstr "" + +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 +msgid "DEPRECATED" +msgstr "" + +#: internal/cli/daemon/daemon.go:188 +msgid "Daemon is now listening on %s:%s" +msgstr "" + +#: internal/cli/debug/debug.go:52 +msgid "Debug Arduino sketches." +msgstr "" + +#: internal/cli/debug/debug.go:53 +msgid "" +"Debug Arduino sketches. (this command opens an interactive gdb session)" +msgstr "" + +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 +msgid "Debug interpreter e.g.: %s" +msgstr "" + +#: commands/service_debug_config.go:206 +msgid "Debugging not supported for board %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:297 +msgid "Default" +msgstr "" + +#: internal/cli/board/attach.go:115 +msgid "Default FQBN set to" +msgstr "" + +#: internal/cli/board/attach.go:114 +msgid "Default port set to" +msgstr "" + +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 +msgid "Delete Boards/Library Manager download cache." +msgstr "" + +#: internal/cli/cache/clean.go:33 +msgid "" +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." +msgstr "" + +#: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 +msgid "Deletes a settings key and all its sub keys." +msgstr "" + +#: internal/cli/lib/search.go:215 +msgid "Dependencies: %s" +msgstr "" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 +msgid "Description" +msgstr "" + +#: internal/arduino/builder/builder.go:313 +msgid "Detecting libraries used..." +msgstr "" + +#: internal/cli/board/list.go:46 +msgid "" +"Detects and displays a list of boards connected to the current computer." +msgstr "" + +#: internal/cli/debug/debug.go:67 +msgid "Directory containing binaries for debug." +msgstr "" + +#: internal/cli/upload/upload.go:73 +msgid "Directory containing binaries to upload." +msgstr "" + +#: internal/cli/generatedocs/generatedocs.go:45 +msgid "" +"Directory where to save generated files. Default is './docs', the directory " +"must exist." +msgstr "" + +#: internal/cli/completion/completion.go:44 +msgid "Disable completion description for shells that support it" +msgstr "" + +#: internal/cli/board/list.go:197 +msgid "Disconnected" +msgstr "" + +#: internal/cli/daemon/daemon.go:88 +msgid "Display only the provided gRPC calls" +msgstr "" + +#: internal/cli/lib/install.go:62 +msgid "Do not install dependencies." +msgstr "" + +#: internal/cli/lib/install.go:63 +msgid "Do not overwrite already installed libraries." +msgstr "" + +#: internal/cli/core/install.go:56 +msgid "Do not overwrite already installed platforms." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 +msgid "Do not perform the actual upload, just log out actions" +msgstr "" + +#: internal/cli/daemon/daemon.go:79 +msgid "Do not terminate daemon process if the parent process dies" +msgstr "" + +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:88 +msgid "Downloading %s" +msgstr "" + +#: internal/arduino/resources/index.go:137 +msgid "Downloading index signature: %s" +msgstr "" + +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 +msgid "Downloading index: %s" +msgstr "" + +#: commands/instances.go:374 +msgid "Downloading library %s" +msgstr "" + +#: commands/instances.go:53 +msgid "Downloading missing tool %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 +msgid "Downloading packages" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:101 +msgid "Downloading platform %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:177 +msgid "Downloading tool %s" +msgstr "" + +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 +msgid "Downloads one or more cores and corresponding tool dependencies." +msgstr "" + +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 +msgid "Downloads one or more libraries without installing them." +msgstr "" + +#: internal/cli/daemon/daemon.go:82 +msgid "Enable debug logging of gRPC calls" +msgstr "" + +#: internal/cli/lib/install.go:65 +msgid "Enter a path to zip file" +msgstr "" + +#: internal/cli/lib/install.go:64 +msgid "Enter git url for libraries hosted on repositories" +msgstr "" + +#: commands/service_sketch_archive.go:105 +msgid "Error adding file to sketch archive" +msgstr "" + +#: internal/arduino/builder/core.go:169 +msgid "Error archiving built core (caching) in %[1]s: %[2]s" +msgstr "" + +#: internal/cli/sketch/archive.go:85 +msgid "Error archiving: %v" +msgstr "" + +#: commands/service_sketch_archive.go:93 +msgid "Error calculating relative file path" +msgstr "" + +#: internal/cli/cache/clean.go:48 +msgid "Error cleaning caches: %v" +msgstr "" + +#: internal/cli/compile/compile.go:216 +msgid "Error converting path to absolute: %v" +msgstr "" + +#: commands/service_compile.go:403 +msgid "Error copying output file %s" +msgstr "" + +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + +#: internal/cli/instance/instance.go:43 +msgid "Error creating instance: %v" +msgstr "" + +#: commands/service_compile.go:387 +msgid "Error creating output dir" +msgstr "" + +#: commands/service_sketch_archive.go:81 +msgid "Error creating sketch archive" +msgstr "" + +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 +msgid "Error creating sketch: %v" +msgstr "" + +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 +msgid "Error detecting boards: %v" +msgstr "" + +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 +msgid "Error downloading %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 +msgid "Error downloading %s" +msgstr "" + +#: commands/instances.go:661 internal/arduino/resources/index.go:83 +msgid "Error downloading index '%s'" +msgstr "" + +#: internal/arduino/resources/index.go:138 +msgid "Error downloading index signature '%s'" +msgstr "" + +#: commands/instances.go:384 commands/instances.go:390 +msgid "Error downloading library %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 +msgid "Error downloading platform %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 +msgid "Error downloading tool %s" +msgstr "" + +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 +msgid "Error during Debug: %v" +msgstr "" + +#: internal/cli/arguments/port.go:141 +msgid "Error during FQBN detection: %v" +msgstr "" + +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 +msgid "Error during JSON encoding of the output: %v" +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 +msgid "Error during Upload: %v" +msgstr "" + +#: internal/cli/compile/compile.go:375 +msgid "Error during build: %v" +msgstr "" + +#: internal/cli/core/install.go:81 +msgid "Error during install: %v" +msgstr "" + +#: internal/cli/core/uninstall.go:75 +msgid "Error during uninstall: %v" +msgstr "" + +#: internal/cli/core/upgrade.go:136 +msgid "Error during upgrade: %v" +msgstr "" + +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 +msgid "Error extracting %s" +msgstr "" + +#: commands/service_upload.go:437 +msgid "Error finding build artifacts" +msgstr "" + +#: internal/cli/debug/debug.go:130 +msgid "Error getting Debug info: %v" +msgstr "" + +#: commands/service_sketch_archive.go:57 +msgid "Error getting absolute path of sketch archive" +msgstr "" + +#: internal/cli/board/details.go:74 +msgid "Error getting board details: %v" +msgstr "" + +#: internal/arduino/builder/internal/compilation/database.go:82 +msgid "Error getting current directory for compilation database: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 +msgid "Error getting information for library %s" +msgstr "" + +#: internal/cli/lib/examples.go:75 +msgid "Error getting libraries info: %v" +msgstr "" + +#: internal/cli/arguments/fqbn.go:92 +msgid "Error getting port metadata: %v" +msgstr "" + +#: internal/cli/monitor/monitor.go:153 +msgid "Error getting port settings details: %s" +msgstr "" + +#: internal/cli/upload/upload.go:166 +msgid "Error getting user input" +msgstr "" + +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 +msgid "Error initializing instance: %v" +msgstr "" + +#: internal/cli/lib/install.go:148 +msgid "Error installing %s: %v" +msgstr "" + +#: internal/cli/lib/install.go:122 +msgid "Error installing Git Library: %v" +msgstr "" + +#: internal/cli/lib/install.go:100 +msgid "Error installing Zip Library: %v" +msgstr "" + +#: commands/instances.go:400 +msgid "Error installing library %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 +msgid "Error installing platform %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 +msgid "Error installing tool %s" +msgstr "" + +#: internal/cli/board/listall.go:66 +msgid "Error listing boards: %v" +msgstr "" + +#: internal/cli/lib/list.go:91 +msgid "Error listing libraries: %v" +msgstr "" + +#: internal/cli/core/list.go:69 +msgid "Error listing platforms: %v" +msgstr "" + +#: commands/cmderrors/cmderrors.go:424 +msgid "Error loading hardware platform" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 +msgid "Error loading index %s" +msgstr "" + +#: internal/arduino/resources/index.go:99 +msgid "Error opening %s" +msgstr "" + +#: internal/cli/daemon/daemon.go:106 +msgid "Error opening debug logging file: %s" +msgstr "" + +#: internal/cli/compile/compile.go:189 +msgid "Error opening source code overrides data file: %v" +msgstr "" + +#: internal/cli/compile/compile.go:202 +msgid "Error parsing --show-properties flag: %v" +msgstr "" + +#: commands/service_compile.go:396 +msgid "Error reading build directory" +msgstr "" + +#: commands/service_sketch_archive.go:75 +msgid "Error reading sketch files" +msgstr "" + +#: internal/cli/lib/check_deps.go:72 +msgid "Error resolving dependencies for %[1]s: %[2]s" +msgstr "" + +#: internal/cli/core/upgrade.go:68 +msgid "Error retrieving core list: %v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 +msgid "Error rolling-back changes: %s" +msgstr "" + +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 +msgid "Error saving downloaded index" +msgstr "" + +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 +msgid "Error saving downloaded index signature" +msgstr "" + +#: internal/cli/board/search.go:63 +msgid "Error searching boards: %v" +msgstr "" + +#: internal/cli/lib/search.go:126 +msgid "Error searching for Libraries: %v" +msgstr "" + +#: internal/cli/core/search.go:82 +msgid "Error searching for platforms: %v" +msgstr "" + +#: internal/arduino/builder/internal/compilation/database.go:67 +msgid "Error serializing compilation database: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 +msgid "Error starting discovery: %v" +msgstr "" + +#: internal/cli/lib/uninstall.go:67 +msgid "Error uninstalling %[1]s: %[2]v" +msgstr "" + +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 +msgid "Error updating library index: %v" +msgstr "" + +#: internal/cli/lib/upgrade.go:75 +msgid "Error upgrading libraries" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 +msgid "Error upgrading platform: %s" +msgstr "" + +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 +msgid "Error verifying signature" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:369 +msgid "Error while detecting libraries included by %[1]s" +msgstr "" + +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 +msgid "Error while determining sketch size: %s" +msgstr "" + +#: internal/arduino/builder/internal/compilation/database.go:70 +msgid "Error writing compilation database: %s" +msgstr "" + +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + +#: internal/cli/completion/completion.go:56 +msgid "Error: command description is not supported by %v" +msgstr "" + +#: internal/cli/compile/compile.go:195 +msgid "Error: invalid source code overrides data file: %v" +msgstr "" + +#: internal/cli/board/list.go:102 +msgid "Event" +msgstr "" + +#: internal/cli/lib/examples.go:123 +msgid "Examples for library %s" +msgstr "" + +#: internal/cli/usage.go:24 +msgid "Examples:" +msgstr "" + +#: internal/cli/debug/debug.go:221 +msgid "Executable to debug" +msgstr "" + +#: commands/service_debug_config.go:179 commands/service_upload.go:443 +msgid "Expected compiled sketch in directory %s, but is a file instead" +msgstr "" + +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "FQBN" +msgstr "" + +#: internal/cli/board/details.go:140 +msgid "FQBN:" +msgstr "" + +#: commands/service_upload.go:566 +msgid "Failed chip erase" +msgstr "" + +#: commands/service_upload.go:573 +msgid "Failed programming" +msgstr "" + +#: commands/service_upload.go:569 +msgid "Failed to burn bootloader" +msgstr "" + +#: commands/instances.go:90 +msgid "Failed to create data directory" +msgstr "" + +#: commands/instances.go:79 +msgid "Failed to create downloads directory" +msgstr "" + +#: internal/cli/daemon/daemon.go:143 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." +msgstr "" + +#: internal/cli/daemon/daemon.go:138 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." +msgstr "" + +#: internal/cli/daemon/daemon.go:150 +msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" +msgstr "" + +#: internal/cli/daemon/daemon.go:148 +msgid "Failed to listen on TCP port: %s. Address already in use." +msgstr "" + +#: commands/service_upload.go:577 +msgid "Failed uploading" +msgstr "" + +#: internal/cli/board/details.go:188 +msgid "File:" +msgstr "" + +#: commands/service_compile.go:160 +msgid "" +"Firmware encryption/signing requires all the following properties to be " +"defined: %s" +msgstr "" + +#: commands/service_debug.go:40 +msgid "First message must contain debug request, not data" +msgstr "" + +#: internal/cli/arguments/arguments.go:45 +msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" +msgstr "" + +#: internal/cli/usage.go:26 +msgid "Flags:" +msgstr "" + +#: internal/cli/arguments/pre_post_script.go:38 +msgid "" +"Force run of post-install scripts (if the CLI is not running interactively)." +msgstr "" + +#: internal/cli/arguments/pre_post_script.go:40 +msgid "" +"Force run of pre-uninstall scripts (if the CLI is not running " +"interactively)." +msgstr "" + +#: internal/cli/arguments/pre_post_script.go:39 +msgid "" +"Force skip of post-install scripts (if the CLI is running interactively)." +msgstr "" + +#: internal/cli/arguments/pre_post_script.go:41 +msgid "" +"Force skip of pre-uninstall scripts (if the CLI is running interactively)." +msgstr "" + +#: commands/cmderrors/cmderrors.go:839 +msgid "Found %d platforms matching \"%s\": %s" +msgstr "" + +#: internal/cli/arguments/fqbn.go:39 +msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" +msgstr "" + +#: commands/service_debug_run.go:188 +msgid "GDB server '%s' is not supported" +msgstr "" + +#: internal/cli/generatedocs/generatedocs.go:38 +#: internal/cli/generatedocs/generatedocs.go:39 +msgid "Generates bash completion and command manpages." +msgstr "" + +#: internal/cli/completion/completion.go:38 +msgid "Generates completion scripts" +msgstr "" + +#: internal/cli/completion/completion.go:39 +msgid "Generates completion scripts for various shells" +msgstr "" + +#: internal/arduino/builder/builder.go:333 +msgid "Generating function prototypes..." +msgstr "" + +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 +msgid "Global Flags:" +msgstr "" + +#: internal/arduino/builder/sizer.go:164 +msgid "" +"Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " +"bytes for local variables. Maximum is %[2]s bytes." +msgstr "" + +#: internal/arduino/builder/sizer.go:170 +msgid "Global variables use %[1]s bytes of dynamic memory." +msgstr "" + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 +msgid "ID" +msgstr "" + +#: internal/cli/board/details.go:111 +msgid "Id" +msgstr "" + +#: internal/cli/board/details.go:154 +msgid "Identification properties:" +msgstr "" + +#: internal/cli/compile/compile.go:128 +msgid "If set built binaries will be exported to the sketch folder." +msgstr "" + +#: internal/cli/core/list.go:46 +msgid "" +"If set return all installable and installed cores, including manually " +"installed." +msgstr "" + +#: internal/cli/lib/list.go:55 +msgid "Include built-in libraries (from platforms and IDE) in listing." +msgstr "" + +#: internal/cli/sketch/archive.go:51 +msgid "Includes %s directory in the archive." +msgstr "" + +#: internal/cli/lib/install.go:66 +msgid "Install libraries in the IDE-Builtin directory" +msgstr "" + +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 +msgid "Installed" +msgstr "" + +#: commands/service_library_install.go:200 +msgid "Installed %s" +msgstr "" + +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 +msgid "Installing %s" +msgstr "" + +#: commands/instances.go:398 +msgid "Installing library %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 +msgid "Installing platform %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:185 +msgid "Installing tool %s" +msgstr "" + +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 +msgid "Installs one or more cores and corresponding tool dependencies." +msgstr "" + +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 +msgid "Installs one or more specified libraries into the system." +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:394 +msgid "Internal error in cache" +msgstr "" + +#: commands/cmderrors/cmderrors.go:377 +msgid "Invalid '%[1]s' property: %[2]s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:60 +msgid "Invalid FQBN" +msgstr "" + +#: internal/cli/daemon/daemon.go:161 +msgid "Invalid TCP address: port is missing" +msgstr "" + +#: commands/cmderrors/cmderrors.go:78 +msgid "Invalid URL" +msgstr "" + +#: commands/instances.go:186 +msgid "Invalid additional URL: %v" +msgstr "" + +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "" + +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 +msgid "Invalid argument passed: %v" +msgstr "" + +#: commands/service_compile.go:270 +msgid "Invalid build properties" +msgstr "" + +#: internal/arduino/builder/sizer.go:250 +msgid "Invalid data size regexp: %s" +msgstr "" + +#: internal/arduino/builder/sizer.go:256 +msgid "Invalid eeprom size regexp: %s" +msgstr "" + +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 +msgid "Invalid instance" +msgstr "" + +#: internal/cli/core/upgrade.go:114 +msgid "Invalid item %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:96 +msgid "Invalid library" +msgstr "" + +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "" + +#: internal/cli/configuration/network.go:66 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:219 +msgid "Invalid output format: %s" +msgstr "" + +#: commands/instances.go:581 +msgid "Invalid package index in %s" +msgstr "" + +#: internal/cli/core/uninstall.go:63 +msgid "Invalid parameter %s: version not allowed" +msgstr "" + +#: commands/service_board_list.go:81 +msgid "Invalid pid value: '%s'" +msgstr "" + +#: commands/cmderrors/cmderrors.go:220 +msgid "Invalid profile" +msgstr "" + +#: commands/service_monitor.go:269 +msgid "Invalid recipe in platform.txt" +msgstr "" + +#: internal/arduino/builder/sizer.go:240 +msgid "Invalid size regexp: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:114 +msgid "Invalid version" +msgstr "" + +#: commands/service_board_list.go:78 +msgid "Invalid vid value: '%s'" +msgstr "" + +#: internal/cli/compile/compile.go:125 +msgid "" +"Just produce the compilation database, without actually compiling. All build" +" commands are skipped except pre* hooks." +msgstr "" + +#: internal/cli/lib/list.go:39 +msgid "LIBNAME" +msgstr "" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "LIBRARY" +msgstr "" + +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 +msgid "LIBRARY_NAME" +msgstr "" + +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 +msgid "Latest" +msgstr "" + +#: internal/arduino/builder/libraries.go:91 +msgid "Library %[1]s has been declared precompiled:" +msgstr "" + +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 +msgid "" +"Library %[1]s is already installed, but with a different version: %[2]s" +msgstr "" + +#: commands/service_library_upgrade.go:137 +msgid "Library %s is already at the latest version" +msgstr "" + +#: commands/service_library_uninstall.go:63 +msgid "Library %s is not installed" +msgstr "" + +#: commands/instances.go:377 +msgid "Library %s not found" +msgstr "" + +#: commands/cmderrors/cmderrors.go:445 +msgid "Library '%s' not found" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:471 +msgid "" +"Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." +msgstr "" + +#: commands/cmderrors/cmderrors.go:574 +msgid "Library install failed" +msgstr "" + +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 +msgid "Library installed" +msgstr "" + +#: internal/cli/lib/search.go:205 +msgid "License: %s" +msgstr "" + +#: internal/arduino/builder/builder.go:438 +msgid "Linking everything together..." +msgstr "" + +#: internal/cli/board/listall.go:40 +msgid "" +"List all boards that have the support platform installed. You can search\n" +"for a specific board if you specify the board name" +msgstr "" + +#: internal/cli/board/listall.go:39 +msgid "List all known boards and their corresponding FQBN." +msgstr "" + +#: internal/cli/board/list.go:45 +msgid "List connected boards." +msgstr "" + +#: internal/cli/arguments/fqbn.go:44 +msgid "" +"List of board options separated by commas. Or can be used multiple times for" +" multiple options." +msgstr "" + +#: internal/cli/compile/compile.go:103 +msgid "" +"List of custom build properties separated by commas. Or can be used multiple" +" times for multiple properties." +msgstr "" + +#: internal/cli/lib/list.go:57 +msgid "List updatable libraries." +msgstr "" + +#: internal/cli/core/list.go:45 +msgid "List updatable platforms." +msgstr "" + +#: internal/cli/board/board.go:32 +msgid "Lists all connected boards." +msgstr "" + +#: internal/cli/outdated/outdated.go:41 +msgid "Lists cores and libraries that can be upgraded" +msgstr "" + +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 +msgid "Loading index file: %v" +msgstr "" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 +msgid "Location" +msgstr "" + +#: internal/arduino/builder/sizer.go:205 +msgid "Low memory available, stability problems may occur." +msgstr "" + +#: internal/cli/lib/search.go:200 +msgid "Maintainer: %s" +msgstr "" + +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 +msgid "Max time to wait for port discovery, e.g.: 30s, 1m" +msgstr "" + +#: internal/cli/cli.go:170 +msgid "" +"Messages with this level and above will be logged. Valid levels are: %s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:466 +msgid "Missing '%[1]s' from library in %[2]s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:169 +msgid "Missing FQBN (Fully Qualified Board Name)" +msgstr "" + +#: commands/cmderrors/cmderrors.go:260 +msgid "Missing port" +msgstr "" + +#: commands/cmderrors/cmderrors.go:236 +msgid "Missing port address" +msgstr "" + +#: commands/cmderrors/cmderrors.go:248 +msgid "Missing port protocol" +msgstr "" + +#: commands/cmderrors/cmderrors.go:286 +msgid "Missing programmer" +msgstr "" + +#: internal/cli/upload/upload.go:159 +msgid "Missing required upload field: %s" +msgstr "" + +#: internal/arduino/builder/sizer.go:244 +msgid "Missing size regexp" +msgstr "" + +#: commands/cmderrors/cmderrors.go:497 +msgid "Missing sketch path" +msgstr "" + +#: commands/cmderrors/cmderrors.go:358 +msgid "Monitor '%s' not found" +msgstr "" + +#: internal/cli/monitor/monitor.go:200 +msgid "Monitor port settings:" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:156 +msgid "Multiple libraries were found for \"%[1]s\"" +msgstr "" + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 +msgid "Name" +msgstr "" + +#: internal/cli/lib/search.go:179 +msgid "Name: \"%s\"" +msgstr "" + +#: internal/cli/upload/upload.go:234 +msgid "New upload port: %[1]s (%[2]s)" +msgstr "" + +#: internal/cli/board/list.go:130 +msgid "No boards found." +msgstr "" + +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "" + +#: internal/cli/lib/examples.go:108 +msgid "No libraries found." +msgstr "" + +#: internal/cli/lib/list.go:130 +msgid "No libraries installed." +msgstr "" + +#: internal/cli/lib/search.go:168 +msgid "No libraries matching your search." +msgstr "" + +#: internal/cli/lib/search.go:174 +msgid "" +"No libraries matching your search.\n" +"Did you mean...\n" +msgstr "" + +#: internal/cli/lib/list.go:128 +msgid "No libraries update is available." +msgstr "" + +#: commands/cmderrors/cmderrors.go:274 +msgid "No monitor available for the port protocol %s" +msgstr "" + +#: internal/cli/outdated/outdated.go:95 +msgid "No outdated platforms or libraries found." +msgstr "" + +#: internal/cli/core/list.go:114 +msgid "No platforms installed." +msgstr "" + +#: internal/cli/core/search.go:113 +msgid "No platforms matching your search." +msgstr "" + +#: commands/service_upload.go:522 +msgid "No upload port found, using %s as fallback" +msgstr "" + +#: commands/cmderrors/cmderrors.go:464 +msgid "No valid dependencies solution found" +msgstr "" + +#: internal/arduino/builder/sizer.go:195 +msgid "Not enough memory; see %[1]s for tips on reducing your footprint." +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:159 +msgid "Not used: %[1]s" +msgstr "" + +#: internal/cli/board/details.go:187 +msgid "OS:" +msgstr "" + +#: internal/cli/board/details.go:145 +msgid "Official Arduino board:" +msgstr "" + +#: internal/cli/lib/search.go:98 +msgid "" +"Omit library details far all versions except the latest (produce a more " +"compact JSON output)." +msgstr "" + +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 +msgid "Open a communication port with a board." +msgstr "" + +#: internal/cli/board/details.go:200 +msgid "Option:" +msgstr "" + +#: internal/cli/compile/compile.go:113 +msgid "" +"Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." +msgstr "" + +#: internal/cli/compile/compile.go:126 +msgid "Optional, cleanup the build folder and do not use any cached build." +msgstr "" + +#: internal/cli/compile/compile.go:123 +msgid "" +"Optional, optimize compile output for debugging, rather than for release." +msgstr "" + +#: internal/cli/compile/compile.go:115 +msgid "Optional, suppresses almost every output." +msgstr "" + +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 +msgid "Optional, turns on verbose mode." +msgstr "" + +#: internal/cli/compile/compile.go:129 +msgid "" +"Optional. Path to a .json file that contains a set of replacements of the " +"sketch source code." +msgstr "" + +#: internal/cli/compile/compile.go:105 +msgid "" +"Override a build property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 +msgid "Overwrite existing config file." +msgstr "" + +#: internal/cli/sketch/archive.go:52 +msgid "Overwrites an already existing archive" +msgstr "" + +#: internal/cli/sketch/new.go:46 +msgid "Overwrites an existing .ino sketch." +msgstr "" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "PACKAGER" +msgstr "" + +#: internal/cli/board/details.go:165 +msgid "Package URL:" +msgstr "" + +#: internal/cli/board/details.go:164 +msgid "Package maintainer:" +msgstr "" + +#: internal/cli/board/details.go:163 +msgid "Package name:" +msgstr "" + +#: internal/cli/board/details.go:167 +msgid "Package online help:" +msgstr "" + +#: internal/cli/board/details.go:166 +msgid "Package website:" +msgstr "" + +#: internal/cli/lib/search.go:202 +msgid "Paragraph: %s" +msgstr "" + +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 +msgid "Path" +msgstr "" + +#: internal/cli/compile/compile.go:122 +msgid "" +"Path to a collection of libraries. Can be used multiple times or entries can" +" be comma separated." +msgstr "" + +#: internal/cli/compile/compile.go:120 +msgid "" +"Path to a single library’s root folder. Can be used multiple times or " +"entries can be comma separated." +msgstr "" + +#: internal/cli/cli.go:172 +msgid "Path to the file where logs will be written." +msgstr "" + +#: internal/cli/compile/compile.go:101 +msgid "" +"Path where to save compiled files. If omitted, a directory will be created " +"in the default temporary path of your OS." +msgstr "" + +#: commands/service_upload.go:503 +msgid "Performing 1200-bps touch reset on serial port %s" +msgstr "" + +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 +msgid "Platform %s already installed" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 +msgid "Platform %s installed" +msgstr "" + +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 +msgid "" +"Platform %s is not found in any known index\n" +"Maybe you need to add a 3rd party URL?" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 +msgid "Platform %s uninstalled" +msgstr "" + +#: commands/cmderrors/cmderrors.go:482 +msgid "Platform '%s' is already at the latest version" +msgstr "" + +#: commands/cmderrors/cmderrors.go:406 +msgid "Platform '%s' not found" +msgstr "" + +#: internal/cli/board/search.go:85 +msgid "Platform ID" +msgstr "" + +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 +msgid "Platform ID is not correct" +msgstr "" + +#: internal/cli/board/details.go:173 +msgid "Platform URL:" +msgstr "" + +#: internal/cli/board/details.go:172 +msgid "Platform architecture:" +msgstr "" + +#: internal/cli/board/details.go:171 +msgid "Platform category:" +msgstr "" + +#: internal/cli/board/details.go:178 +msgid "Platform checksum:" +msgstr "" + +#: internal/cli/board/details.go:174 +msgid "Platform file name:" +msgstr "" + +#: internal/cli/board/details.go:170 +msgid "Platform name:" +msgstr "" + +#: internal/cli/board/details.go:176 +msgid "Platform size (bytes):" +msgstr "" + +#: commands/cmderrors/cmderrors.go:153 +msgid "" +"Please specify an FQBN. Multiple possible boards detected on port %[1]s with" +" protocol %[2]s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:133 +msgid "" +"Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" +" identified" +msgstr "" + +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +msgid "Port" +msgstr "" + +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 +msgid "Port closed: %v" +msgstr "" + +#: commands/cmderrors/cmderrors.go:668 +msgid "Port monitor error" +msgstr "" + +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 +msgid "Precompiled library in \"%[1]s\" not found" +msgstr "" + +#: internal/cli/board/details.go:42 +msgid "Print details about a board." +msgstr "" + +#: internal/cli/compile/compile.go:97 +msgid "Print preprocessed code to stdout instead of compiling." +msgstr "" + +#: internal/cli/cli.go:166 internal/cli/cli.go:168 +msgid "Print the logs on the standard output." +msgstr "" + +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + +#: internal/cli/config/dump.go:31 +msgid "Prints the current configuration" +msgstr "" + +#: internal/cli/config/dump.go:32 +msgid "Prints the current configuration." +msgstr "" + +#: commands/cmderrors/cmderrors.go:202 +msgid "Profile '%s' not found" +msgstr "" + +#: commands/cmderrors/cmderrors.go:339 +msgid "Programmer '%s' not found" +msgstr "" + +#: internal/cli/board/details.go:111 +msgid "Programmer name" +msgstr "" + +#: internal/cli/arguments/programmer.go:35 +msgid "Programmer to use, e.g: atmel_ice" +msgstr "" + +#: internal/cli/board/details.go:216 +msgid "Programmers:" +msgstr "" + +#: commands/cmderrors/cmderrors.go:391 +msgid "Property '%s' is undefined" +msgstr "" + +#: internal/cli/board/list.go:140 +msgid "Protocol" +msgstr "" + +#: internal/cli/lib/search.go:212 +msgid "Provides includes: %s" +msgstr "" + +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 +msgid "Removes one or more values from a setting." +msgstr "" + +#: commands/service_library_install.go:187 +msgid "Replacing %[1]s with %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 +msgid "Replacing platform %[1]s with %[2]s" +msgstr "" + +#: internal/cli/board/details.go:184 +msgid "Required tool:" +msgstr "" + +#: internal/cli/monitor/monitor.go:75 +msgid "Run in silent mode, show only monitor input and output." +msgstr "" + +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "" + +#: internal/arduino/builder/core.go:42 +msgid "Running normal build of the core..." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 +msgid "Running pre_uninstall script." +msgstr "" + +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:226 +msgid "SVD file path" +msgstr "" + +#: internal/cli/compile/compile.go:99 +msgid "Save build artifacts in this directory." +msgstr "" + +#: internal/cli/board/search.go:39 +msgid "Search for a board in the Boards Manager using the specified keywords." +msgstr "" + +#: internal/cli/board/search.go:38 +msgid "Search for a board in the Boards Manager." +msgstr "" + +#: internal/cli/core/search.go:41 +msgid "Search for a core in Boards Manager using the specified keywords." +msgstr "" + +#: internal/cli/core/search.go:40 +msgid "Search for a core in Boards Manager." +msgstr "" + +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "" + +#: internal/cli/lib/search.go:201 +msgid "Sentence: %s" +msgstr "" + +#: internal/cli/debug/debug.go:234 +msgid "Server path" +msgstr "" + +#: internal/arduino/httpclient/httpclient.go:61 +msgid "Server responded with: %s" +msgstr "" + +#: internal/cli/debug/debug.go:233 +msgid "Server type" +msgstr "" + +#: internal/cli/upload/upload.go:80 +msgid "Set a value for a field required to upload." +msgstr "" + +#: internal/cli/monitor/monitor.go:72 +msgid "Set terminal in raw mode (unbuffered)." +msgstr "" + +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 +msgid "Sets a setting value." +msgstr "" + +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 +msgid "Sets where to save the configuration file." +msgstr "" + +#: internal/cli/monitor/monitor.go:297 +msgid "Setting" +msgstr "" + +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" + +#: internal/cli/core/search.go:48 +msgid "Show all available core versions." +msgstr "" + +#: internal/cli/monitor/monitor.go:73 +msgid "Show all the settings of the communication port." +msgstr "" + +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 +msgid "Show also boards marked as 'hidden' in the platform" +msgstr "" + +#: internal/cli/arguments/show_properties.go:60 +msgid "" +"Show build properties. The properties are expanded, use \"--show-" +"properties=unexpanded\" if you want them exactly as they are defined." +msgstr "" + +#: internal/cli/board/details.go:52 +msgid "Show full board details" +msgstr "" + +#: internal/cli/board/details.go:43 +msgid "" +"Show information about a board, in particular if the board has options to be" +" specified in the FQBN." +msgstr "" + +#: internal/cli/lib/search.go:97 +msgid "Show library names only." +msgstr "" + +#: internal/cli/board/details.go:53 +msgid "Show list of available programmers" +msgstr "" + +#: internal/cli/debug/debug.go:68 +msgid "" +"Show metadata about the debug session instead of starting the debugger." +msgstr "" + +#: internal/cli/update/update.go:45 +msgid "Show outdated cores and libraries after index update" +msgstr "" + +#: internal/cli/lib/list.go:40 +msgid "Shows a list of installed libraries." +msgstr "" + +#: internal/cli/lib/list.go:41 +msgid "" +"Shows a list of installed libraries.\n" +"\n" +"If the LIBNAME parameter is specified the listing is limited to that specific\n" +"library. By default the libraries provided as built-in by platforms/core are\n" +"not listed, they can be listed by adding the --all flag." +msgstr "" + +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 +msgid "Shows the list of installed platforms." +msgstr "" + +#: internal/cli/lib/examples.go:44 +msgid "Shows the list of the examples for libraries." +msgstr "" + +#: internal/cli/lib/examples.go:45 +msgid "" +"Shows the list of the examples for libraries. A name may be given as " +"argument to search a specific library." +msgstr "" + +#: internal/cli/version/version.go:37 +msgid "" +"Shows the version number of Arduino CLI which is installed on your system." +msgstr "" + +#: internal/cli/version/version.go:36 +msgid "Shows version number of Arduino CLI." +msgstr "" + +#: internal/cli/board/details.go:189 +msgid "Size (bytes):" +msgstr "" + +#: commands/service_compile.go:274 +msgid "" +"Sketch cannot be located in build path. Please specify a different build " +"path" +msgstr "" + +#: internal/cli/sketch/new.go:98 +msgid "Sketch created in: %s" +msgstr "" + +#: internal/cli/arguments/profiles.go:33 +msgid "Sketch profile to use" +msgstr "" + +#: internal/arduino/builder/sizer.go:190 +msgid "Sketch too big; see %[1]s for tips on reducing it." +msgstr "" + +#: internal/arduino/builder/sizer.go:158 +msgid "" +"Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" +" bytes." +msgstr "" + +#: internal/cli/feedback/warn_deprecated.go:39 +msgid "" +"Sketches with .pde extension are deprecated, please rename the following " +"files to .ino:" +msgstr "" + +#: internal/arduino/builder/linker.go:30 +msgid "Skip linking of final executable." +msgstr "" + +#: commands/service_upload.go:496 +msgid "Skipping 1200-bps touch reset: no serial port selected!" +msgstr "" + +#: internal/arduino/builder/archive_compiled_files.go:27 +msgid "Skipping archive creation of: %[1]s" +msgstr "" + +#: internal/arduino/builder/compilation.go:183 +msgid "Skipping compile of: %[1]s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:414 +msgid "Skipping dependencies detection for precompiled library %[1]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 +msgid "Skipping platform configuration." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 +msgid "Skipping pre_uninstall script." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 +msgid "Skipping tool configuration." +msgstr "" + +#: internal/arduino/builder/recipe.go:48 +msgid "Skipping: %[1]s" +msgstr "" + +#: commands/instances.go:634 +msgid "Some indexes could not be updated." +msgstr "" + +#: internal/cli/core/upgrade.go:141 +msgid "Some upgrades failed, please check the output for details." +msgstr "" + +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" +msgstr "" + +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "" + +#: internal/cli/cli.go:186 +msgid "The custom config file (if not specified the default will be used)." +msgstr "" + +#: internal/cli/daemon/daemon.go:98 +msgid "The flag --debug-file must be used with --debug." +msgstr "" + +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't add to it.\n" +"Maybe use '%[2]s'?" +msgstr "" + +#: internal/cli/config/remove.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't remove from it.\n" +"Maybe use '%[2]s'?" +msgstr "" + +#: commands/cmderrors/cmderrors.go:858 +msgid "The library %s has multiple installations:" +msgstr "" + +#: internal/cli/compile/compile.go:111 +msgid "" +"The name of the custom encryption key to use to encrypt a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" + +#: internal/cli/compile/compile.go:109 +msgid "" +"The name of the custom signing key to use to sign a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" + +#: internal/cli/cli.go:174 +msgid "The output format for the logs, can be: %s" +msgstr "" + +#: internal/cli/compile/compile.go:107 +msgid "" +"The path of the dir to search for the custom keys to sign and encrypt a " +"binary. Used only by the platforms that support it." +msgstr "" + +#: internal/arduino/builder/libraries.go:151 +msgid "The platform does not support '%[1]s' for precompiled libraries." +msgstr "" + +#: internal/cli/lib/upgrade.go:36 +msgid "" +"This command upgrades an installed library to the latest available version. " +"Multiple libraries can be passed separated by a space. If no arguments are " +"provided, the command will upgrade all the installed libraries where an " +"update is available." +msgstr "" + +#: internal/cli/outdated/outdated.go:42 +msgid "" +"This commands shows a list of installed cores and/or libraries\n" +"that can be upgraded. If nothing needs to be updated the output is empty." +msgstr "" + +#: internal/cli/monitor/monitor.go:76 +msgid "Timestamp each incoming line." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 +msgid "Tool %s already installed" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 +msgid "Tool %s uninstalled" +msgstr "" + +#: commands/service_debug_run.go:144 +msgid "Toolchain '%s' is not supported" +msgstr "" + +#: internal/cli/debug/debug.go:223 +msgid "Toolchain path" +msgstr "" + +#: internal/cli/debug/debug.go:224 +msgid "Toolchain prefix" +msgstr "" + +#: internal/cli/debug/debug.go:222 +msgid "Toolchain type" +msgstr "" + +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 +msgid "Try running %s" +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +msgid "Turns on verbose mode." +msgstr "" + +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +msgid "Type" +msgstr "" + +#: internal/cli/lib/search.go:209 +msgid "Types: %s" +msgstr "" + +#: internal/cli/board/details.go:191 +msgid "URL:" +msgstr "" + +#: internal/arduino/builder/core.go:165 +msgid "" +"Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" +msgstr "" + +#: internal/cli/configuration/configuration.go:86 +msgid "Unable to get Documents Folder: %v" +msgstr "" + +#: internal/cli/configuration/configuration.go:61 +msgid "Unable to get Local App Data Folder: %v" +msgstr "" + +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 +msgid "Unable to get user home dir: %v" +msgstr "" + +#: internal/cli/cli.go:249 +msgid "Unable to open file for logging: %s" +msgstr "" + +#: commands/instances.go:563 +msgid "Unable to parse URL" +msgstr "" + +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 +msgid "Uninstalling %s" +msgstr "" + +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 +msgid "Uninstalling %s, tool is no more required" +msgstr "" + +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 +msgid "" +"Uninstalls one or more cores and corresponding tool dependencies if no " +"longer used." +msgstr "" + +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 +msgid "Uninstalls one or more libraries." +msgstr "" + +#: internal/cli/board/list.go:172 +msgid "Unknown" +msgstr "" + +#: commands/cmderrors/cmderrors.go:183 +msgid "Unknown FQBN" +msgstr "" + +#: internal/cli/update/update.go:37 +msgid "Updates the index of cores and libraries" +msgstr "" + +#: internal/cli/update/update.go:38 +msgid "Updates the index of cores and libraries to the latest versions." +msgstr "" + +#: internal/cli/core/update_index.go:36 +msgid "Updates the index of cores to the latest version." +msgstr "" + +#: internal/cli/core/update_index.go:35 +msgid "Updates the index of cores." +msgstr "" + +#: internal/cli/lib/update_index.go:36 +msgid "Updates the libraries index to the latest version." +msgstr "" + +#: internal/cli/lib/update_index.go:35 +msgid "Updates the libraries index." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 +msgid "Upgrade doesn't accept parameters with version" +msgstr "" + +#: internal/cli/upgrade/upgrade.go:38 +msgid "Upgrades installed cores and libraries to latest version." +msgstr "" + +#: internal/cli/upgrade/upgrade.go:37 +msgid "Upgrades installed cores and libraries." +msgstr "" + +#: internal/cli/lib/upgrade.go:35 +msgid "Upgrades installed libraries." +msgstr "" + +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 +msgid "Upgrades one or all installed platforms to the latest version." +msgstr "" + +#: internal/cli/upload/upload.go:56 +msgid "Upload Arduino sketches." +msgstr "" + +#: internal/cli/upload/upload.go:57 +msgid "" +"Upload Arduino sketches. This does NOT compile the sketch prior to upload." +msgstr "" + +#: internal/cli/arguments/port.go:44 +msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" +msgstr "" + +#: commands/service_upload.go:520 +msgid "Upload port found on %s" +msgstr "" + +#: internal/cli/arguments/port.go:48 +msgid "Upload port protocol, e.g: serial" +msgstr "" + +#: internal/cli/compile/compile.go:116 +msgid "Upload the binary after the compilation." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:49 +msgid "Upload the bootloader on the board using an external programmer." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:48 +msgid "Upload the bootloader." +msgstr "" + +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 +msgid "" +"Uploading to specified board using %s protocol requires the following info:" +msgstr "" + +#: internal/cli/config/init.go:160 +msgid "" +"Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" +"%s" +msgstr "" + +#: internal/cli/usage.go:22 +msgid "Usage:" +msgstr "" + +#: internal/cli/usage.go:29 +msgid "Use %s for more information about a command." +msgstr "" + +#: internal/cli/compile/compile.go:448 +msgid "Used library" +msgstr "" + +#: internal/cli/compile/compile.go:463 +msgid "Used platform" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:157 +msgid "Used: %[1]s" +msgstr "" + +#: commands/service_compile.go:349 +msgid "Using board '%[1]s' from platform in folder: %[2]s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:351 +msgid "Using cached library dependencies for file: %[1]s" +msgstr "" + +#: commands/service_compile.go:350 +msgid "Using core '%[1]s' from platform in folder: %[2]s" +msgstr "" + +#: internal/arduino/builder/libraries.go:312 +msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" +msgstr "" + +#: internal/arduino/builder/libraries.go:306 +msgid "Using library %[1]s in folder: %[2]s %[3]s" +msgstr "" + +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 +msgid "Using precompiled core: %[1]s" +msgstr "" + +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 +msgid "Using precompiled library in %[1]s" +msgstr "" + +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 +msgid "Using previously compiled file: %[1]s" +msgstr "" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +msgid "VERSION" +msgstr "" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "VERSION_NUMBER" +msgstr "" + +#: internal/cli/monitor/monitor.go:297 +msgid "Values" +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 +msgid "Verify uploaded binary after the upload." +msgstr "" + +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 +msgid "Version" +msgstr "" + +#: internal/cli/lib/search.go:210 +msgid "Versions: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 +msgid "WARNING cannot configure platform: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 +msgid "WARNING cannot configure tool: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 +msgid "WARNING cannot run pre_uninstall script: %s" +msgstr "" + +#: internal/cli/compile/compile.go:326 +msgid "WARNING: The sketch is compiled using one or more custom libraries." +msgstr "" + +#: internal/arduino/builder/libraries.go:283 +msgid "" +"WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " +"incompatible with your current board which runs on %[3]s architecture(s)." +msgstr "" + +#: commands/service_upload.go:509 +msgid "Waiting for upload port..." +msgstr "" + +#: commands/service_compile.go:355 +msgid "" +"Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" +msgstr "" + +#: internal/cli/lib/search.go:203 +msgid "Website: %s" +msgstr "" + +#: internal/cli/config/init.go:45 +msgid "Writes current configuration to a configuration file." +msgstr "" + +#: internal/cli/config/init.go:48 +msgid "" +"Writes current configuration to the configuration file in the data " +"directory." +msgstr "" + +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 +msgid "You cannot use the %s flag while compiling with a profile." +msgstr "" + +#: internal/arduino/resources/checksums.go:78 +msgid "archive hash differs from hash in index" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:188 +msgid "archive is not valid: multiple files found in zip file top level" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:191 +msgid "archive is not valid: no files found in zip file top level" +msgstr "" + +#: internal/cli/sketch/archive.go:36 +msgid "archivePath" +msgstr "" + +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 +msgid "arduino-preprocessor pattern is missing" +msgstr "" + +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" +msgstr "" + +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:764 +msgid "binary file not found in %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:348 +msgid "board %s not found" +msgstr "" + +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 +msgid "boardname" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 +msgid "built-in libraries directory not set" +msgstr "" + +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 +msgid "can't find latest release of %s" +msgstr "" + +#: commands/instances.go:275 +msgid "can't find latest release of tool %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:712 +msgid "can't find pattern for discovery with id %s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:93 +msgid "candidates" +msgstr "" + +#: commands/service_upload.go:721 commands/service_upload.go:728 +msgid "cannot execute upload tool: %s" +msgstr "" + +#: internal/arduino/resources/install.go:40 +msgid "checking local archive integrity" +msgstr "" + +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 +msgid "cleaning build path" +msgstr "" + +#: internal/cli/cli.go:90 +msgid "command" +msgstr "" + +#: internal/arduino/monitor/monitor.go:149 +msgid "command '%[1]s' failed: %[2]s" +msgstr "" + +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 +msgid "communication out of sync, expected '%[1]s', received '%[2]s'" +msgstr "" + +#: internal/arduino/resources/checksums.go:74 +msgid "computing hash: %s" +msgstr "" + +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 +msgid "copying library to destination directory:" +msgstr "" + +#: commands/service_upload.go:836 +msgid "could not find a valid build artifact" +msgstr "" + +#: commands/service_platform_install.go:94 +msgid "could not overwrite" +msgstr "" + +#: commands/service_library_install.go:190 +msgid "could not remove old library" +msgstr "" + +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 +msgid "could not update sketch project file" +msgstr "" + +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 +msgid "creating core cache folder: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 +msgid "creating installed.json in %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 +msgid "creating temp dir for extraction: %s" +msgstr "" + +#: internal/arduino/builder/sizer.go:196 +msgid "data section exceeds available space in board" +msgstr "" + +#: commands/service_library_resolve_deps.go:86 +msgid "dependency '%s' is not available" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:94 +msgid "destination dir %s already exists, cannot install" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:138 +msgid "destination directory already exists" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:278 +msgid "directory doesn't exist: %s" +msgstr "" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:644 +msgid "discovery %s not found" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:648 +msgid "discovery %s not installed" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:741 +msgid "discovery release not found: %s" +msgstr "" + +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 +msgid "download a specific version (in this case 1.6.9)." +msgstr "" + +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 +msgid "download the latest version of Arduino SAMD core." +msgstr "" + +#: internal/cli/feedback/rpc_progress.go:74 +msgid "downloaded" +msgstr "" + +#: commands/instances.go:55 +msgid "downloading %[1]s tool: %[2]s" +msgstr "" + +#: internal/arduino/cores/fqbn.go:60 +msgid "empty board identifier" +msgstr "" + +#: internal/arduino/sketch/sketch.go:93 +msgid "error loading sketch project file:" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:615 +msgid "error opening %s" +msgstr "" + +#: internal/arduino/sketch/profiles.go:214 +msgid "error parsing version constraints" +msgstr "" + +#: commands/service_board_list.go:115 +msgid "error processing response from server" +msgstr "" + +#: commands/service_board_list.go:95 +msgid "error querying Arduino Cloud Api" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" +msgstr "" + +#: internal/arduino/resources/install.go:68 +msgid "extracting archive: %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:143 +msgid "failed to compute hash of file \"%s\"" +msgstr "" + +#: commands/service_board_list.go:90 +msgid "failed to initialize http client" +msgstr "" + +#: internal/arduino/resources/checksums.go:95 +msgid "fetched archive size differs from size specified in index" +msgstr "" + +#: internal/arduino/resources/install.go:123 +msgid "files in archive must be placed in a subdirectory" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:59 +msgid "finding absolute path of %s" +msgstr "" + +#: internal/cli/cli.go:90 +msgid "flags" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:98 +msgid "following symlink %s" +msgstr "" + +#: internal/cli/lib/download.go:40 +msgid "for a specific version." +msgstr "" + +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 +msgid "for the latest version." +msgstr "" + +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 +msgid "for the specific version." +msgstr "" + +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "" + +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" + +#: internal/arduino/resources/download.go:55 +msgid "getting archive file info: %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:92 +msgid "getting archive info: %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 +msgid "getting archive path: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:354 +msgid "getting build properties for board %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:106 +msgid "getting discovery dependencies for platform %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:114 +msgid "getting monitor dependencies for platform %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:99 +msgid "getting tool dependencies for platform %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:149 +msgid "install directory not set" +msgstr "" + +#: commands/instances.go:59 +msgid "installing %[1]s tool: %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 +msgid "installing platform %[1]s: %[2]s" +msgstr "" + +#: internal/cli/feedback/terminal.go:38 +msgid "interactive terminal not supported for the '%s' output format" +msgstr "" + +#: internal/arduino/sketch/profiles.go:212 +msgid "invalid '%s' directive" +msgstr "" + +#: internal/arduino/resources/checksums.go:43 +msgid "invalid checksum format: %s" +msgstr "" + +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 +msgid "invalid config option: %s" +msgstr "" + +#: internal/cli/arguments/reference.go:92 +msgid "invalid empty core architecture '%s'" +msgstr "" + +#: internal/cli/arguments/reference.go:69 +msgid "invalid empty core argument" +msgstr "" + +#: internal/cli/arguments/reference.go:89 +msgid "invalid empty core name '%s'" +msgstr "" + +#: internal/cli/arguments/reference.go:74 +msgid "invalid empty core reference '%s'" +msgstr "" + +#: internal/cli/arguments/reference.go:79 +msgid "invalid empty core version: '%s'" +msgstr "" + +#: internal/cli/lib/args.go:49 +msgid "invalid empty library name" +msgstr "" + +#: internal/cli/lib/args.go:54 +msgid "invalid empty library version: %s" +msgstr "" + +#: internal/arduino/cores/board.go:143 +msgid "invalid empty option found" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:268 +msgid "invalid git url" +msgstr "" + +#: internal/arduino/resources/checksums.go:47 +msgid "invalid hash '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/arguments/reference.go:86 +msgid "invalid item %s" +msgstr "" + +#: internal/arduino/sketch/profiles.go:246 +msgid "invalid library directive:" +msgstr "" + +#: internal/arduino/libraries/libraries_layout.go:67 +msgid "invalid library layout: %s" +msgstr "" + +#: internal/arduino/libraries/libraries_location.go:90 +msgid "invalid library location: %s" +msgstr "" + +#: internal/arduino/libraries/loader.go:140 +msgid "invalid library: no header files found" +msgstr "" + +#: internal/arduino/cores/board.go:146 +msgid "invalid option '%s'" +msgstr "" + +#: internal/cli/arguments/show_properties.go:52 +msgid "invalid option '%s'." +msgstr "" + +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "" + +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "" + +#: internal/arduino/cores/packageindex/index.go:277 +msgid "invalid platform archive size: %s" +msgstr "" + +#: internal/arduino/sketch/profiles.go:216 +msgid "invalid platform identifier" +msgstr "" + +#: internal/arduino/sketch/profiles.go:226 +msgid "invalid platform index URL:" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:326 +msgid "invalid pluggable monitor reference: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:185 +msgid "invalid port configuration value for %s: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:193 +msgid "invalid port configuration: %s" +msgstr "" + +#: commands/service_upload.go:708 +msgid "invalid recipe '%[1]s': %[2]s" +msgstr "" + +#: commands/service_sketch_new.go:86 +msgid "" +"invalid sketch name \"%[1]s\": the first character must be alphanumeric or " +"\"_\", the following ones can also contain \"-\" and \".\". The last one " +"cannot be \".\"." +msgstr "" + +#: internal/arduino/cores/board.go:150 +msgid "invalid value '%[1]s' for option '%[2]s'" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:231 +msgid "invalid version directory %s" +msgstr "" + +#: internal/arduino/sketch/profiles.go:248 +msgid "invalid version:" +msgstr "" + +#: internal/cli/core/search.go:39 +msgid "keywords" +msgstr "" + +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:126 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 +msgid "loading json index file %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 +msgid "loading library from %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/libraries/loader.go:55 +msgid "loading library.properties: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 +msgid "loading platform release %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:195 +msgid "loading platform.txt" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:47 +msgid "loading required platform %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:63 +msgid "loading required tool %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:590 +msgid "loading tool release in %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:188 +msgid "looking for boards.txt in %s" +msgstr "" + +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 +msgid "main file missing from sketch: %s" +msgstr "" + +#: internal/arduino/sketch/profiles.go:210 +msgid "missing '%s' directive" +msgstr "" + +#: internal/arduino/resources/checksums.go:39 +msgid "missing checksum for: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:457 +msgid "missing package %[1]s referenced by board %[2]s" +msgstr "" + +#: internal/cli/core/upgrade.go:101 +msgid "missing package index for %s, future updates cannot be guaranteed" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:462 +msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:467 +msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" +msgstr "" + +#: internal/arduino/resources/index.go:153 +msgid "missing signature" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:752 +msgid "monitor release not found: %s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 +msgid "moving extracted archive to destination dir: %s" +msgstr "" + +#: commands/service_upload.go:831 +msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" +msgstr "" + +#: internal/arduino/sketch/sketch.go:69 +msgid "multiple main sketch files found (%[1]v, %[2]v)" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 +msgid "" +"no compatible version of %[1]s tools found for the current os, try " +"contacting %[2]s" +msgstr "" + +#: commands/service_board_list.go:273 +msgid "no instance specified" +msgstr "" + +#: commands/service_upload.go:786 +msgid "no sketch or build directory/file specified" +msgstr "" + +#: internal/arduino/sketch/sketch.go:56 +msgid "no such file or directory" +msgstr "" + +#: internal/arduino/resources/install.go:126 +msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" +msgstr "" + +#: commands/service_upload.go:703 +msgid "no upload port provided" +msgstr "" + +#: internal/arduino/sketch/sketch.go:279 +msgid "no valid sketch found in %[1]s: missing %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:128 +msgid "no versions available for the current OS, try contacting %s" +msgstr "" + +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 +msgid "not running in a terminal" +msgstr "" + +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 +msgid "opening archive file: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:224 +msgid "opening boards.txt" +msgstr "" + +#: internal/arduino/security/signatures.go:81 +msgid "opening signature file: %s" +msgstr "" + +#: internal/arduino/security/signatures.go:76 +msgid "opening target file: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 +msgid "package %s not found" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:525 +msgid "package '%s' not found" +msgstr "" + +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 +msgid "parsing fqbn: %s" +msgstr "" + +#: internal/arduino/libraries/librariesindex/json.go:70 +msgid "parsing library_index.json: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:179 +msgid "path is not a platform directory: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:80 +msgid "platform %[1]s not found in package %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:341 +msgid "platform %s is not installed" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "" + +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 +msgid "platform not installed" +msgstr "" + +#: internal/cli/compile/compile.go:135 +msgid "please use --build-property instead." +msgstr "" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 +msgid "pluggable discovery already added: %s" +msgstr "" + +#: internal/cli/board/attach.go:35 +msgid "port" +msgstr "" + +#: internal/cli/arguments/port.go:122 +msgid "port not found: %[1]s %[2]s" +msgstr "" + +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "" + +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 +msgid "reading dir %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 +msgid "reading directory %s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" +msgstr "" + +#: internal/arduino/builder/sketch.go:81 +msgid "reading file %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "" + +#: internal/arduino/libraries/librariesresolver/cpp.go:90 +msgid "reading lib headers: %s" +msgstr "" + +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "" + +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "" + +#: internal/arduino/libraries/librariesindex/json.go:64 +msgid "reading library_index.json: %s" +msgstr "" + +#: internal/arduino/resources/install.go:116 +msgid "reading package root dir: %s" +msgstr "" + +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:697 +msgid "recipe not found '%s'" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:601 +msgid "release %[1]s not found for tool %[2]s" +msgstr "" + +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 +msgid "release cannot be nil" +msgstr "" + +#: internal/arduino/resources/download.go:46 +msgid "removing corrupted archive file: %s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:152 +msgid "removing library directory: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 +msgid "removing platform files: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:87 +msgid "required version %[1]s not found for platform %[2]s" +msgstr "" + +#: internal/arduino/security/signatures.go:72 +msgid "retrieving Arduino public keys: %s" +msgstr "" + +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "" + +#: internal/arduino/resources/install.go:74 +msgid "searching package root dir: %s" +msgstr "" + +#: commands/service_sketch_new.go:78 +msgid "sketch name cannot be empty" +msgstr "" + +#: commands/service_sketch_new.go:91 +msgid "sketch name cannot be the reserved name \"%[1]s\"" +msgstr "" + +#: commands/service_sketch_new.go:81 +msgid "" +"sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" +msgstr "" + +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 +msgid "sketch path is not valid" +msgstr "" + +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 +msgid "sketchPath" +msgstr "" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 +msgid "starting discovery %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:117 +msgid "testing archive checksum: %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:110 +msgid "testing archive size: %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:104 +msgid "testing if archive is cached: %s" +msgstr "" + +#: internal/arduino/resources/install.go:38 +msgid "testing local archive integrity: %s" +msgstr "" + +#: internal/arduino/builder/sizer.go:191 +msgid "text section exceeds available space in board" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 +msgid "the compilation database may be incomplete or inaccurate" +msgstr "" + +#: commands/service_board_list.go:102 +msgid "the server responded with status %s" +msgstr "" + +#: internal/arduino/monitor/monitor.go:139 +msgid "timeout waiting for message" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 +msgid "tool %s is not managed by package manager" +msgstr "" + +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 +msgid "tool %s not found" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:551 +msgid "tool '%[1]s' not found in package '%[2]s'" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 +msgid "tool not installed" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 +msgid "tool release not found: %s" +msgstr "" + +#: internal/arduino/cores/status.go:105 +msgid "tool version %s not found" +msgstr "" + +#: commands/service_library_install.go:92 +msgid "" +"two different versions of the library %[1]s are required: %[2]s and %[3]s" +msgstr "" + +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 +msgid "unable to compute relative path to the sketch for the item" +msgstr "" + +#: internal/arduino/builder/sketch.go:43 +msgid "unable to create a folder to save the sketch" +msgstr "" + +#: internal/arduino/builder/sketch.go:124 +msgid "unable to create the folder containing the item" +msgstr "" + +#: internal/cli/config/get.go:85 +msgid "unable to marshal config to YAML: %v" +msgstr "" + +#: internal/arduino/builder/sketch.go:162 +msgid "unable to read contents of the destination item" +msgstr "" + +#: internal/arduino/builder/sketch.go:135 +msgid "unable to read contents of the source item" +msgstr "" + +#: internal/arduino/builder/sketch.go:145 +msgid "unable to write to destination file" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:329 +msgid "unknown package %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:336 +msgid "unknown platform %s:%s" +msgstr "" + +#: internal/arduino/sketch/sketch.go:137 +msgid "unknown sketch file extension '%s'" +msgstr "" + +#: internal/arduino/resources/checksums.go:60 +msgid "unsupported hash algorithm: %s" +msgstr "" + +#: internal/cli/core/upgrade.go:44 +msgid "upgrade arduino:samd to the latest version" +msgstr "" + +#: internal/cli/core/upgrade.go:42 +msgid "upgrade everything to the latest version" +msgstr "" + +#: commands/service_upload.go:732 +msgid "uploading error: %s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 +msgid "user directory not set" +msgstr "" + +#: internal/cli/feedback/terminal.go:94 +msgid "user input not supported for the '%s' output format" +msgstr "" + +#: internal/cli/feedback/terminal.go:97 +msgid "user input not supported in non interactive mode" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:175 +msgid "version %s not available for this operating system" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:154 +msgid "version %s not found" +msgstr "" + +#: commands/service_board_list.go:120 +msgid "wrong format in server response" +msgstr "" diff --git a/internal/i18n/data/de.po b/internal/i18n/data/de.po new file mode 100644 index 00000000000..8f91920062b --- /dev/null +++ b/internal/i18n/data/de.po @@ -0,0 +1,3873 @@ +# +# Translators: +# Timo, 2021 +# Dan H, 2021 +# CLI team <prj_cli_team@arduino.cc>, 2022 +# Dee Gee, 2022 +# Ettore Atalan <atalanttore@googlemail.com>, 2022 +# C A, 2022 +# Luc Ohles, 2023 +# Jannis Lämmle, 2023 +# Jens Wulf, 2023 +# +msgid "" +msgstr "" +"Last-Translator: Jens Wulf, 2023\n" +"Language-Team: German (https://app.transifex.com/arduino-1/teams/108174/de/)\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: version/version.go:56 +msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" +msgstr "%[1]s %[2]s Version: %[3]s Commit: %[4]s Datum: %[5]s" + +#: internal/arduino/builder/internal/detector/detector.go:462 +msgid "%[1]s folder is no longer supported! See %[2]s for more information" +msgstr "" +"Der Ordner %[1]s wird nicht länger unterstützt! Siehe %[2]s für weitere " +"Informationen" + +#: internal/arduino/builder/build_options_manager.go:140 +msgid "%[1]s invalid, rebuilding all" +msgstr "%[1]s ungültig, alles wird neu gebaut" + +#: internal/cli/lib/check_deps.go:124 +msgid "%[1]s is required but %[2]s is currently installed." +msgstr "%[1]s wird benötigt, aber %[2]s ist aktuell installiert." + +#: internal/arduino/builder/builder.go:488 +msgid "%[1]s pattern is missing" +msgstr "Muster %[1]s fehlt" + +#: internal/arduino/resources/download.go:51 +msgid "%s already downloaded" +msgstr "%s bereits heruntergeladen" + +#: commands/service_upload.go:754 +msgid "%s and %s cannot be used together" +msgstr "%s und %s können nicht gemeinsam verwendet werden" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 +msgid "%s installed" +msgstr "%s installiert" + +#: internal/cli/lib/check_deps.go:121 +msgid "%s is already installed." +msgstr "%s ist bereits installiert." + +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 +msgid "%s is not a directory" +msgstr "%s ist kein Verzeichnis" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 +msgid "%s is not managed by package manager" +msgstr "%s wird nicht vom Paketmanager verwaltet" + +#: internal/cli/lib/check_deps.go:118 +msgid "%s must be installed." +msgstr "%s muss installiert sein." + +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 +msgid "%s pattern is missing" +msgstr "Muster %s fehlt" + +#: commands/cmderrors/cmderrors.go:818 +msgid "'%s' has an invalid signature" +msgstr "'%s' hat eine ungültige Signatur" + +#: internal/arduino/cores/packagemanager/package_manager.go:443 +msgid "" +"'build.core' and 'build.variant' refer to different platforms: %[1]s and " +"%[2]s" +msgstr "" +"'build.core' und 'build.variant' verweisen auf andere Plattformen: %[1]s and" +" %[2]s" + +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 +msgid "(hidden)" +msgstr "(versteckt)" + +#: internal/arduino/builder/libraries.go:302 +msgid "(legacy)" +msgstr "(veraltet)" + +#: internal/cli/lib/install.go:82 +msgid "" +"--git-url and --zip-path are disabled by default, for more information see: " +"%v" +msgstr "" +"--git-url und --zip-path sind Standardmäßig deaktiviert. Für mehr " +"Informationen sehen Sie hier nach: %v" + +#: internal/cli/lib/install.go:84 +msgid "" +"--git-url and --zip-path flags allow installing untrusted files, use it at " +"your own risk." +msgstr "" +"--git-url und --zip-path flags erlauben das Installieren von nicht " +"vertrauenswürdigen Dateien. Benutzung auf eigene Gefahr." + +#: internal/cli/lib/install.go:87 +msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" +msgstr "" +"--git-url oder --zip-path können nicht mit --install-in-builtin-dir " +"verwendet werden" + +#: commands/service_sketch_new.go:66 +msgid ".ino file already exists" +msgstr ".ino-Datei existiert bereits" + +#: internal/cli/updater/updater.go:30 +msgid "A new release of Arduino CLI is available:" +msgstr "Eine neue Version von Arduino CLI ist verfügbar:" + +#: commands/cmderrors/cmderrors.go:299 +msgid "A programmer is required to upload" +msgstr "Zum Hochladen ist ein Programmer benötigt" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "ARCH" +msgstr "ARCH" + +#: internal/cli/generatedocs/generatedocs.go:80 +msgid "ARDUINO COMMAND LINE MANUAL" +msgstr "Arduino CLI Handbuch" + +#: internal/cli/usage.go:28 +msgid "Additional help topics:" +msgstr "Weitere Hilfethemen:" + +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 +msgid "Adds one or more values to a setting." +msgstr "Fügt einen oder mehrere Werte zu einer Einstellung hinzu." + +#: internal/cli/usage.go:23 +msgid "Aliases:" +msgstr "Decknamen:" + +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "Alle Plattformen sind aktuell" + +#: internal/cli/core/upgrade.go:87 +msgid "All the cores are already at the latest version" +msgstr "Alle Kerne sind bereits auf der neuesten Version" + +#: commands/service_library_install.go:135 +msgid "Already installed %s" +msgstr "Bereits installiert %s" + +#: internal/arduino/builder/internal/detector/detector.go:91 +msgid "Alternatives for %[1]s: %[2]s" +msgstr "Alternativen für %[1]s: %[2]s" + +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 +msgid "An error occurred adding prototypes" +msgstr "Beim Hinzufügen von Prototypen ist ein Fehler aufgetreten" + +#: internal/arduino/builder/internal/detector/detector.go:213 +msgid "An error occurred detecting libraries" +msgstr "Ein Fehler trat beim erkennen der Bibliotheken auf" + +#: internal/cli/daemon/daemon.go:85 +msgid "Append debug logging to the specified file" +msgstr "Debug-Protokollierung an die angegebene Datei anhängen" + +#: internal/cli/lib/search.go:208 +msgid "Architecture: %s" +msgstr "Architektur: %s" + +#: commands/service_sketch_archive.go:69 +msgid "Archive already exists" +msgstr "Archiv existiert bereits" + +#: internal/arduino/builder/core.go:163 +msgid "Archiving built core (caching) in: %[1]s" +msgstr "Gebauter Kern wird archiviert (zwischengespeichert) in: %[1]s" + +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 +msgid "Arduino CLI sketch commands." +msgstr "Arduino CLI Sketch Befehle." + +#: internal/cli/cli.go:88 +msgid "Arduino CLI." +msgstr "Arduino CLI." + +#: internal/cli/cli.go:89 +msgid "Arduino Command Line Interface (arduino-cli)." +msgstr "Arduino Befehlszeilen-Schnittstelle (arduino-cli)." + +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 +msgid "Arduino board commands." +msgstr "Arduino-Platinen-Befehle." + +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 +msgid "Arduino cache commands." +msgstr "Arduino-Cache-Befehle." + +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 +msgid "Arduino commands about libraries." +msgstr "Arduino Befehle für Bibliotheken." + +#: internal/cli/config/config.go:35 +msgid "Arduino configuration commands." +msgstr "Arduino-Konfigurationsbefehle." + +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 +msgid "Arduino core operations." +msgstr "Arduino-Kern-Operationen." + +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 +msgid "Arguments error: %v" +msgstr "Argumentefehler: %v" + +#: internal/cli/board/attach.go:36 +msgid "Attaches a sketch to a board." +msgstr "Ordnet einen Sketch einem Board zu." + +#: internal/cli/lib/search.go:199 +msgid "Author: %s" +msgstr "Autor: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:79 +msgid "" +"Automatic library install can't be performed in this case, please manually " +"remove all duplicates and retry." +msgstr "" +"Automatische Installation der Bibliotheken kann in diesem Fall nicht " +"durchgeführt werden, bitte lösche alle Duplikate und versuche erneut." + +#: commands/service_library_uninstall.go:87 +msgid "" +"Automatic library uninstall can't be performed in this case, please manually" +" remove them." +msgstr "" +"Automatische Desinstallation der Bibliotheken kann in diesem Fall nicht " +"durchgeführt werden, bitte entferne sie manuell." + +#: internal/cli/lib/list.go:138 +msgid "Available" +msgstr "Verfügbar" + +#: internal/cli/usage.go:25 +msgid "Available Commands:" +msgstr "Verfügbare Befehle:" + +#: internal/cli/upload/upload.go:74 +msgid "Binary file to upload." +msgstr "Binärdatei zum Hochladen." + +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "Board Name" +msgstr "Platinenname" + +#: internal/cli/board/details.go:139 +msgid "Board name:" +msgstr "Platinenname:" + +#: internal/cli/board/details.go:141 +msgid "Board version:" +msgstr "Platinenversion:" + +#: internal/arduino/builder/sketch.go:243 +msgid "Bootloader file specified but missing: %[1]s" +msgstr "Bootloader-Datei angegeben, aber nicht vorhanden: %[1]s" + +#: internal/cli/compile/compile.go:98 +msgid "Builds of 'core.a' are saved into this path to be cached and reused." +msgstr "" +"Builds von 'core.a' werden in diesem Pfad gespeichert, gecached und " +"wiederverwendet." + +#: internal/arduino/resources/index.go:65 +msgid "Can't create data directory %s" +msgstr "Datenverzeichnis %s kann nicht erstellt werden" + +#: commands/cmderrors/cmderrors.go:511 +msgid "Can't create sketch" +msgstr "Sketch kann nicht erstellt werden" + +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 +msgid "Can't download library" +msgstr "Bibliothek kann nicht heruntergeladen werden" + +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 +msgid "Can't find dependencies for platform %s" +msgstr "Abhängigkeiten für die Plattform %s können nicht gefunden werden" + +#: commands/cmderrors/cmderrors.go:537 +msgid "Can't open sketch" +msgstr "Sketch kann nicht geöffnet werden" + +#: commands/cmderrors/cmderrors.go:524 +msgid "Can't update sketch" +msgstr "Sketch kann nicht aktualisiert werden" + +#: internal/cli/arguments/arguments.go:34 +msgid "Can't use the following flags together: %s" +msgstr "Die folgenden Flags können nicht gemeinsam verwendet werden: %s" + +#: internal/cli/daemon/daemon.go:112 +msgid "Can't write debug log: %s" +msgstr "Debug-Log kann icht geschrieben werden: %s" + +#: commands/service_compile.go:190 commands/service_compile.go:199 +msgid "Cannot create build cache directory" +msgstr "Cache-Verzeichnis kann nicht angelegt werden" + +#: commands/service_compile.go:177 +msgid "Cannot create build directory" +msgstr "Build-Verzeichnis kann nicht angelegt werden" + +#: internal/cli/config/init.go:100 +msgid "Cannot create config file directory: %v" +msgstr "Verzeichnis der Konfigurationsdatei kann nicht erstellt werden: %v" + +#: internal/cli/config/init.go:124 +msgid "Cannot create config file: %v" +msgstr "Konfigurationsdatei kann nicht erstellt werden: %v" + +#: commands/cmderrors/cmderrors.go:781 +msgid "Cannot create temp dir" +msgstr "Temporärer Ordner kann nicht erstellt werden" + +#: commands/cmderrors/cmderrors.go:799 +msgid "Cannot create temp file" +msgstr "Temporäre Datei kann nicht erstellt werden" + +#: internal/cli/config/delete.go:55 +msgid "Cannot delete the key %[1]s: %[2]v" +msgstr "Der Schlüssel %[1]s:%[2]v kann nicht gelöscht werden" + +#: commands/service_debug_run.go:69 +msgid "Cannot execute debug tool" +msgstr "Das Debug-Werkzeug kann nicht gestartet werden" + +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 +msgid "Cannot find absolute path: %v" +msgstr "Absoluter Pfad %v wurde nicht gefunden" + +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 +msgid "Cannot install platform" +msgstr "Plattform kann nicht installiert werden" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 +msgid "Cannot install tool %s" +msgstr "Werkzeug %s kann nicht installiert werden" + +#: commands/service_upload.go:532 +msgid "Cannot perform port reset: %s" +msgstr "Port-Reset konnte nicht ausgeführt werden: %s" + +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 +msgid "Cannot upgrade platform" +msgstr "Plattform kann nicht upgegraded werden" + +#: internal/cli/lib/search.go:207 +msgid "Category: %s" +msgstr "Kategorie: %s" + +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 +msgid "Check dependencies status for the specified library." +msgstr "Prüfe die die Abhängigkeiten für die angegebene Bibliothek." + +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 +msgid "Checksum differs from checksum in package.json" +msgstr "Prüfsumme unterscheidet sich von der Prüfsumme in package.json" + +#: internal/cli/board/details.go:190 +msgid "Checksum:" +msgstr "Prüfsumme:" + +#: internal/cli/cache/cache.go:32 +msgid "Clean caches." +msgstr "Caches bereinigen." + +#: internal/cli/cli.go:181 +msgid "Comma-separated list of additional URLs for the Boards Manager." +msgstr "Durch Kommata getrennte Liste mit URLs für die Board-Manager." + +#: internal/cli/board/list.go:56 +msgid "" +"Command keeps running and prints list of connected boards whenever there is " +"a change." +msgstr "" +"Befehl läuft weiter und gibt die Liste der verbundenen Platinen aus, sobald " +"sich eine Änderung ergibt." + +#: commands/service_debug_config.go:176 commands/service_upload.go:440 +msgid "Compiled sketch not found in %s" +msgstr "Kompilierter Sketch wurde nicht in%s gefunden" + +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 +msgid "Compiles Arduino sketches." +msgstr "Kompiliert Arduino-Sketche." + +#: internal/arduino/builder/builder.go:422 +msgid "Compiling core..." +msgstr "Kern wird kompiliert ..." + +#: internal/arduino/builder/builder.go:401 +msgid "Compiling libraries..." +msgstr "Bibliotheken werden kompiliert ..." + +#: internal/arduino/builder/libraries.go:133 +msgid "Compiling library \"%[1]s\"" +msgstr "Bibliothek \"%[1]s\" wird kompiliert" + +#: internal/arduino/builder/builder.go:385 +msgid "Compiling sketch..." +msgstr "Sketch wird kompiliert ..." + +#: internal/cli/config/init.go:94 +msgid "" +"Config file already exists, use --overwrite to discard the existing one." +msgstr "" +"Konfigurationsdatei existiert bereits, verwende --overwrite um diese zu " +"überschreiben." + +#: internal/cli/config/init.go:179 +msgid "Config file written to: %s" +msgstr "Konfigurationsdatei geschrieben nach: %s" + +#: internal/cli/debug/debug.go:238 +msgid "Configuration options for %s" +msgstr "Konfigurationsoptionen für %s" + +#: internal/cli/monitor/monitor.go:74 +msgid "" +"Configure communication port settings. The format is " +"<ID>=<value>[,<ID>=<value>]..." +msgstr "" +"Konfiguriere die Com-Port-Einstellungen. Das Format lautet: " +"<ID>=<value>[,<ID>=<value>]..." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 +msgid "Configuring platform." +msgstr "Konfiguriere Plattform" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 +msgid "Configuring tool." +msgstr "Konfiguriere Werkzeug." + +#: internal/cli/board/list.go:196 +msgid "Connected" +msgstr "Verbunden" + +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "" + +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +msgid "Core" +msgstr "Kern" + +#: internal/cli/configuration/network.go:103 +msgid "Could not connect via HTTP" +msgstr "Konnte nicht über HTTP verbinden" + +#: commands/instances.go:487 +msgid "Could not create index directory" +msgstr "Indexverzeichnis konnte nicht erstellt werden" + +#: internal/arduino/builder/core.go:41 +msgid "Couldn't deeply cache core build: %[1]s" +msgstr "Der Core-Build konnte nicht zwischengespeichert werden: %[1]s" + +#: internal/arduino/builder/sizer.go:154 +msgid "Couldn't determine program size" +msgstr "Programmgröße konnte nicht ermittelt werden" + +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 +msgid "Couldn't get current working directory: %v" +msgstr "Das aktuelle Arbeitsverzeichnis konnte nicht gefunden werden: %v " + +#: internal/cli/sketch/new.go:37 internal/cli/sketch/new.go:38 +msgid "Create a new Sketch" +msgstr "Einen neuen Sketch erstellen" + +#: internal/cli/compile/compile.go:95 +msgid "Create and print a profile configuration from the build." +msgstr "Erstelle und drucke ein Konfigurations-Profil aus dem Build" + +#: internal/cli/sketch/archive.go:37 internal/cli/sketch/archive.go:38 +msgid "Creates a zip file containing all sketch files." +msgstr "Erstellt eine ZIP-Datei, die alle Sketch-Dateien enthält." + +#: internal/cli/config/init.go:46 +msgid "" +"Creates or updates the configuration file in the data directory or custom " +"directory with the current configuration settings." +msgstr "" +"Erstellt oder aktualisiert die Konfigurationsdatei im Datenverzeichnis oder " +"einem benutzerdefinierten Verzeichnis mit den aktuellen " +"Konfigurationseinstellungen." + +#: internal/cli/compile/compile.go:327 +msgid "" +"Currently, Build Profiles only support libraries available through Arduino " +"Library Manager." +msgstr "" +"Aktuell werden in Build-Profilen nur Bibliotheken aus dem Arduino-" +"Bibliotheksmanager unterstützt." + +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" +msgstr "Benutzerdefinierte Konfigurtion für %s:" + +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 +msgid "DEPRECATED" +msgstr "VERALTET" + +#: internal/cli/daemon/daemon.go:188 +msgid "Daemon is now listening on %s:%s" +msgstr "Daemon überwacht jetzt %s: %s" + +#: internal/cli/debug/debug.go:52 +msgid "Debug Arduino sketches." +msgstr "Arduino-Sketche debuggen" + +#: internal/cli/debug/debug.go:53 +msgid "" +"Debug Arduino sketches. (this command opens an interactive gdb session)" +msgstr "" +"Arduino-Sketche debuggen. (Dieser Befehl öffnet eine interaktive gdb-" +"Sitzung)" + +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 +msgid "Debug interpreter e.g.: %s" +msgstr "Debug-Interpreter z.B.: %s" + +#: commands/service_debug_config.go:206 +msgid "Debugging not supported for board %s" +msgstr "Debugging für Board %s nicht unterstützt" + +#: internal/cli/monitor/monitor.go:297 +msgid "Default" +msgstr "Standard" + +#: internal/cli/board/attach.go:115 +msgid "Default FQBN set to" +msgstr "Standard-FQBN gesetzt auf" + +#: internal/cli/board/attach.go:114 +msgid "Default port set to" +msgstr "Standard-Port gesetzt auf" + +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 +msgid "Delete Boards/Library Manager download cache." +msgstr "Board/Bibliotheks-Manager Download-Cache löschen" + +#: internal/cli/cache/clean.go:33 +msgid "" +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." +msgstr "" + +#: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 +msgid "Deletes a settings key and all its sub keys." +msgstr "" +"Löscht einen Einstellungsschlüssel und alle zugehörigen Unterschlüssel." + +#: internal/cli/lib/search.go:215 +msgid "Dependencies: %s" +msgstr "Abhängigkeiten: %s" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 +msgid "Description" +msgstr "Beschreibung" + +#: internal/arduino/builder/builder.go:313 +msgid "Detecting libraries used..." +msgstr "Verwendete Bibliotheken erkennen ..." + +#: internal/cli/board/list.go:46 +msgid "" +"Detects and displays a list of boards connected to the current computer." +msgstr "" +"Erkennt und zeigt eine Liste von Platinen, die mit dem Computer verbunden " +"sind." + +#: internal/cli/debug/debug.go:67 +msgid "Directory containing binaries for debug." +msgstr "Verzeichnis, welches die Binärdateien zum Debuggen enthält." + +#: internal/cli/upload/upload.go:73 +msgid "Directory containing binaries to upload." +msgstr "Verzeichnis, welches die Binärdateien zum Hochladen enthält." + +#: internal/cli/generatedocs/generatedocs.go:45 +msgid "" +"Directory where to save generated files. Default is './docs', the directory " +"must exist." +msgstr "" +"Verzeichnis in dem die erzeugten Dateien gespeichert werden. Standardmäßig " +"'./docs', Dieses Verzeichnis muss existieren." + +#: internal/cli/completion/completion.go:44 +msgid "Disable completion description for shells that support it" +msgstr "" +"Vervollständigungsbeschreibung für Shells abschalten, die das unterstützen" + +#: internal/cli/board/list.go:197 +msgid "Disconnected" +msgstr "Verbindung getrennt" + +#: internal/cli/daemon/daemon.go:88 +msgid "Display only the provided gRPC calls" +msgstr "Nur die bereitgestellten gRPC-Aufrufe anzeigen" + +#: internal/cli/lib/install.go:62 +msgid "Do not install dependencies." +msgstr "Abhängigkeiten nicht installieren." + +#: internal/cli/lib/install.go:63 +msgid "Do not overwrite already installed libraries." +msgstr "Bereits installierte Bibliotheken nicht überschreiben." + +#: internal/cli/core/install.go:56 +msgid "Do not overwrite already installed platforms." +msgstr "Bereits installierte Plattformen nicht überschreiben." + +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 +msgid "Do not perform the actual upload, just log out actions" +msgstr "" +"Den eigentlichen Hochladevorgang nicht durchführen, sondern nur die " +"Abmeldeaktionen" + +#: internal/cli/daemon/daemon.go:79 +msgid "Do not terminate daemon process if the parent process dies" +msgstr "Den Daemon-Prozess nicht mit dem Elternprozess beenden." + +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:88 +msgid "Downloading %s" +msgstr "%s wird heruntergeladen" + +#: internal/arduino/resources/index.go:137 +msgid "Downloading index signature: %s" +msgstr "Indexsignatur wird heruntergeladen: %s" + +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 +msgid "Downloading index: %s" +msgstr "Index wird heruntergeladen: %s" + +#: commands/instances.go:374 +msgid "Downloading library %s" +msgstr "Bibliothek %s wird heruntergeladen" + +#: commands/instances.go:53 +msgid "Downloading missing tool %s" +msgstr "Fehlendes Werkzeug %s wird heruntergeladen" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 +msgid "Downloading packages" +msgstr "Pakete werden heruntergeladen" + +#: internal/arduino/cores/packagemanager/profiles.go:101 +msgid "Downloading platform %s" +msgstr "Plattform %s wird heruntergeladen" + +#: internal/arduino/cores/packagemanager/profiles.go:177 +msgid "Downloading tool %s" +msgstr "Werkzeug %s wird heruntergeladen" + +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 +msgid "Downloads one or more cores and corresponding tool dependencies." +msgstr "" +"Lädt einen oder mehrere Kerne und die entsprechenden Werkzeugabhängigkeiten " +"herunter." + +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 +msgid "Downloads one or more libraries without installing them." +msgstr "" +"Lädt eine oder mehrere Bibliotheken herunter, ohne sie zu installieren." + +#: internal/cli/daemon/daemon.go:82 +msgid "Enable debug logging of gRPC calls" +msgstr "Debug-Protokollierung von gRPC-Aufrufen aktivieren" + +#: internal/cli/lib/install.go:65 +msgid "Enter a path to zip file" +msgstr "Geben Sie einen Pfad zur ZIP-Datei an" + +#: internal/cli/lib/install.go:64 +msgid "Enter git url for libraries hosted on repositories" +msgstr "Gib eine git-URL mit den Bibliotheken aus Repositories ein" + +#: commands/service_sketch_archive.go:105 +msgid "Error adding file to sketch archive" +msgstr "Fehler beim Hinzufügen einer Datei zum Sketch-Archiv" + +#: internal/arduino/builder/core.go:169 +msgid "Error archiving built core (caching) in %[1]s: %[2]s" +msgstr "Fehler bei speichern des gebauten Kerns (caching) in %[1]s:%[2]s" + +#: internal/cli/sketch/archive.go:85 +msgid "Error archiving: %v" +msgstr "Fehler beim Archivieren: %v" + +#: commands/service_sketch_archive.go:93 +msgid "Error calculating relative file path" +msgstr "Fehler beim Berechnen des relativen Dateipfads" + +#: internal/cli/cache/clean.go:48 +msgid "Error cleaning caches: %v" +msgstr "Fehler beim bereinigen des Caches: %v" + +#: internal/cli/compile/compile.go:216 +msgid "Error converting path to absolute: %v" +msgstr "Fehler beim konvertieren des Pfads zum Absolutpfad: %v" + +#: commands/service_compile.go:403 +msgid "Error copying output file %s" +msgstr "Fehler beim Kopieren der Ausgabedatei %s" + +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + +#: internal/cli/instance/instance.go:43 +msgid "Error creating instance: %v" +msgstr "Fehler beim Erstellen der Instanz: %v" + +#: commands/service_compile.go:387 +msgid "Error creating output dir" +msgstr "Fehler beim Erstellen des Ausgabeverzeichnisses" + +#: commands/service_sketch_archive.go:81 +msgid "Error creating sketch archive" +msgstr "Fehler beim Erstellen des Sketch-Archivs" + +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 +msgid "Error creating sketch: %v" +msgstr "Fehler beim Erstellen des Sketches: %v" + +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 +msgid "Error detecting boards: %v" +msgstr "Fehler beim Erkennen von Platinen: %v" + +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 +msgid "Error downloading %[1]s: %[2]v" +msgstr "Fehler beim Herunterladen von %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 +msgid "Error downloading %s" +msgstr "Fehler beim Herunterladen von %s" + +#: commands/instances.go:661 internal/arduino/resources/index.go:83 +msgid "Error downloading index '%s'" +msgstr "Fehler beim Herunterladen des Index '%s'" + +#: internal/arduino/resources/index.go:138 +msgid "Error downloading index signature '%s'" +msgstr "Fehler beim Herunterladen der Indexsignatur '%s'" + +#: commands/instances.go:384 commands/instances.go:390 +msgid "Error downloading library %s" +msgstr "Fehler beim Herunterladen der Bibliothek %s" + +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 +msgid "Error downloading platform %s" +msgstr "Fehler beim Herunterladen der Plattform %s" + +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 +msgid "Error downloading tool %s" +msgstr "Fehler beim Herunterladen des Werkzeugs %s" + +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 +msgid "Error during Debug: %v" +msgstr "Fehler beim Debuggen: %v" + +#: internal/cli/arguments/port.go:141 +msgid "Error during FQBN detection: %v" +msgstr "Fehler während FQBN-Bestimmung: %v" + +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 +msgid "Error during JSON encoding of the output: %v" +msgstr "Fehler beim Generieren der JSON-Ausgabe: %v" + +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 +msgid "Error during Upload: %v" +msgstr "Fehler während dem Hochladen: %v" + +#: internal/cli/compile/compile.go:375 +msgid "Error during build: %v" +msgstr "Fehler beim Build: %v" + +#: internal/cli/core/install.go:81 +msgid "Error during install: %v" +msgstr "Fehler während dem Installieren: %v" + +#: internal/cli/core/uninstall.go:75 +msgid "Error during uninstall: %v" +msgstr "Fehler während der Deinstallation: %v" + +#: internal/cli/core/upgrade.go:136 +msgid "Error during upgrade: %v" +msgstr "Fehler beim Upgrade %v" + +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 +msgid "Error extracting %s" +msgstr "Fehler beim Extrahieren von %s" + +#: commands/service_upload.go:437 +msgid "Error finding build artifacts" +msgstr "Fehler beim finden der Build-Artifacts" + +#: internal/cli/debug/debug.go:130 +msgid "Error getting Debug info: %v" +msgstr "Fehler beim ermitteln der Debug-Information: %v" + +#: commands/service_sketch_archive.go:57 +msgid "Error getting absolute path of sketch archive" +msgstr "Fehler beim Abrufen des absoluten Pfads des Sketch-Archivs" + +#: internal/cli/board/details.go:74 +msgid "Error getting board details: %v" +msgstr "Fehler beim Abrufen von Platinendetails: %v" + +#: internal/arduino/builder/internal/compilation/database.go:82 +msgid "Error getting current directory for compilation database: %s" +msgstr "" +"Fehler beim ermitteln des Verzeichnisses für die Kompilier-Datenbank: %s" + +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" +"Fehler beim ermitteln des Standard-Ports aus 'sketch.yaml' Prüfe, ob di im " +"richtigen Sketch-Verzeichnis bist oder verwende das --port Attribut: %s" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 +msgid "Error getting information for library %s" +msgstr "Fehler beim Abrufen von Informationen für die Bibliothek %s" + +#: internal/cli/lib/examples.go:75 +msgid "Error getting libraries info: %v" +msgstr "Fehler beim Abrufen von Bibliotheksinformationen: %v" + +#: internal/cli/arguments/fqbn.go:92 +msgid "Error getting port metadata: %v" +msgstr "Fehler beim Abrufen von Port-Metadaten: %v" + +#: internal/cli/monitor/monitor.go:153 +msgid "Error getting port settings details: %s" +msgstr "Fehler beim Abrufen von Details zu Port-Einstellungen: %s" + +#: internal/cli/upload/upload.go:166 +msgid "Error getting user input" +msgstr "Fehler beim lesen der Benutzereingaben." + +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 +msgid "Error initializing instance: %v" +msgstr "Fehler beim Initialisieren der Instanz: %v" + +#: internal/cli/lib/install.go:148 +msgid "Error installing %s: %v" +msgstr "Fehler beim Installieren von %s: %v" + +#: internal/cli/lib/install.go:122 +msgid "Error installing Git Library: %v" +msgstr "Fehler beim Installieren der Git-Bibliothek: %v" + +#: internal/cli/lib/install.go:100 +msgid "Error installing Zip Library: %v" +msgstr "Fehler beim Installieren der Zip-Bibliothek: %v" + +#: commands/instances.go:400 +msgid "Error installing library %s" +msgstr "Fehler beim Installieren der Bibliothek %s" + +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 +msgid "Error installing platform %s" +msgstr "Fehler beim Installieren der Plattform %s" + +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 +msgid "Error installing tool %s" +msgstr "Fehler beim Installieren des Werkzeugs %s" + +#: internal/cli/board/listall.go:66 +msgid "Error listing boards: %v" +msgstr "Fehler beim Auflisten von Platinen: %v" + +#: internal/cli/lib/list.go:91 +msgid "Error listing libraries: %v" +msgstr "Fehler beim Auflisten der Bibliotheken: %v" + +#: internal/cli/core/list.go:69 +msgid "Error listing platforms: %v" +msgstr "Fehler beim Auflisten von Plattformen: %v" + +#: commands/cmderrors/cmderrors.go:424 +msgid "Error loading hardware platform" +msgstr "Fehler beim Laden der Hardware-Plattform" + +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 +msgid "Error loading index %s" +msgstr "Fehler beim Laden des Index %s" + +#: internal/arduino/resources/index.go:99 +msgid "Error opening %s" +msgstr "Fehler beim Öffnen von %s" + +#: internal/cli/daemon/daemon.go:106 +msgid "Error opening debug logging file: %s" +msgstr "Fehler beim Öffnen der Debug-Protokollierungsdatei: %s" + +#: internal/cli/compile/compile.go:189 +msgid "Error opening source code overrides data file: %v" +msgstr "Fehler, öffnen der Quellcodes überschreibt die Datendatei: %v" + +#: internal/cli/compile/compile.go:202 +msgid "Error parsing --show-properties flag: %v" +msgstr "Fehler bei der Auswertung des --show-Property Attributs: %v" + +#: commands/service_compile.go:396 +msgid "Error reading build directory" +msgstr "Fehler bel Lesen des Build-Verzechnisses" + +#: commands/service_sketch_archive.go:75 +msgid "Error reading sketch files" +msgstr "Fehler beim Lesen von Sketch-Dateien" + +#: internal/cli/lib/check_deps.go:72 +msgid "Error resolving dependencies for %[1]s: %[2]s" +msgstr "Fehler beim Auflösen von Abhängigkeiten für %[1]s: %[2]s" + +#: internal/cli/core/upgrade.go:68 +msgid "Error retrieving core list: %v" +msgstr "Fehler beim Abrufen der Kernliste: %v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 +msgid "Error rolling-back changes: %s" +msgstr "Fehler beim Rückgängmachen der Änderungen: %s" + +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 +msgid "Error saving downloaded index" +msgstr "Fehler beim Speichern des heruntergeladenen Index" + +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 +msgid "Error saving downloaded index signature" +msgstr "Fehler beim Speichern der heruntergeladenen Indexsignatur" + +#: internal/cli/board/search.go:63 +msgid "Error searching boards: %v" +msgstr "Fehler bei der Suche nach Platinen: %v" + +#: internal/cli/lib/search.go:126 +msgid "Error searching for Libraries: %v" +msgstr "Fehler beim Suchen der Bibliotheken: %v" + +#: internal/cli/core/search.go:82 +msgid "Error searching for platforms: %v" +msgstr "Fehler bei der Suche nach Plattformen: %v" + +#: internal/arduino/builder/internal/compilation/database.go:67 +msgid "Error serializing compilation database: %s" +msgstr "Fehler bei der Serialisierung der Kompilierungsdatenbank: %s" + +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "Fehler beim Setzen des \"Raw-Mode\": %s" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 +msgid "Error starting discovery: %v" +msgstr "Fehler beim starten der Suche: %v" + +#: internal/cli/lib/uninstall.go:67 +msgid "Error uninstalling %[1]s: %[2]v" +msgstr "Fehler beim Deinstallieren von %[1]s: %[2]v" + +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 +msgid "Error updating library index: %v" +msgstr "Fehler beim Aktualisieren des Bibliotheksindex: %v" + +#: internal/cli/lib/upgrade.go:75 +msgid "Error upgrading libraries" +msgstr "Fehler beim Upgraden der Bibliothken" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 +msgid "Error upgrading platform: %s" +msgstr "Fehler beim Upgraden der Plattform: %s" + +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 +msgid "Error verifying signature" +msgstr "Fehler beim Verifizieren der Signatur" + +#: internal/arduino/builder/internal/detector/detector.go:369 +msgid "Error while detecting libraries included by %[1]s" +msgstr "Fehler beim Ermitteln der in %[1]s eingebundenen Bibliotheken" + +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 +msgid "Error while determining sketch size: %s" +msgstr "Fehler während der Bestimmung der Sketch-Größe: %s" + +#: internal/arduino/builder/internal/compilation/database.go:70 +msgid "Error writing compilation database: %s" +msgstr "Fehler beim Schreiben der Kompilierungsdatenbank: %s" + +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + +#: internal/cli/completion/completion.go:56 +msgid "Error: command description is not supported by %v" +msgstr "Fehler: Befehlsbeschreibung wird nicht unterstützt von %v" + +#: internal/cli/compile/compile.go:195 +msgid "Error: invalid source code overrides data file: %v" +msgstr "Fehler: ungültiger Quellcode überschreibt die Daten-Datei: %v" + +#: internal/cli/board/list.go:102 +msgid "Event" +msgstr "Ereignis" + +#: internal/cli/lib/examples.go:123 +msgid "Examples for library %s" +msgstr "Beispiele für Bibliothek %s" + +#: internal/cli/usage.go:24 +msgid "Examples:" +msgstr "Beispiele:" + +#: internal/cli/debug/debug.go:221 +msgid "Executable to debug" +msgstr "Ausführbare Datei zum Debuggen" + +#: commands/service_debug_config.go:179 commands/service_upload.go:443 +msgid "Expected compiled sketch in directory %s, but is a file instead" +msgstr "" +"Kompilierter Sketch wurde im Verzeichnis %s erwartet, aber eine Datei " +"gefunden." + +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "FQBN" +msgstr "FQBN" + +#: internal/cli/board/details.go:140 +msgid "FQBN:" +msgstr "FQBN:" + +#: commands/service_upload.go:566 +msgid "Failed chip erase" +msgstr "Chip-Löschung fehlgeschlagen" + +#: commands/service_upload.go:573 +msgid "Failed programming" +msgstr "Fehlgeschlagene Programmierung" + +#: commands/service_upload.go:569 +msgid "Failed to burn bootloader" +msgstr "Schreiben des Bootloaders fehlgeschlagen" + +#: commands/instances.go:90 +msgid "Failed to create data directory" +msgstr "Erzeugen des Datenverzeichnisses fehlgeschlagen" + +#: commands/instances.go:79 +msgid "Failed to create downloads directory" +msgstr "Erzeugen des Download-Verzeichnisses fehlgeschlagen" + +#: internal/cli/daemon/daemon.go:143 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." +msgstr "" +"Fehler beim Überwachen von TCP-Port: %[1]s. %[2]s ist ein ungültiger Port." + +#: internal/cli/daemon/daemon.go:138 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." +msgstr "" +"Fehler beim Überwachen von TCP-Port: %[1]s. %[2]s ist ein unbekannter Name." + +#: internal/cli/daemon/daemon.go:150 +msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" +msgstr "" +"Fehler beim Überwachen von TCP-Port: %[1]s. Unerwarteter Fehler: %[2]v" + +#: internal/cli/daemon/daemon.go:148 +msgid "Failed to listen on TCP port: %s. Address already in use." +msgstr "" +"Fehler beim Überwachen von TCP-Port: %s. Adresse wird bereits benutzt." + +#: commands/service_upload.go:577 +msgid "Failed uploading" +msgstr "Fehlgeschlagenes Hochladen" + +#: internal/cli/board/details.go:188 +msgid "File:" +msgstr "Datei:" + +#: commands/service_compile.go:160 +msgid "" +"Firmware encryption/signing requires all the following properties to be " +"defined: %s" +msgstr "" +"Die Verschlüsselung/Signierung der Firmware erfordert die Festlegung der " +"folgenden Eigenschaften: %s" + +#: commands/service_debug.go:40 +msgid "First message must contain debug request, not data" +msgstr "" +"Die erste Nachricht muss eine Debug-Anforderung enthalten, keine Daten." + +#: internal/cli/arguments/arguments.go:45 +msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" +msgstr "Attribut %[1]s ist in Verbindung mit %[2]s vorgeschrieben." + +#: internal/cli/usage.go:26 +msgid "Flags:" +msgstr "Attribute:" + +#: internal/cli/arguments/pre_post_script.go:38 +msgid "" +"Force run of post-install scripts (if the CLI is not running interactively)." +msgstr "" +"Ausführung der Post-Install-Scripts erzwingen (wenn die CLI nicht interaktiv" +" läuft)" + +#: internal/cli/arguments/pre_post_script.go:40 +msgid "" +"Force run of pre-uninstall scripts (if the CLI is not running " +"interactively)." +msgstr "" +"Ausführung der Pre-Uninstall-Scripts erzwingen (wenn die CLI nicht " +"interaktiv läuft)" + +#: internal/cli/arguments/pre_post_script.go:39 +msgid "" +"Force skip of post-install scripts (if the CLI is running interactively)." +msgstr "" +"Ausführung der Post-Install-Scripts überspringen (wenn die CLI nicht " +"interaktiv läuft)" + +#: internal/cli/arguments/pre_post_script.go:41 +msgid "" +"Force skip of pre-uninstall scripts (if the CLI is running interactively)." +msgstr "" +"Ausführung der Pre-Uninstall-Scripts überspringen (wenn die CLI nicht " +"interaktiv läuft)" + +#: commands/cmderrors/cmderrors.go:839 +msgid "Found %d platforms matching \"%s\": %s" +msgstr "%d Platformen passend zu \"%s\":%s gefunden" + +#: internal/cli/arguments/fqbn.go:39 +msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" +msgstr "Vollständig qualifizierter Platinenname, z.B.: arduino:avr:uno" + +#: commands/service_debug_run.go:188 +msgid "GDB server '%s' is not supported" +msgstr "GDB-Server '%s' wird nicht unterstützt" + +#: internal/cli/generatedocs/generatedocs.go:38 +#: internal/cli/generatedocs/generatedocs.go:39 +msgid "Generates bash completion and command manpages." +msgstr "Generiert Bash-Komplettierungen und Manpages für die Befehle" + +#: internal/cli/completion/completion.go:38 +msgid "Generates completion scripts" +msgstr "Erzeugt Komplettierungs-Skripte" + +#: internal/cli/completion/completion.go:39 +msgid "Generates completion scripts for various shells" +msgstr "Erzeugt Komplettierungs-Skripte für verschiedene Shells" + +#: internal/arduino/builder/builder.go:333 +msgid "Generating function prototypes..." +msgstr "Funktionsprototypen werden generiert ..." + +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 +msgid "Global Flags:" +msgstr "Globale Attribute:" + +#: internal/arduino/builder/sizer.go:164 +msgid "" +"Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " +"bytes for local variables. Maximum is %[2]s bytes." +msgstr "" +"Globale Variablen verwenden %[1]s Bytes (%[3]s%%) des dynamischen Speichers," +" %[4]s Bytes für lokale Variablen verbleiben. Das Maximum sind %[2]s Bytes." + +#: internal/arduino/builder/sizer.go:170 +msgid "Global variables use %[1]s bytes of dynamic memory." +msgstr "Globale Variablen verwenden %[1]s Bytes des dynamischen Speichers." + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 +msgid "ID" +msgstr "ID" + +#: internal/cli/board/details.go:111 +msgid "Id" +msgstr "Id" + +#: internal/cli/board/details.go:154 +msgid "Identification properties:" +msgstr "Identifikationseigenschaften:" + +#: internal/cli/compile/compile.go:128 +msgid "If set built binaries will be exported to the sketch folder." +msgstr "" +"Wenn gesetzt werden die erzeugten Binärdateien in das Sketch-Verzeichnis " +"exportiert." + +#: internal/cli/core/list.go:46 +msgid "" +"If set return all installable and installed cores, including manually " +"installed." +msgstr "" +"Wenn gesetzt gib alle installierten und installierbaren Kerne inklusive der " +"selbst installierten zurück." + +#: internal/cli/lib/list.go:55 +msgid "Include built-in libraries (from platforms and IDE) in listing." +msgstr "" +"Eingebaute Bibliotheken (von Plattformen und IDE) in die Auflistung " +"einbeziehen." + +#: internal/cli/sketch/archive.go:51 +msgid "Includes %s directory in the archive." +msgstr "Verzeichnis %s in das Archiv einbinden" + +#: internal/cli/lib/install.go:66 +msgid "Install libraries in the IDE-Builtin directory" +msgstr "Bibliotheken in das IDE-Standardverzeichnis installieren" + +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 +msgid "Installed" +msgstr "Installiert" + +#: commands/service_library_install.go:200 +msgid "Installed %s" +msgstr "%s installiert" + +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 +msgid "Installing %s" +msgstr "%s wird installiert" + +#: commands/instances.go:398 +msgid "Installing library %s" +msgstr "Bibliothek %s wird installiert" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 +msgid "Installing platform %s" +msgstr "Plattform %s wird installiert" + +#: internal/arduino/cores/packagemanager/profiles.go:185 +msgid "Installing tool %s" +msgstr "Werkzeug %s wird installiert" + +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 +msgid "Installs one or more cores and corresponding tool dependencies." +msgstr "" +"Installiert einen oder mehrere Kerne und die entsprechenden " +"Werkzeugabhängigkeiten." + +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 +msgid "Installs one or more specified libraries into the system." +msgstr "Installiert eine oder mehrere angegebene Bibliotheken in das System." + +#: internal/arduino/builder/internal/detector/detector.go:394 +msgid "Internal error in cache" +msgstr "Interner Fehler im Cache" + +#: commands/cmderrors/cmderrors.go:377 +msgid "Invalid '%[1]s' property: %[2]s" +msgstr "Ungültige '%[1]s' Eigenschaft: %[2]s" + +#: commands/cmderrors/cmderrors.go:60 +msgid "Invalid FQBN" +msgstr "Ungültiger FQBN" + +#: internal/cli/daemon/daemon.go:161 +msgid "Invalid TCP address: port is missing" +msgstr "Ungültige TCP-Adresse: Port fehlt" + +#: commands/cmderrors/cmderrors.go:78 +msgid "Invalid URL" +msgstr "Ungültige URL" + +#: commands/instances.go:186 +msgid "Invalid additional URL: %v" +msgstr "Ungültige zusätzliche URL: %v" + +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "" + +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 +msgid "Invalid argument passed: %v" +msgstr "Ungültiges Argument übergeben: %v" + +#: commands/service_compile.go:270 +msgid "Invalid build properties" +msgstr "Ungültige Build-Eigenschaften" + +#: internal/arduino/builder/sizer.go:250 +msgid "Invalid data size regexp: %s" +msgstr "Ungültige Datengröße regexp: %s" + +#: internal/arduino/builder/sizer.go:256 +msgid "Invalid eeprom size regexp: %s" +msgstr "Ungültige EEPROM-Größe: %s" + +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 +msgid "Invalid instance" +msgstr "Ungültige Instanz" + +#: internal/cli/core/upgrade.go:114 +msgid "Invalid item %s" +msgstr "Ungültiges Element %s" + +#: commands/cmderrors/cmderrors.go:96 +msgid "Invalid library" +msgstr "Ungültige Bibliothek" + +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "" + +#: internal/cli/configuration/network.go:66 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "Ungültiger network.proxy '%[1]s':%[2]s" + +#: internal/cli/cli.go:219 +msgid "Invalid output format: %s" +msgstr "Ungültiges Ausgabeformat: %s" + +#: commands/instances.go:581 +msgid "Invalid package index in %s" +msgstr "Ungültiger Paketindex in %s" + +#: internal/cli/core/uninstall.go:63 +msgid "Invalid parameter %s: version not allowed" +msgstr "Ungültiger Parameter %s: Version nicht erlaubt" + +#: commands/service_board_list.go:81 +msgid "Invalid pid value: '%s'" +msgstr "Ungültiger pid-Wert: '%s'" + +#: commands/cmderrors/cmderrors.go:220 +msgid "Invalid profile" +msgstr "Ungültiges Profil" + +#: commands/service_monitor.go:269 +msgid "Invalid recipe in platform.txt" +msgstr "Ungültige Vorlage in platform.txt" + +#: internal/arduino/builder/sizer.go:240 +msgid "Invalid size regexp: %s" +msgstr "Ungültige Größe regexp: %s" + +#: commands/cmderrors/cmderrors.go:114 +msgid "Invalid version" +msgstr "Ungültige Version" + +#: commands/service_board_list.go:78 +msgid "Invalid vid value: '%s'" +msgstr "Ungültiger vid-Wert:'%s'" + +#: internal/cli/compile/compile.go:125 +msgid "" +"Just produce the compilation database, without actually compiling. All build" +" commands are skipped except pre* hooks." +msgstr "" +"Nur die Kompilier-Datenbank erzeugen ohne zu kompilieren. Alle Build-Befehle" +" werden übersprungen außer pre* " + +#: internal/cli/lib/list.go:39 +msgid "LIBNAME" +msgstr "BIBLIOTHEKSNAME" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "LIBRARY" +msgstr "BIBLIOTHEK" + +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 +msgid "LIBRARY_NAME" +msgstr "BIBLIOTHEKSNAME" + +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 +msgid "Latest" +msgstr "Neueste" + +#: internal/arduino/builder/libraries.go:91 +msgid "Library %[1]s has been declared precompiled:" +msgstr "Bibliothek %[1]s wurde als vorkompiliert angegeben:" + +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 +msgid "" +"Library %[1]s is already installed, but with a different version: %[2]s" +msgstr "" +"Bibliothek %[1]s ist bereits installiert, aber mit einer anderen Version: " +"%[2]s" + +#: commands/service_library_upgrade.go:137 +msgid "Library %s is already at the latest version" +msgstr "Bibliothek %s ist bereits die neueste Version" + +#: commands/service_library_uninstall.go:63 +msgid "Library %s is not installed" +msgstr "Bibliothek %s ist nicht installiert" + +#: commands/instances.go:377 +msgid "Library %s not found" +msgstr "Bibliothek %s nicht gefunden" + +#: commands/cmderrors/cmderrors.go:445 +msgid "Library '%s' not found" +msgstr "Bibliothek '%s' nicht gefunden" + +#: internal/arduino/builder/internal/detector/detector.go:471 +msgid "" +"Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." +msgstr "" +"Die Bibliothek kann nicht die Verzeichnisse '%[1]s' und '%[2]s' gleichzeitig" +" verwenden. Prüfe nochmal in '%[3]s'" + +#: commands/cmderrors/cmderrors.go:574 +msgid "Library install failed" +msgstr "Installation der Bibliothek fehlgeschlagen" + +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 +msgid "Library installed" +msgstr "Bibliothek installiert" + +#: internal/cli/lib/search.go:205 +msgid "License: %s" +msgstr "Lizenz: %s" + +#: internal/arduino/builder/builder.go:438 +msgid "Linking everything together..." +msgstr "Alles zusammenlinken..." + +#: internal/cli/board/listall.go:40 +msgid "" +"List all boards that have the support platform installed. You can search\n" +"for a specific board if you specify the board name" +msgstr "" +"Lists alle Boards mit installierter Support-Plattform. Du kannst nach einem " +"bestimmten Board suchen, indem du den Namen angibst" + +#: internal/cli/board/listall.go:39 +msgid "List all known boards and their corresponding FQBN." +msgstr "Liste alle bekannte Boards und ihre respektive FQBNs auf" + +#: internal/cli/board/list.go:45 +msgid "List connected boards." +msgstr "Verbundene Platinen auflisten." + +#: internal/cli/arguments/fqbn.go:44 +msgid "" +"List of board options separated by commas. Or can be used multiple times for" +" multiple options." +msgstr "" +"Komma-getrennte Liste der Boardoptionen. Kann auch mehrfach für mehrere " +"Optinen verwendet werden." + +#: internal/cli/compile/compile.go:103 +msgid "" +"List of custom build properties separated by commas. Or can be used multiple" +" times for multiple properties." +msgstr "" +"Komma-getrennte Liste der benutzereigenen Build-Optionen. Kann auch mehrfach" +" für mehrere Optinen verwendet werden." + +#: internal/cli/lib/list.go:57 +msgid "List updatable libraries." +msgstr "Aktualisierbare Bibliotheken auflisten." + +#: internal/cli/core/list.go:45 +msgid "List updatable platforms." +msgstr "Aktualisierbare Plattformen auflisten." + +#: internal/cli/board/board.go:32 +msgid "Lists all connected boards." +msgstr "Listet alle verbundenen Platinen auf." + +#: internal/cli/outdated/outdated.go:41 +msgid "Lists cores and libraries that can be upgraded" +msgstr "Auflisten der upgradebaren Cores und Bibliotheken" + +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 +msgid "Loading index file: %v" +msgstr "Indexdatei wird geladen: %v" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 +msgid "Location" +msgstr "Ort" + +#: internal/arduino/builder/sizer.go:205 +msgid "Low memory available, stability problems may occur." +msgstr "" +"Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme auftreten." + +#: internal/cli/lib/search.go:200 +msgid "Maintainer: %s" +msgstr "Betreuer %s" + +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 +msgid "Max time to wait for port discovery, e.g.: 30s, 1m" +msgstr "Maximale Wartezeit für Portermittlung z.B. 30s, 1m" + +#: internal/cli/cli.go:170 +msgid "" +"Messages with this level and above will be logged. Valid levels are: %s" +msgstr "" +"Nachrichten mit diesem Level oder drüber werden geloggt. Mögliche Level " +"sind: %s" + +#: internal/arduino/builder/internal/detector/detector.go:466 +msgid "Missing '%[1]s' from library in %[2]s" +msgstr "'%[1]s' aus der Bibliothek in %[2]s fehlt" + +#: commands/cmderrors/cmderrors.go:169 +msgid "Missing FQBN (Fully Qualified Board Name)" +msgstr "Fehlender FQBN (Fully Qualified Board Name)" + +#: commands/cmderrors/cmderrors.go:260 +msgid "Missing port" +msgstr "Fehlender Port" + +#: commands/cmderrors/cmderrors.go:236 +msgid "Missing port address" +msgstr "Fehlende Port-Adresse" + +#: commands/cmderrors/cmderrors.go:248 +msgid "Missing port protocol" +msgstr "Fehlendes Port-Protokoll" + +#: commands/cmderrors/cmderrors.go:286 +msgid "Missing programmer" +msgstr "Fehlender Programmer" + +#: internal/cli/upload/upload.go:159 +msgid "Missing required upload field: %s" +msgstr "Fehlendes benötigtes Upload-Feld: %s" + +#: internal/arduino/builder/sizer.go:244 +msgid "Missing size regexp" +msgstr "Fehlende Größe regexp" + +#: commands/cmderrors/cmderrors.go:497 +msgid "Missing sketch path" +msgstr "Fehlender Sketch-Pfad" + +#: commands/cmderrors/cmderrors.go:358 +msgid "Monitor '%s' not found" +msgstr "Monitor '%s' wurde nicht gefunden" + +#: internal/cli/monitor/monitor.go:200 +msgid "Monitor port settings:" +msgstr "Porteinstellunegn für Monitor:" + +#: internal/arduino/builder/internal/detector/detector.go:156 +msgid "Multiple libraries were found for \"%[1]s\"" +msgstr "Mehrere Bibliotheken wurden für \"%[1]s\" gefunden" + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 +msgid "Name" +msgstr "Name" + +#: internal/cli/lib/search.go:179 +msgid "Name: \"%s\"" +msgstr "Name '%s'" + +#: internal/cli/upload/upload.go:234 +msgid "New upload port: %[1]s (%[2]s)" +msgstr "Neuer Upload-Port: %[1]s (%[2]s)" + +#: internal/cli/board/list.go:130 +msgid "No boards found." +msgstr "Keine Platinen gefunden." + +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "" + +#: internal/cli/lib/examples.go:108 +msgid "No libraries found." +msgstr "Keine Bibliotheken gefunden." + +#: internal/cli/lib/list.go:130 +msgid "No libraries installed." +msgstr "Keine Bibliotheken installiert." + +#: internal/cli/lib/search.go:168 +msgid "No libraries matching your search." +msgstr "Keine Bibliotheken stimmen mit Ihrer Suche überein." + +#: internal/cli/lib/search.go:174 +msgid "" +"No libraries matching your search.\n" +"Did you mean...\n" +msgstr "" +"Keine Bibliotheken stimmen mit Ihrer Suche überein.\n" +"Meinten Sie ...\n" + +#: internal/cli/lib/list.go:128 +msgid "No libraries update is available." +msgstr "Kein Bibliotheksupdate verfügbar" + +#: commands/cmderrors/cmderrors.go:274 +msgid "No monitor available for the port protocol %s" +msgstr "Kein Monitor für das Port-Protokoll %s verfügbar" + +#: internal/cli/outdated/outdated.go:95 +msgid "No outdated platforms or libraries found." +msgstr "Keine veralteten Plattformen oder Bibliotheken gefunden" + +#: internal/cli/core/list.go:114 +msgid "No platforms installed." +msgstr "Keine Plattformen installiert." + +#: internal/cli/core/search.go:113 +msgid "No platforms matching your search." +msgstr "Die Suche fand keine passenden Plattformen" + +#: commands/service_upload.go:522 +msgid "No upload port found, using %s as fallback" +msgstr "Kein Upload-Port gefunden, verwende %s stattdessen" + +#: commands/cmderrors/cmderrors.go:464 +msgid "No valid dependencies solution found" +msgstr "Keine gültige Auflösung der Abhängigkeiten gefunden" + +#: internal/arduino/builder/sizer.go:195 +msgid "Not enough memory; see %[1]s for tips on reducing your footprint." +msgstr "" +"Nicht genug Arbeitsspeicher; unter %[1]s finden sich Hinweise, um die Größe " +"zu verringern." + +#: internal/arduino/builder/internal/detector/detector.go:159 +msgid "Not used: %[1]s" +msgstr "Nicht benutzt: %[1]s" + +#: internal/cli/board/details.go:187 +msgid "OS:" +msgstr "BS:" + +#: internal/cli/board/details.go:145 +msgid "Official Arduino board:" +msgstr "Offizielles Arduino-Board:" + +#: internal/cli/lib/search.go:98 +msgid "" +"Omit library details far all versions except the latest (produce a more " +"compact JSON output)." +msgstr "" +"Alle Bibliotheksdetails überspringen, außer für die aktuelle Version\n" +"(Die JSON-Ausgabe wird kompakter)." + +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 +msgid "Open a communication port with a board." +msgstr "Einen Kommunikations-Port mit einer Platine öffnen." + +#: internal/cli/board/details.go:200 +msgid "Option:" +msgstr "Option:" + +#: internal/cli/compile/compile.go:113 +msgid "" +"Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." +msgstr "" +"Optional, kann %s sein. Verwendet, um den Warnungslevel für gcc festzulegen " +"(-W Option)" + +#: internal/cli/compile/compile.go:126 +msgid "Optional, cleanup the build folder and do not use any cached build." +msgstr "" +"Optional, leere den Build-Ordner und verwende keinen zwischengespeicherten " +"Build." + +#: internal/cli/compile/compile.go:123 +msgid "" +"Optional, optimize compile output for debugging, rather than for release." +msgstr "" +"Optional, optimiere das Kompilat zum Debuggen, nicht für den " +"Produktiveinsatz" + +#: internal/cli/compile/compile.go:115 +msgid "Optional, suppresses almost every output." +msgstr "Optional, vermeidet fast alle Ausgaben" + +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 +msgid "Optional, turns on verbose mode." +msgstr "Optional, schaltet umfangreiche Ausgaben ein" + +#: internal/cli/compile/compile.go:129 +msgid "" +"Optional. Path to a .json file that contains a set of replacements of the " +"sketch source code." +msgstr "" +"Optional, Pfad zu einer .json-Datei mit Ersetzungen für den Sketch-Quellcode" + +#: internal/cli/compile/compile.go:105 +msgid "" +"Override a build property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Übersteuert eine Build-Option mit einem benutzerdefinierten Wert. Kann " +"mehrfach für mehrere Optionen verwendet werden." + +#: internal/cli/config/init.go:62 +msgid "Overwrite existing config file." +msgstr "Überschreibt bestehende Konfigurationsdatei." + +#: internal/cli/sketch/archive.go:52 +msgid "Overwrites an already existing archive" +msgstr "Überschreibt ein bestehendes Archiv" + +#: internal/cli/sketch/new.go:46 +msgid "Overwrites an existing .ino sketch." +msgstr "Überschreibt einen bestehenden .ino-Sketch." + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "PACKAGER" +msgstr "PAKETIERER" + +#: internal/cli/board/details.go:165 +msgid "Package URL:" +msgstr "Paket-URL:" + +#: internal/cli/board/details.go:164 +msgid "Package maintainer:" +msgstr "Paket-Betreuer" + +#: internal/cli/board/details.go:163 +msgid "Package name:" +msgstr "Paketname:" + +#: internal/cli/board/details.go:167 +msgid "Package online help:" +msgstr "Online-Hilfe für das Paket:" + +#: internal/cli/board/details.go:166 +msgid "Package website:" +msgstr "Webseite für das Paket:" + +#: internal/cli/lib/search.go:202 +msgid "Paragraph: %s" +msgstr "Absatz: %s" + +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 +msgid "Path" +msgstr "Pfad" + +#: internal/cli/compile/compile.go:122 +msgid "" +"Path to a collection of libraries. Can be used multiple times or entries can" +" be comma separated." +msgstr "" +"Pfad zu einer Bibliothekssammlung. Kann mehrfach verwendet werden oder die " +"Einträge können durch Kommata getrennt werden." + +#: internal/cli/compile/compile.go:120 +msgid "" +"Path to a single library’s root folder. Can be used multiple times or " +"entries can be comma separated." +msgstr "" +"Pfad zum Wurzelverzeichnis einer einzelnen Bibliothek. Kann mehrfach " +"verwendet werden oder die Einträge können durch Kommata getrennt werden." + +#: internal/cli/cli.go:172 +msgid "Path to the file where logs will be written." +msgstr "Pfad in welchem die Log-Dateien abgelegt werden sollen." + +#: internal/cli/compile/compile.go:101 +msgid "" +"Path where to save compiled files. If omitted, a directory will be created " +"in the default temporary path of your OS." +msgstr "" +"Pfad für die kompilierten Dateien. Wenn nicht festgelegt, dann wird ein " +"Verzeichnis im Standard-Temp-Verzeichnis des Betriebssystems erstellt." + +#: commands/service_upload.go:503 +msgid "Performing 1200-bps touch reset on serial port %s" +msgstr "Ein 1200bps-Reset wird auf dem seriellen Port %s durchgeführt" + +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 +msgid "Platform %s already installed" +msgstr "Plattform %s bereits installiert" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 +msgid "Platform %s installed" +msgstr "Plattform %s installiert" + +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 +msgid "" +"Platform %s is not found in any known index\n" +"Maybe you need to add a 3rd party URL?" +msgstr "" +"Plattform %s in keinem bekannten Index gefunden. Eventuell muss eine 3rd-" +"Party URL hinzugfügt werden?" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 +msgid "Platform %s uninstalled" +msgstr "Plattform %s deinstalliert" + +#: commands/cmderrors/cmderrors.go:482 +msgid "Platform '%s' is already at the latest version" +msgstr "Plattform '%s' ist bereits aktuell" + +#: commands/cmderrors/cmderrors.go:406 +msgid "Platform '%s' not found" +msgstr "Plattform '%s' nicht gefunden" + +#: internal/cli/board/search.go:85 +msgid "Platform ID" +msgstr "Plattform ID" + +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 +msgid "Platform ID is not correct" +msgstr "Plattform ID ist nicht korrekt" + +#: internal/cli/board/details.go:173 +msgid "Platform URL:" +msgstr "Plattform-URL:" + +#: internal/cli/board/details.go:172 +msgid "Platform architecture:" +msgstr "Plattformarchitektur:" + +#: internal/cli/board/details.go:171 +msgid "Platform category:" +msgstr "Plattformkategorie:" + +#: internal/cli/board/details.go:178 +msgid "Platform checksum:" +msgstr "Plattform-Prüfsumme:" + +#: internal/cli/board/details.go:174 +msgid "Platform file name:" +msgstr "Plattformdateiname:" + +#: internal/cli/board/details.go:170 +msgid "Platform name:" +msgstr "Plattformname:" + +#: internal/cli/board/details.go:176 +msgid "Platform size (bytes):" +msgstr "Plattformgröße (Bytes):" + +#: commands/cmderrors/cmderrors.go:153 +msgid "" +"Please specify an FQBN. Multiple possible boards detected on port %[1]s with" +" protocol %[2]s" +msgstr "" +"Bitte gib ein FQBN an. Mehrere mögliche Boards wurden an Port %[1]s mit " +"Protokoll %[2]s entdeckt" + +#: commands/cmderrors/cmderrors.go:133 +msgid "" +"Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" +" identified" +msgstr "" +"Bitte gib ein FQBN an. Das Board an Port %[1]s mit Protokoll %[2]s kann " +"nicht identifiziert werden" + +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +msgid "Port" +msgstr "Port" + +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 +msgid "Port closed: %v" +msgstr "Port geschlossen: %v" + +#: commands/cmderrors/cmderrors.go:668 +msgid "Port monitor error" +msgstr "Port-Monitor-Fehler" + +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 +msgid "Precompiled library in \"%[1]s\" not found" +msgstr "Vorkompilierte Bibliothek in \"%[1]s\" nicht gefunden" + +#: internal/cli/board/details.go:42 +msgid "Print details about a board." +msgstr "Details zu dem Board ausgeben" + +#: internal/cli/compile/compile.go:97 +msgid "Print preprocessed code to stdout instead of compiling." +msgstr "Gebe den vorverarbeiteten Code aus anstatt zu kompilieren." + +#: internal/cli/cli.go:166 internal/cli/cli.go:168 +msgid "Print the logs on the standard output." +msgstr "Gebe die logs auf der Standardausgabe aus." + +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + +#: internal/cli/config/dump.go:31 +msgid "Prints the current configuration" +msgstr "Gibt die aktuelle Konfiguration aus." + +#: internal/cli/config/dump.go:32 +msgid "Prints the current configuration." +msgstr "Gibt die aktuelle Konfiguration aus." + +#: commands/cmderrors/cmderrors.go:202 +msgid "Profile '%s' not found" +msgstr "Profil '%s' nicht gefunden" + +#: commands/cmderrors/cmderrors.go:339 +msgid "Programmer '%s' not found" +msgstr "Programmer '%s' nicht gefunden" + +#: internal/cli/board/details.go:111 +msgid "Programmer name" +msgstr "Programmer Name" + +#: internal/cli/arguments/programmer.go:35 +msgid "Programmer to use, e.g: atmel_ice" +msgstr "Zu verwendender Programmer, z.B. atmel_ice" + +#: internal/cli/board/details.go:216 +msgid "Programmers:" +msgstr "Programmers:" + +#: commands/cmderrors/cmderrors.go:391 +msgid "Property '%s' is undefined" +msgstr "Eigenschaft '%s' ist nicht definiert" + +#: internal/cli/board/list.go:140 +msgid "Protocol" +msgstr "Protokoll" + +#: internal/cli/lib/search.go:212 +msgid "Provides includes: %s" +msgstr "Stellt die Includes %s zur Verfügung" + +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 +msgid "Removes one or more values from a setting." +msgstr "Entfernt einen oder mehrere Werte aus der Einstellung." + +#: commands/service_library_install.go:187 +msgid "Replacing %[1]s with %[2]s" +msgstr "Ersetze %[1]s durch %[2]s " + +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 +msgid "Replacing platform %[1]s with %[2]s" +msgstr "Ersetze die Plattform durch %[1]sdurch %[2]s" + +#: internal/cli/board/details.go:184 +msgid "Required tool:" +msgstr "Erforderliches Werkzeug:" + +#: internal/cli/monitor/monitor.go:75 +msgid "Run in silent mode, show only monitor input and output." +msgstr "Starten im stillen Modus, zeige nur die Monitorein- und -ausgaben" + +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "" + +#: internal/arduino/builder/core.go:42 +msgid "Running normal build of the core..." +msgstr "Starte normalen Kern-Build..." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 +msgid "Running pre_uninstall script." +msgstr "Starte das pre_uninstall Skript" + +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "SUCH_TERM" + +#: internal/cli/debug/debug.go:226 +msgid "SVD file path" +msgstr "SVD Verzeichnis" + +#: internal/cli/compile/compile.go:99 +msgid "Save build artifacts in this directory." +msgstr "Build-Artifakte in diesem Verzeichnis speichern." + +#: internal/cli/board/search.go:39 +msgid "Search for a board in the Boards Manager using the specified keywords." +msgstr "" +"Suche nach einem Board im Board-Manager mit den gegebenen Suchbegriffen." + +#: internal/cli/board/search.go:38 +msgid "Search for a board in the Boards Manager." +msgstr "Suche nach einem Board im Board-Manager" + +#: internal/cli/core/search.go:41 +msgid "Search for a core in Boards Manager using the specified keywords." +msgstr "" +"Suche nach einem Kern im Board-Manager mit den gegebenen Suchbegriffen." + +#: internal/cli/core/search.go:40 +msgid "Search for a core in Boards Manager." +msgstr "Suche nach einem Kern im Board-Manager" + +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" +"Suche nach Bibliotheken, die keinem oder mehr Suchbegriffen entsprechen.\n" +"\n" +"Bei allen Suchvorgängen wird die Groß-/Kleinschreibung nicht beachtet. Bei mehreren Suchbegriffen werden nur Bibliotheken zurückgegeben, die mit allen Begriffen übereinstimmen.\n" +"\n" +"Suchbegriffe, die nicht mit der unten beschriebenen QV-Syntax übereinstimmen, sind einfache Suchanfragen\n" +"Begriffe und sucht nach Bibliotheken, die den Begriff an einer beliebigen Stelle in folgenden Feldern enthalten:\n" +"- Autor\n" +"- Name\n" +"- Absatz\n" +"- stellt zur Verfügung\n" +"- Satz\n" +"\n" +"Eine spezielle Syntax namens Qualifier-Value (QV) gibt an, dass ein Suchbegriff nur mit einem Feld jedes Bibliotheksindexeintrags verglichen werden soll. Die Syntax verwendet den Namen eines Indexfelds (ohne Berücksichtigung der Groß-/Kleinschreibung), ein Gleichheitszeichen (=)\n" +"oder ein Doppelpunkt (:) und ein Wert, z.B. 'name=ArduinoJson' oder 'provides:tinyusb.h'.\n" +"\n" +"QV-Suchbegriffe, die ein Doppelpunkttrennzeichen verwenden, finden alle Bibliotheken mit dem Wert an einer beliebigen Stelle im benannten Feld und QV-Suchbegriffe, die ein Gleichheitszeichen verwenden finden nur die Bibliotheken, die genau den angegebenen Wert im benannten Feld haben.\n" +"QV-Suchbegriffe können eingebettete Leerzeichen mit doppelten Anführungszeichen (\") um den Wert oder den gesamten Ausdruck enthalten, z.B. 'category=\"Data Processing\"' und '\"category=Data Processing“' sind gleichwertig. Ein QV-Begriff kann ein doppelte Anführungszeichen enthalten, indem ein Backslash (\\) vorangestellt wird.\n" +"\n" +"HINWEIS: QV-Suchbegriffe mit doppelten Anführungszeichen oder Backslash-Zeichen die als Befehlszeilenargumente übergeben werden, erfordern möglicherweise Anführungszeichen oder Escapezeichen, um zu verhindern dass die Shell diese Zeichen interpretiert.\n" +"\n" +"Zusätzlich zu den oben aufgeführten Feldern können QV-Begriffe die folgenden Merkmale verwenden:\n" +"- Architekturen\n" +"- Kategorie\n" +"- Abhängigkeiten\n" +"- Lizenz\n" +"- Betreuer\n" +"- Typen\n" +"- Ausführung\n" +"- Webseite" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "" +"Sucht nach einer oder mehrerer Bibliottheken die zu einer Suchanfrage " +"passen." + +#: internal/cli/lib/search.go:201 +msgid "Sentence: %s" +msgstr "Satz: %s" + +#: internal/cli/debug/debug.go:234 +msgid "Server path" +msgstr "Server-Pfad" + +#: internal/arduino/httpclient/httpclient.go:61 +msgid "Server responded with: %s" +msgstr "Server hat mit: %s geantwortet" + +#: internal/cli/debug/debug.go:233 +msgid "Server type" +msgstr "Server-Typ" + +#: internal/cli/upload/upload.go:80 +msgid "Set a value for a field required to upload." +msgstr "Setze einen Wert für ein zum Upload benötigtes Feld." + +#: internal/cli/monitor/monitor.go:72 +msgid "Set terminal in raw mode (unbuffered)." +msgstr "Aktiviere den Raw-Modus im Terminal (ungepuffert)" + +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 +msgid "Sets a setting value." +msgstr "Legt einen Einstellungswert fest." + +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 +msgid "Sets where to save the configuration file." +msgstr "Legt fest, wo die Konfigurationsdatei gespeichert werden soll." + +#: internal/cli/monitor/monitor.go:297 +msgid "Setting" +msgstr "Einstellung" + +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" + +#: internal/cli/core/search.go:48 +msgid "Show all available core versions." +msgstr "Zeige alle verfügbare Core-Versionen." + +#: internal/cli/monitor/monitor.go:73 +msgid "Show all the settings of the communication port." +msgstr "Zeige alle Einstellungen des Kommunikations-Ports." + +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 +msgid "Show also boards marked as 'hidden' in the platform" +msgstr "" +"Zeige auch Boards an, die in der Plattform als \"versteckt\" markiert sind" + +#: internal/cli/arguments/show_properties.go:60 +msgid "" +"Show build properties. The properties are expanded, use \"--show-" +"properties=unexpanded\" if you want them exactly as they are defined." +msgstr "" +"Build-Eigenschaften anzeigen. Die Eigenschaften werden erweitert. Verwende " +"\"--show-properties=unexpanded\", wenn du sie genau so haben willst, wie sie" +" definiert sind." + +#: internal/cli/board/details.go:52 +msgid "Show full board details" +msgstr "Vollständige Platinendetails anzeigen" + +#: internal/cli/board/details.go:43 +msgid "" +"Show information about a board, in particular if the board has options to be" +" specified in the FQBN." +msgstr "" +"Zeige Informationen über ein Board, im Besonderen wenn das Board die Option " +"hat, im FQBN angegeben zu werden." + +#: internal/cli/lib/search.go:97 +msgid "Show library names only." +msgstr "Nur Namen der Bibliotheken anzeigen." + +#: internal/cli/board/details.go:53 +msgid "Show list of available programmers" +msgstr "Zeige alle verfügbare Programmer" + +#: internal/cli/debug/debug.go:68 +msgid "" +"Show metadata about the debug session instead of starting the debugger." +msgstr "" +"Zeige Metadaten über die Debug-Sitzung an, anstatt den Debugger zu starten." + +#: internal/cli/update/update.go:45 +msgid "Show outdated cores and libraries after index update" +msgstr "Veraltete Kerne und Bibliotheken nach Indexaktualisierung anzeigen" + +#: internal/cli/lib/list.go:40 +msgid "Shows a list of installed libraries." +msgstr "Zeige die Liste mit den installierten Bibliotheken." + +#: internal/cli/lib/list.go:41 +msgid "" +"Shows a list of installed libraries.\n" +"\n" +"If the LIBNAME parameter is specified the listing is limited to that specific\n" +"library. By default the libraries provided as built-in by platforms/core are\n" +"not listed, they can be listed by adding the --all flag." +msgstr "" +"Zeigt eine Liste der installierten Bibliotheken an.\n" +"\n" +"Wenn der Parameter LIBNAME angegeben wird, beschränkt sich die Liste auf diese bestimmte Bibliothek. Standardmäßig werden die Bibliotheken, die von platforms/core bereitgestellt werden, nicht aufgelistet; sie können mit dem Flag --all aufgelistet werden." + +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 +msgid "Shows the list of installed platforms." +msgstr "Zeigt die Liste der installierten Plattformen an." + +#: internal/cli/lib/examples.go:44 +msgid "Shows the list of the examples for libraries." +msgstr "Zeigt die Liste der Beispiele für Bibliotheken an." + +#: internal/cli/lib/examples.go:45 +msgid "" +"Shows the list of the examples for libraries. A name may be given as " +"argument to search a specific library." +msgstr "" +"Zeigt die Liste der Beispiele für Bibliotheken an. Um eine bestimmte " +"Bibliothek zu suchen, kann ein Name als Argument angegeben werden." + +#: internal/cli/version/version.go:37 +msgid "" +"Shows the version number of Arduino CLI which is installed on your system." +msgstr "" +"Zeigt die Versionsnummer des Arduino CLI an, welchese auf deinem System " +"installiert ist." + +#: internal/cli/version/version.go:36 +msgid "Shows version number of Arduino CLI." +msgstr "Zeigt die Versionsnummer des Arduino CLI an." + +#: internal/cli/board/details.go:189 +msgid "Size (bytes):" +msgstr "Größe (Bytes):" + +#: commands/service_compile.go:274 +msgid "" +"Sketch cannot be located in build path. Please specify a different build " +"path" +msgstr "" +"Sketch kann nicht im Build-Pfad gefunden werden. Bitte gib einen anderen " +"Build-Pfad an" + +#: internal/cli/sketch/new.go:98 +msgid "Sketch created in: %s" +msgstr "Sketch erstellt in: %s" + +#: internal/cli/arguments/profiles.go:33 +msgid "Sketch profile to use" +msgstr "Zu verwendendes Sketch-Profil" + +#: internal/arduino/builder/sizer.go:190 +msgid "Sketch too big; see %[1]s for tips on reducing it." +msgstr "" +"Der Sketch ist zu groß; unter %[1]s finden sich Hinweise, um die Größe zu " +"verringern." + +#: internal/arduino/builder/sizer.go:158 +msgid "" +"Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" +" bytes." +msgstr "" +"Der Sketch verwendet %[1]s Bytes (%[3]s%%) des Programmspeicherplatzes. Das " +"Maximum sind %[2]s Bytes." + +#: internal/cli/feedback/warn_deprecated.go:39 +msgid "" +"Sketches with .pde extension are deprecated, please rename the following " +"files to .ino:" +msgstr "" +"Skizzen mit der Endung .pde sind veraltet, bitte benenne die folgenden " +"Dateien in .ino um:" + +#: internal/arduino/builder/linker.go:30 +msgid "Skip linking of final executable." +msgstr "Überspringe das Linken der endgültigen ausführbaren Datei." + +#: commands/service_upload.go:496 +msgid "Skipping 1200-bps touch reset: no serial port selected!" +msgstr "" +"Überspringen des 1200-bps-Touch-Resets: keine serielle Schnittstelle " +"ausgewählt!" + +#: internal/arduino/builder/archive_compiled_files.go:27 +msgid "Skipping archive creation of: %[1]s" +msgstr "Überspringe die Archiv-Erstellung von: %[1]s" + +#: internal/arduino/builder/compilation.go:183 +msgid "Skipping compile of: %[1]s" +msgstr "Überspringe die Kompilierung von: %[1]s" + +#: internal/arduino/builder/internal/detector/detector.go:414 +msgid "Skipping dependencies detection for precompiled library %[1]s" +msgstr "" +"Überspringe die Abhängigkeitserkennung für vorkompilierte Bibliotheken %[1]s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 +msgid "Skipping platform configuration." +msgstr "Überspringe die Plattformkonfiguration." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 +msgid "Skipping pre_uninstall script." +msgstr "Überspringe das pre_uninstall Skript." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 +msgid "Skipping tool configuration." +msgstr "Überspringe die Werkzeugkonfiguration." + +#: internal/arduino/builder/recipe.go:48 +msgid "Skipping: %[1]s" +msgstr "Wird übersprungen: %[1]s" + +#: commands/instances.go:634 +msgid "Some indexes could not be updated." +msgstr "Einige Indizes konnten nicht aktualisiert werden." + +#: internal/cli/core/upgrade.go:141 +msgid "Some upgrades failed, please check the output for details." +msgstr "" +"Einige Upgrades sind fehlgeschlagen, bitte überprüfe die Ausgabe für " +"Details." + +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" +msgstr "TCP-Port, der vom Daemon überwacht wird" + +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "" + +#: internal/cli/cli.go:186 +msgid "The custom config file (if not specified the default will be used)." +msgstr "" +"Die benutzerdefinierte Konfigurationsdatei (wenn nicht angegeben, wird der " +"Standardwert verwendet)." + +#: internal/cli/daemon/daemon.go:98 +msgid "The flag --debug-file must be used with --debug." +msgstr "Das Flag --debug-file muss mit --debug benutzt werden." + +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't add to it.\n" +"Maybe use '%[2]s'?" +msgstr "" +"Der Schlüssel \"%[1]v\" ist keine Liste von Teilen, er kann nicht hinzugefügt werden.\n" +"Vielleicht kann \"%[2]s\" verwendet werden?" + +#: internal/cli/config/remove.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't remove from it.\n" +"Maybe use '%[2]s'?" +msgstr "" +"Der Schlüssel \"%[1]v\" ist keine Liste von Teilen, er kann nicht entfernt werden.\n" +"Vielleicht kann \"%[2]s\" verwendet werden?" + +#: commands/cmderrors/cmderrors.go:858 +msgid "The library %s has multiple installations:" +msgstr "Die Bibliothek %s hat mehrere Installationen:" + +#: internal/cli/compile/compile.go:111 +msgid "" +"The name of the custom encryption key to use to encrypt a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" +"Der Name des benutzerdefinierten Schlüssels, der zur Verschlüsselung einer " +"Binärdatei während des Kompilierungsprozesses verwendet wird. Wird nur von " +"den Plattformen verwendet, die ihn unterstützen." + +#: internal/cli/compile/compile.go:109 +msgid "" +"The name of the custom signing key to use to sign a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" +"Der Name des benutzerdefinierten Schlüssels, der zum Signieren einer " +"Binärdatei während des Kompilierungsprozesses verwendet wird. Wird nur von " +"den Plattformen verwendet, die ihn unterstützen." + +#: internal/cli/cli.go:174 +msgid "The output format for the logs, can be: %s" +msgstr "Das Ausgabeformat für die Logs kann %s sein" + +#: internal/cli/compile/compile.go:107 +msgid "" +"The path of the dir to search for the custom keys to sign and encrypt a " +"binary. Used only by the platforms that support it." +msgstr "" +"Das Verzeichnis, in dem nach den benutzerdefinierten Schlüsseln zum " +"Signieren und Verschlüsseln einer Binärdatei gesucht wird. Wird nur von den " +"Plattformen verwendet, die dies unterstützen." + +#: internal/arduino/builder/libraries.go:151 +msgid "The platform does not support '%[1]s' for precompiled libraries." +msgstr "" +"Die Plattform unterstützt '%[1]s' für vorkompilierte Bibliotheken nicht." + +#: internal/cli/lib/upgrade.go:36 +msgid "" +"This command upgrades an installed library to the latest available version. " +"Multiple libraries can be passed separated by a space. If no arguments are " +"provided, the command will upgrade all the installed libraries where an " +"update is available." +msgstr "" +"Dieser Befehl aktualisiert eine installierte Bibliothek auf die neueste " +"verfügbare Version. Es können mehrere Bibliotheken durch ein Leerzeichen " +"getrennt übergeben werden. Wenn keine Argumente angegeben werden, " +"aktualisiert der Befehl alle installierten Bibliotheken, für die ein Update " +"verfügbar ist." + +#: internal/cli/outdated/outdated.go:42 +msgid "" +"This commands shows a list of installed cores and/or libraries\n" +"that can be upgraded. If nothing needs to be updated the output is empty." +msgstr "" +"Dieser Befehl zeigt eine Liste der installierten Kerne und/oder Bibliotheken\n" +"die aktualisiert werden können. Wenn nichts aktualisiert werden muss, ist die Ausgabe leer." + +#: internal/cli/monitor/monitor.go:76 +msgid "Timestamp each incoming line." +msgstr "Markiere jede ankommende Zeile mit einem Zeitstempel." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 +msgid "Tool %s already installed" +msgstr "Werkzeug %s bereits installiert" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 +msgid "Tool %s uninstalled" +msgstr "Werkzeug %s deinstalliert" + +#: commands/service_debug_run.go:144 +msgid "Toolchain '%s' is not supported" +msgstr "Toolchain '%s' wird nicht unterstützt" + +#: internal/cli/debug/debug.go:223 +msgid "Toolchain path" +msgstr "Toolchain-Pfad" + +#: internal/cli/debug/debug.go:224 +msgid "Toolchain prefix" +msgstr "Toolchain-Prefix" + +#: internal/cli/debug/debug.go:222 +msgid "Toolchain type" +msgstr "Toolchain-Typ" + +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 +msgid "Try running %s" +msgstr "Versuche %s zu starten" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +msgid "Turns on verbose mode." +msgstr "Schaltet den ausführlichen Modus ein." + +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +msgid "Type" +msgstr "Typ" + +#: internal/cli/lib/search.go:209 +msgid "Types: %s" +msgstr "Typen: %s" + +#: internal/cli/board/details.go:191 +msgid "URL:" +msgstr "URL:" + +#: internal/arduino/builder/core.go:165 +msgid "" +"Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" +msgstr "" +"Der Kern kann nicht gecached werden. Bitte sag den %[1]s Maintainern, dass " +"sie %[2]sfolgen sollen. " + +#: internal/cli/configuration/configuration.go:86 +msgid "Unable to get Documents Folder: %v" +msgstr "Der Dokumentenordner kann nicht abgerufen werden: %v" + +#: internal/cli/configuration/configuration.go:61 +msgid "Unable to get Local App Data Folder: %v" +msgstr "Lokaler App-Datenordner kann nicht abgerufen werden: %v" + +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 +msgid "Unable to get user home dir: %v" +msgstr "Das Home-Verzeichnis des Benutzers kann nicht abgerufen werden: %v" + +#: internal/cli/cli.go:249 +msgid "Unable to open file for logging: %s" +msgstr "Die Datei kann nicht für die Protokollierung geöffnet werden: %s" + +#: commands/instances.go:563 +msgid "Unable to parse URL" +msgstr "URL kann nicht geparst werden" + +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 +msgid "Uninstalling %s" +msgstr "%s wird deinstalliert" + +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 +msgid "Uninstalling %s, tool is no more required" +msgstr "%swird deinstalliert, das Werkzeug wird nicht mehr gebraucht" + +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 +msgid "" +"Uninstalls one or more cores and corresponding tool dependencies if no " +"longer used." +msgstr "" +"Deinstalliert einen oder mehrere Kerne und die entsprechenden Tool-" +"Abhängigkeiten, wenn sie nicht mehr verwendet werden." + +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 +msgid "Uninstalls one or more libraries." +msgstr "Deinstalliert eine oder mehrere Bibliotheken." + +#: internal/cli/board/list.go:172 +msgid "Unknown" +msgstr "Unbekannt" + +#: commands/cmderrors/cmderrors.go:183 +msgid "Unknown FQBN" +msgstr "Unbekannter FQBN" + +#: internal/cli/update/update.go:37 +msgid "Updates the index of cores and libraries" +msgstr "Aktualisiert den Index der Kerne und Bibliotheken" + +#: internal/cli/update/update.go:38 +msgid "Updates the index of cores and libraries to the latest versions." +msgstr "" +"Aktualisiert den Index der Kerne und Bibliotheken auf die neuesten " +"Versionen." + +#: internal/cli/core/update_index.go:36 +msgid "Updates the index of cores to the latest version." +msgstr "Aktualisiert den Index der Kerne auf die neueste Version." + +#: internal/cli/core/update_index.go:35 +msgid "Updates the index of cores." +msgstr "Aktualisiert den Index der Kerne." + +#: internal/cli/lib/update_index.go:36 +msgid "Updates the libraries index to the latest version." +msgstr "Aktualisiert den Bibliotheksindex auf die neueste Version." + +#: internal/cli/lib/update_index.go:35 +msgid "Updates the libraries index." +msgstr "Aktualisiert den Bibliotheksindex." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 +msgid "Upgrade doesn't accept parameters with version" +msgstr "Upgrade akzeptiert keine Parameter mit Version" + +#: internal/cli/upgrade/upgrade.go:38 +msgid "Upgrades installed cores and libraries to latest version." +msgstr "" +"Aktualisiert die installierten Kerne und Bibliotheken auf die neueste " +"Version." + +#: internal/cli/upgrade/upgrade.go:37 +msgid "Upgrades installed cores and libraries." +msgstr "Aktualisiert die installierten Kerne und Bibliotheken." + +#: internal/cli/lib/upgrade.go:35 +msgid "Upgrades installed libraries." +msgstr "Aktualisiert die installierten Bibliotheken." + +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 +msgid "Upgrades one or all installed platforms to the latest version." +msgstr "" +"Aktualisiert eine oder alle installierten Plattformen auf die neueste " +"Version." + +#: internal/cli/upload/upload.go:56 +msgid "Upload Arduino sketches." +msgstr "Lade Arduino-Sketche hoch." + +#: internal/cli/upload/upload.go:57 +msgid "" +"Upload Arduino sketches. This does NOT compile the sketch prior to upload." +msgstr "" +"Arduino-Sketche hochladen. Dabei wird der Sketch vor dem Hochladen NICHT " +"kompiliert." + +#: internal/cli/arguments/port.go:44 +msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" +msgstr "Adresse des Upload-Ports, z. B.: COM3 oder /dev/ttyACM2" + +#: commands/service_upload.go:520 +msgid "Upload port found on %s" +msgstr "Upload-Port gefunden auf %s" + +#: internal/cli/arguments/port.go:48 +msgid "Upload port protocol, e.g: serial" +msgstr "Upload-Port-Protokoll, z.B.: seriell" + +#: internal/cli/compile/compile.go:116 +msgid "Upload the binary after the compilation." +msgstr "Lade die Binärdatei nach der Kompilierung hoch." + +#: internal/cli/burnbootloader/burnbootloader.go:49 +msgid "Upload the bootloader on the board using an external programmer." +msgstr "" +"Lade den Bootloader mit einem externen Programmiergerät auf das Board hoch." + +#: internal/cli/burnbootloader/burnbootloader.go:48 +msgid "Upload the bootloader." +msgstr "Lade den Bootloader hoch." + +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 +msgid "" +"Uploading to specified board using %s protocol requires the following info:" +msgstr "" +"Für das Hochladen auf das angegebene Board mit dem Protokoll %s sind " +"folgende Informationen erforderlich:" + +#: internal/cli/config/init.go:160 +msgid "" +"Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" +"%s" +msgstr "" +"Urls dürfen keine Kommas enthalten. Trenne mehrere Urls, die als Umgebungsvariable exportiert werden, durch ein Leerzeichen:\n" +"%s" + +#: internal/cli/usage.go:22 +msgid "Usage:" +msgstr "Verwendung:" + +#: internal/cli/usage.go:29 +msgid "Use %s for more information about a command." +msgstr "Benutze %s für mehr Informationen über einen Befehl." + +#: internal/cli/compile/compile.go:448 +msgid "Used library" +msgstr "Benutzte Bibliothek" + +#: internal/cli/compile/compile.go:463 +msgid "Used platform" +msgstr "Verwendete Plattform" + +#: internal/arduino/builder/internal/detector/detector.go:157 +msgid "Used: %[1]s" +msgstr "Benutzt: %[1]s" + +#: commands/service_compile.go:349 +msgid "Using board '%[1]s' from platform in folder: %[2]s" +msgstr "Verwende das Board '%[1]s' von der Plattform im Ordner: %[2]s" + +#: internal/arduino/builder/internal/detector/detector.go:351 +msgid "Using cached library dependencies for file: %[1]s" +msgstr "" +"Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die " +"Datei: %[1]s" + +#: commands/service_compile.go:350 +msgid "Using core '%[1]s' from platform in folder: %[2]s" +msgstr "Verwendung des Kerns '%[1]s' von Platform im Ordner: %[2]s" + +#: internal/arduino/builder/libraries.go:312 +msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" +msgstr "" +"Bibliothek %[1]s in Version %[2]s im Ordner: %[3]s %[4]s wird verwendet" + +#: internal/arduino/builder/libraries.go:306 +msgid "Using library %[1]s in folder: %[2]s %[3]s" +msgstr "Bibliothek %[1]s im Ordner: %[2]s %[3]s wird verwendet" + +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 +msgid "Using precompiled core: %[1]s" +msgstr "Verwendung des vorkompilierten Kerns: %[1]s" + +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 +msgid "Using precompiled library in %[1]s" +msgstr "Benutze vorkompilierte Bibliothek in %[1]s" + +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 +msgid "Using previously compiled file: %[1]s" +msgstr "Zuvor kompilierte Datei wird verwendet: %[1]s" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +msgid "VERSION" +msgstr "VERSION" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "VERSION_NUMBER" +msgstr "VERSION_NUMMER" + +#: internal/cli/monitor/monitor.go:297 +msgid "Values" +msgstr "Werte" + +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 +msgid "Verify uploaded binary after the upload." +msgstr "Überprüfe die hochgeladene Binärdatei nach dem Upload." + +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 +msgid "Version" +msgstr "Version" + +#: internal/cli/lib/search.go:210 +msgid "Versions: %s" +msgstr "Versionen: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 +msgid "WARNING cannot configure platform: %s" +msgstr "WARNUNG, die Plattform %s kann nicht konfiguriert werden " + +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 +msgid "WARNING cannot configure tool: %s" +msgstr "WARNUNG, das Tool %s kann nicht konfiguriert werden " + +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 +msgid "WARNING cannot run pre_uninstall script: %s" +msgstr "WARNUNG, kann das pre_uninstall Skript %s nicht ausführen: " + +#: internal/cli/compile/compile.go:326 +msgid "WARNING: The sketch is compiled using one or more custom libraries." +msgstr "" +"WARNUNG: Der Sketch wurde mit einer oder mehreren benutzerdefinierten " +"Bibliotheken kompiliert." + +#: internal/arduino/builder/libraries.go:283 +msgid "" +"WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " +"incompatible with your current board which runs on %[3]s architecture(s)." +msgstr "" +"WARNUNG: Bibliothek %[1]s behauptet auf %[2]s Architektur(en) ausgeführt " +"werden zu können und ist möglicherweise inkompatibel mit Ihrer derzeitigen " +"Platine, welche auf %[3]s Architektur(en) ausgeführt wird." + +#: commands/service_upload.go:509 +msgid "Waiting for upload port..." +msgstr "Warten auf Upload-Port ..." + +#: commands/service_compile.go:355 +msgid "" +"Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" +msgstr "" +"Warnung: Board %[1]s definiert keine %[2]s Präferenz. Automatisch gesetzt " +"auf: %[3]s" + +#: internal/cli/lib/search.go:203 +msgid "Website: %s" +msgstr "Webseite: %s" + +#: internal/cli/config/init.go:45 +msgid "Writes current configuration to a configuration file." +msgstr "Schreibt die aktuelle Konfiguration in eine Konfigurationsdatei." + +#: internal/cli/config/init.go:48 +msgid "" +"Writes current configuration to the configuration file in the data " +"directory." +msgstr "" +"Schreibt die aktuelle Konfiguration in die Konfigurationsdatei im " +"Datenverzeichnis." + +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 +msgid "You cannot use the %s flag while compiling with a profile." +msgstr "" +"Du kannst das %s Flag nicht verwenden, wenn du mit einem Profil kompilierst." + +#: internal/arduino/resources/checksums.go:78 +msgid "archive hash differs from hash in index" +msgstr "Archiv-Hash unterscheidet sich von Hash im Index" + +#: internal/arduino/libraries/librariesmanager/install.go:188 +msgid "archive is not valid: multiple files found in zip file top level" +msgstr "" +"Archiv ist nicht gültig: mehrere Dateien in der obersten Ebene der Zip-Datei" +" gefunden" + +#: internal/arduino/libraries/librariesmanager/install.go:191 +msgid "archive is not valid: no files found in zip file top level" +msgstr "" +"Archiv ist nicht gültig: keine Dateien in der obersten Ebene der Zip-Datei " +"gefunden" + +#: internal/cli/sketch/archive.go:36 +msgid "archivePath" +msgstr "Archiv-Pfad" + +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 +msgid "arduino-preprocessor pattern is missing" +msgstr "Arduino-Preprocessor Muster fehlt" + +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" +msgstr "Nur im Textformat verfügbar" + +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "Einfache Suche nach \"Audio\"" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" +"Einfache Suche nach \"esp32\" und \"display\" beschränkt auf offizielle " +"Betreuer" + +#: commands/service_upload.go:764 +msgid "binary file not found in %s" +msgstr "Binärdatei wurde nicht in %s gefunden " + +#: internal/arduino/cores/packagemanager/package_manager.go:348 +msgid "board %s not found" +msgstr "Platine %s nicht gefunden" + +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 +msgid "boardname" +msgstr "Platinenname" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 +msgid "built-in libraries directory not set" +msgstr "Verzeichnis der eingebauten Bibliotheken nicht festgelegt" + +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 +msgid "can't find latest release of %s" +msgstr "Die neueste Version von %s wurde nicht gefunden" + +#: commands/instances.go:275 +msgid "can't find latest release of tool %s" +msgstr "Die neueste Version des Tools %s wurde nicht gefunden" + +#: internal/arduino/cores/packagemanager/loader.go:712 +msgid "can't find pattern for discovery with id %s" +msgstr "Kann kein Muster für die Suche mit id %s finden " + +#: internal/arduino/builder/internal/detector/detector.go:93 +msgid "candidates" +msgstr "Kandidaten" + +#: commands/service_upload.go:721 commands/service_upload.go:728 +msgid "cannot execute upload tool: %s" +msgstr "Das Upload-Tool %s konnte nicht ausgeführt werden " + +#: internal/arduino/resources/install.go:40 +msgid "checking local archive integrity" +msgstr "Überprüfung der Integrität des lokalen Archivs" + +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 +msgid "cleaning build path" +msgstr "Build-Pfad bereinigen" + +#: internal/cli/cli.go:90 +msgid "command" +msgstr "Befehl" + +#: internal/arduino/monitor/monitor.go:149 +msgid "command '%[1]s' failed: %[2]s" +msgstr "Der Befehl '%[1]s' ist fehlgeschlagen: %[2]s" + +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 +msgid "communication out of sync, expected '%[1]s', received '%[2]s'" +msgstr "Kommunikation nicht synchron, erwartet '%[1]s', empfangen '%[2]s'" + +#: internal/arduino/resources/checksums.go:74 +msgid "computing hash: %s" +msgstr "Hash berechnen: %s" + +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 +msgid "copying library to destination directory:" +msgstr "kopiere Bibliothek in Zielordner:" + +#: commands/service_upload.go:836 +msgid "could not find a valid build artifact" +msgstr "Gültiges Build-Artefakt wurde nicht gefunden" + +#: commands/service_platform_install.go:94 +msgid "could not overwrite" +msgstr "Überschreiben nicht möglich" + +#: commands/service_library_install.go:190 +msgid "could not remove old library" +msgstr "konnte alte Bibliothek nicht entfernen" + +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 +msgid "could not update sketch project file" +msgstr "Sketch-Projektdatei konnte nicht aktualisiert werden" + +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 +msgid "creating core cache folder: %s" +msgstr "Erstellen des Kern-Cache-Ordners: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 +msgid "creating installed.json in %[1]s: %[2]s" +msgstr "install.json in %[1]s erstellen: %[2]s" + +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 +msgid "creating temp dir for extraction: %s" +msgstr "Erstellen eines temporären Verzeichnisses für die Extraktion: %s" + +#: internal/arduino/builder/sizer.go:196 +msgid "data section exceeds available space in board" +msgstr "Datenbereich überschreitet den verfügbaren Platz auf der Platine" + +#: commands/service_library_resolve_deps.go:86 +msgid "dependency '%s' is not available" +msgstr "Abhängigkeit '%s' ist nicht verfügbar" + +#: internal/arduino/libraries/librariesmanager/install.go:94 +msgid "destination dir %s already exists, cannot install" +msgstr "Zielverzeichnis %s existiert bereits, kann nicht installiert werden" + +#: internal/arduino/libraries/librariesmanager/install.go:138 +msgid "destination directory already exists" +msgstr "Zielordner existiert bereits" + +#: internal/arduino/libraries/librariesmanager/install.go:278 +msgid "directory doesn't exist: %s" +msgstr "Verzeichnis existiert nicht: %s" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:644 +msgid "discovery %s not found" +msgstr "Discovery %swurde nicht gefunden" + +#: internal/arduino/cores/packagemanager/loader.go:648 +msgid "discovery %s not installed" +msgstr "Discovery %s wurde nicht installiert" + +#: internal/arduino/cores/packagemanager/package_manager.go:741 +msgid "discovery release not found: %s" +msgstr "Discovery-Release %s wurde nicht gefunden" + +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 +msgid "download a specific version (in this case 1.6.9)." +msgstr "eine bestimmte Version herunterladen (in diesem Fall 1.6.9)." + +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 +msgid "download the latest version of Arduino SAMD core." +msgstr "Lade die neueste Version des Arduino SAMD-Kerns herunter." + +#: internal/cli/feedback/rpc_progress.go:74 +msgid "downloaded" +msgstr "heruntergeladen" + +#: commands/instances.go:55 +msgid "downloading %[1]s tool: %[2]s" +msgstr "Werkzeug %[1]s wird heruntergeladen: %[2]s" + +#: internal/arduino/cores/fqbn.go:60 +msgid "empty board identifier" +msgstr "leerer Platinenidentifikator" + +#: internal/arduino/sketch/sketch.go:93 +msgid "error loading sketch project file:" +msgstr "Fehler beim Laden der Sketch-Projektdatei:" + +#: internal/arduino/cores/packagemanager/loader.go:615 +msgid "error opening %s" +msgstr "Fehler beim Öffnen von %s" + +#: internal/arduino/sketch/profiles.go:214 +msgid "error parsing version constraints" +msgstr "Fehler beim Parsen von Versionsbeschränkungen" + +#: commands/service_board_list.go:115 +msgid "error processing response from server" +msgstr "Fehler bei der Verarbeitung der Serverantwort" + +#: commands/service_board_list.go:95 +msgid "error querying Arduino Cloud Api" +msgstr "Fehler bei der Abfrage der Arduino Cloud Api" + +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" +msgstr "" + +#: internal/arduino/resources/install.go:68 +msgid "extracting archive: %s" +msgstr "Archiv wird extrahiert: %s" + +#: internal/arduino/resources/checksums.go:143 +msgid "failed to compute hash of file \"%s\"" +msgstr "Der Hash der Datei \"%s\" konnte nicht berechnet werden." + +#: commands/service_board_list.go:90 +msgid "failed to initialize http client" +msgstr "Http-Client konnte nicht initialisiert werden" + +#: internal/arduino/resources/checksums.go:95 +msgid "fetched archive size differs from size specified in index" +msgstr "" +"Die Größe des abgerufenen Archivs unterscheidet sich von der im Index " +"angegebenen Größe" + +#: internal/arduino/resources/install.go:123 +msgid "files in archive must be placed in a subdirectory" +msgstr "Die Archivdateien müssen in einem Unterverzeichnis abgelegt werden" + +#: internal/arduino/cores/packagemanager/loader.go:59 +msgid "finding absolute path of %s" +msgstr "Suche den absoluten Pfad zu %s" + +#: internal/cli/cli.go:90 +msgid "flags" +msgstr "Flags" + +#: internal/arduino/cores/packagemanager/loader.go:98 +msgid "following symlink %s" +msgstr "Folge dem Symlink %s" + +#: internal/cli/lib/download.go:40 +msgid "for a specific version." +msgstr "für eine bestimmte Version." + +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 +msgid "for the latest version." +msgstr "für die neueste Version." + +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 +msgid "for the specific version." +msgstr "für die jeweilige Version." + +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "" + +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" + +#: internal/arduino/resources/download.go:55 +msgid "getting archive file info: %s" +msgstr "Hole Info zur Archivdatei: %s" + +#: internal/arduino/resources/checksums.go:92 +msgid "getting archive info: %s" +msgstr "Hole Archiv-Info: %s" + +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 +msgid "getting archive path: %s" +msgstr "Hole Archiv-Pfad: %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:354 +msgid "getting build properties for board %[1]s: %[2]s" +msgstr "Build-Eigenschaften für das Board %[1]s : %[2]s abrufen" + +#: internal/arduino/cores/packagemanager/download.go:106 +msgid "getting discovery dependencies for platform %[1]s: %[2]s" +msgstr "Discovery-Abhängigkeiten für die Plattform %[1]s abrufen: %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:114 +msgid "getting monitor dependencies for platform %[1]s: %[2]s" +msgstr "Monitor-Abhängigkeiten für die Plattform %[1]s : %[2]s abrufen" + +#: internal/arduino/cores/packagemanager/download.go:99 +msgid "getting tool dependencies for platform %[1]s: %[2]s" +msgstr "Abrufen von Tool-Abhängigkeiten für die Plattform %[1]s: %[2]s" + +#: internal/arduino/libraries/librariesmanager/install.go:149 +msgid "install directory not set" +msgstr "Installationsverzeichnis nicht festgelegt" + +#: commands/instances.go:59 +msgid "installing %[1]s tool: %[2]s" +msgstr "Werkzeug %[1]s wird installiert: %[2]s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 +msgid "installing platform %[1]s: %[2]s" +msgstr "Plattform %[1]s wird installiert: %[2]s" + +#: internal/cli/feedback/terminal.go:38 +msgid "interactive terminal not supported for the '%s' output format" +msgstr "" +"Interaktives Terminal wird für das Ausgabeformat '%s' nicht unterstützt" + +#: internal/arduino/sketch/profiles.go:212 +msgid "invalid '%s' directive" +msgstr "Ungültige '%s' Richtlinie" + +#: internal/arduino/resources/checksums.go:43 +msgid "invalid checksum format: %s" +msgstr "Ungültiges Prüfsummenformat: %s" + +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 +msgid "invalid config option: %s" +msgstr "ungültige Konfigurationsoption: %s" + +#: internal/cli/arguments/reference.go:92 +msgid "invalid empty core architecture '%s'" +msgstr "Ungültige leere Kernarchitektur '%s'" + +#: internal/cli/arguments/reference.go:69 +msgid "invalid empty core argument" +msgstr "Ungültiges leeres Kernargument" + +#: internal/cli/arguments/reference.go:89 +msgid "invalid empty core name '%s'" +msgstr "Ungültiger leerer Kernname '%s'" + +#: internal/cli/arguments/reference.go:74 +msgid "invalid empty core reference '%s'" +msgstr "Ungültige leere Kernreferenz '%s'" + +#: internal/cli/arguments/reference.go:79 +msgid "invalid empty core version: '%s'" +msgstr "Ungültige leere Kernversion: '%s'" + +#: internal/cli/lib/args.go:49 +msgid "invalid empty library name" +msgstr "ungültiger, leerer Bibliotheksname" + +#: internal/cli/lib/args.go:54 +msgid "invalid empty library version: %s" +msgstr "ungültige, leere Bibliotheksversion: %s" + +#: internal/arduino/cores/board.go:143 +msgid "invalid empty option found" +msgstr "Ungültige leere Option gefunden" + +#: internal/arduino/libraries/librariesmanager/install.go:268 +msgid "invalid git url" +msgstr "Ungültige Git-URL" + +#: internal/arduino/resources/checksums.go:47 +msgid "invalid hash '%[1]s': %[2]s" +msgstr "Ungültiger Hash '%[1]s': %[2]s" + +#: internal/cli/arguments/reference.go:86 +msgid "invalid item %s" +msgstr "ungültiges Element %s" + +#: internal/arduino/sketch/profiles.go:246 +msgid "invalid library directive:" +msgstr "Ungültige Bibliotheksrichtlinie:" + +#: internal/arduino/libraries/libraries_layout.go:67 +msgid "invalid library layout: %s" +msgstr "Ungültiges Bibliothekslayout: %s" + +#: internal/arduino/libraries/libraries_location.go:90 +msgid "invalid library location: %s" +msgstr "Ungültiger Ort für Bibliothek: %s" + +#: internal/arduino/libraries/loader.go:140 +msgid "invalid library: no header files found" +msgstr "ungültige Bibliothek: keine Header-Dateien gefunden" + +#: internal/arduino/cores/board.go:146 +msgid "invalid option '%s'" +msgstr "Ungültige Option '%s'" + +#: internal/cli/arguments/show_properties.go:52 +msgid "invalid option '%s'." +msgstr "Ungültige Option '%s'." + +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "" + +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "" + +#: internal/arduino/cores/packageindex/index.go:277 +msgid "invalid platform archive size: %s" +msgstr "ungültige Plattformarchivgröße: %s" + +#: internal/arduino/sketch/profiles.go:216 +msgid "invalid platform identifier" +msgstr "ungültiger Plattformidentifikator" + +#: internal/arduino/sketch/profiles.go:226 +msgid "invalid platform index URL:" +msgstr "Ungültige Plattform-Index-URL:" + +#: internal/arduino/cores/packagemanager/loader.go:326 +msgid "invalid pluggable monitor reference: %s" +msgstr "Ungültige hinzufügbare Monitor-Referenz: %s" + +#: internal/cli/monitor/monitor.go:185 +msgid "invalid port configuration value for %s: %s" +msgstr "Ungültiger Port-Konfigurationswert für %s: %s" + +#: internal/cli/monitor/monitor.go:193 +msgid "invalid port configuration: %s" +msgstr "ungültige Port-Konfiguration: %s" + +#: commands/service_upload.go:708 +msgid "invalid recipe '%[1]s': %[2]s" +msgstr "Ungültiges Rezept '%[1]s': %[2]s" + +#: commands/service_sketch_new.go:86 +msgid "" +"invalid sketch name \"%[1]s\": the first character must be alphanumeric or " +"\"_\", the following ones can also contain \"-\" and \".\". The last one " +"cannot be \".\"." +msgstr "" +"Ungültiger Sketchname \"%[1]s\": Das erste Zeichen muss alphanumerisch oder " +"\"_\" sein, die folgenden können auch \"-\" und \".\" enthalten. Das letzte " +"Zeichen darf nicht \".\" sein." + +#: internal/arduino/cores/board.go:150 +msgid "invalid value '%[1]s' for option '%[2]s'" +msgstr "Ungültiger Wert '%[1]s' für Option '%[2]s'" + +#: internal/arduino/cores/packagemanager/loader.go:231 +msgid "invalid version directory %s" +msgstr "Ungültiges Versionsverzeichnis %s" + +#: internal/arduino/sketch/profiles.go:248 +msgid "invalid version:" +msgstr "ungültige Version:" + +#: internal/cli/core/search.go:39 +msgid "keywords" +msgstr "Schlüsselwörter" + +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "Bibliotheken verfasst von Daniel Garcia" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "Nur von Adafruit erstellte Bibliotheken mit \"gfx\" im Namen" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "Bibliotheken, die mindestens von \"IRremote\" abhängen" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "Bibliotheken, die nur von \"IRremote\" abhängen" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "Bibliotheken mit \"buzzer\" im Feld Name" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "Bibliotheken mit einem Namen, der genau mit \"pcf8523\" übereinstimmt" + +#: internal/arduino/libraries/librariesmanager/install.go:126 +msgid "library %s already installed" +msgstr "Bibliothek %s bereits installiert" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "library not valid" +msgstr "Bibliothek nicht gültig" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" +msgstr "lade %[1]s: %[2]s" + +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "Platinen werden geladen: %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 +msgid "loading json index file %[1]s: %[2]s" +msgstr "json-Indexdatei laden %[1]s: %[2]s" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 +msgid "loading library from %[1]s: %[2]s" +msgstr "lade Bibliothek von %[1]s: %[2]s" + +#: internal/arduino/libraries/loader.go:55 +msgid "loading library.properties: %s" +msgstr "lade library.porperties: %s" + +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 +msgid "loading platform release %s" +msgstr "Lade Plattform-Release %s" + +#: internal/arduino/cores/packagemanager/loader.go:195 +msgid "loading platform.txt" +msgstr "lade platform.txt" + +#: internal/arduino/cores/packagemanager/profiles.go:47 +msgid "loading required platform %s" +msgstr "Lade erforderliche Plattform %s" + +#: internal/arduino/cores/packagemanager/profiles.go:63 +msgid "loading required tool %s" +msgstr "Lade erforderliches Tool %s" + +#: internal/arduino/cores/packagemanager/loader.go:590 +msgid "loading tool release in %s" +msgstr "Lade Tool-Release in %s" + +#: internal/arduino/cores/packagemanager/loader.go:188 +msgid "looking for boards.txt in %s" +msgstr "suche nach boards.txt in %s" + +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 +msgid "main file missing from sketch: %s" +msgstr "Hauptdatei fehlt im Sketch: %s" + +#: internal/arduino/sketch/profiles.go:210 +msgid "missing '%s' directive" +msgstr "Fehlende '%s' Richtlinie" + +#: internal/arduino/resources/checksums.go:39 +msgid "missing checksum for: %s" +msgstr "Fehlende Prüfsumme für: %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:457 +msgid "missing package %[1]s referenced by board %[2]s" +msgstr "Fehlendes Paket %[1]s referenziert von Board %[2]s" + +#: internal/cli/core/upgrade.go:101 +msgid "missing package index for %s, future updates cannot be guaranteed" +msgstr "" +"Fehlender Paketindex für %s, zukünftige Updates können nicht garantiert " +"werden" + +#: internal/arduino/cores/packagemanager/package_manager.go:462 +msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" +msgstr "Fehlende Plattform %[1]s:%[2]s referenziert von Board %[3]s" + +#: internal/arduino/cores/packagemanager/package_manager.go:467 +msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" +msgstr "Fehlende Plattformfreigabe %[1]s:%[2]s referenziert von Board %[3]s" + +#: internal/arduino/resources/index.go:153 +msgid "missing signature" +msgstr "Fehlende Signatur" + +#: internal/arduino/cores/packagemanager/package_manager.go:752 +msgid "monitor release not found: %s" +msgstr "Monitor-Freigabe nicht gefunden: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 +msgid "moving extracted archive to destination dir: %s" +msgstr "Verschieben des extrahierten Archivs in das Zielverzeichnis: %s" + +#: commands/service_upload.go:831 +msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" +msgstr "Mehrere Build-Artefakte gefunden: '%[1]s' und '%[2]s'" + +#: internal/arduino/sketch/sketch.go:69 +msgid "multiple main sketch files found (%[1]v, %[2]v)" +msgstr "Mehrere Haupt-Sketchdateien gefunden (%[1]v, %[2]v)" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 +msgid "" +"no compatible version of %[1]s tools found for the current os, try " +"contacting %[2]s" +msgstr "" +"Keine kompatible Version von %[1]s Tools für das aktuelle Betriebssystem " +"gefunden wurde, kontaktiere bitte %[2]s" + +#: commands/service_board_list.go:273 +msgid "no instance specified" +msgstr "Keine Instanz angegeben" + +#: commands/service_upload.go:786 +msgid "no sketch or build directory/file specified" +msgstr "Kein Sketch oder Build-Verzeichnis/Datei angegeben" + +#: internal/arduino/sketch/sketch.go:56 +msgid "no such file or directory" +msgstr "Verzeichnis oder Datei nicht vorhanden" + +#: internal/arduino/resources/install.go:126 +msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" +msgstr "" +"Kein eindeutiges Stammverzeichnis im Archiv, gefunden wurde: '%[1]s' und " +"'%[2]s'" + +#: commands/service_upload.go:703 +msgid "no upload port provided" +msgstr "Kein Upload-Port vorhanden" + +#: internal/arduino/sketch/sketch.go:279 +msgid "no valid sketch found in %[1]s: missing %[2]s" +msgstr "Kein gültiger Sketch in %[1]s gefunden : es fehlt %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:128 +msgid "no versions available for the current OS, try contacting %s" +msgstr "" +"Keine Versionen für das aktuelle Betriebssystem verfügbar. Kontaktiere bitte" +" %s" + +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 +msgid "not running in a terminal" +msgstr "Läuft nicht in einem Terminal" + +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 +msgid "opening archive file: %s" +msgstr "Archivdatei öffnen: %s" + +#: internal/arduino/cores/packagemanager/loader.go:224 +msgid "opening boards.txt" +msgstr "boards.txt wird geöffnet" + +#: internal/arduino/security/signatures.go:81 +msgid "opening signature file: %s" +msgstr "Öffne Signaturdatei: %s" + +#: internal/arduino/security/signatures.go:76 +msgid "opening target file: %s" +msgstr "Öffne Zieldatei: %s" + +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 +msgid "package %s not found" +msgstr "Paket %s nicht gefunden" + +#: internal/arduino/cores/packagemanager/package_manager.go:525 +msgid "package '%s' not found" +msgstr "Paket '%s' nicht gefunden" + +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 +msgid "parsing fqbn: %s" +msgstr "parse FQBN: %s" + +#: internal/arduino/libraries/librariesindex/json.go:70 +msgid "parsing library_index.json: %s" +msgstr "parse library_index.json: %s" + +#: internal/arduino/cores/packagemanager/loader.go:179 +msgid "path is not a platform directory: %s" +msgstr "Pfad ist kein Plattformverzeichnis: %s" + +#: internal/arduino/cores/packagemanager/download.go:80 +msgid "platform %[1]s not found in package %[2]s" +msgstr "Plattform %[1]s nicht im Paket %[2]s gefunden " + +#: internal/arduino/cores/packagemanager/package_manager.go:341 +msgid "platform %s is not installed" +msgstr "Plattform %s ist nicht installiert" + +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "Plattform ist für dieses Betriebssystem nicht verfügbar" + +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 +msgid "platform not installed" +msgstr "Plattform nicht installiert" + +#: internal/cli/compile/compile.go:135 +msgid "please use --build-property instead." +msgstr "Bitte verwende stattdessen --build-property." + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 +msgid "pluggable discovery already added: %s" +msgstr "Pluggable discovery bereits hinzugefügt: %s" + +#: internal/cli/board/attach.go:35 +msgid "port" +msgstr "Port" + +#: internal/cli/arguments/port.go:122 +msgid "port not found: %[1]s %[2]s" +msgstr "Port nicht gefunden: %[1]s %[2]s" + +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "" + +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" +msgstr "Protokollversion nicht unterstützt, gefordert: %[1]d, erhalten %[2]d" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 +msgid "reading dir %[1]s: %[2]s" +msgstr "Verzeichnis %[1]s wird gelesen: %[2]s" + +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 +msgid "reading directory %s" +msgstr "Verzeichnis %s wird gelesen" + +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" +msgstr "" + +#: internal/arduino/builder/sketch.go:81 +msgid "reading file %[1]s: %[2]s" +msgstr "Datei %[1]s wird gelesen: %[2]s" + +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "" + +#: internal/arduino/libraries/librariesresolver/cpp.go:90 +msgid "reading lib headers: %s" +msgstr "Lese Bibliotheks-Header: %s" + +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "" + +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "" + +#: internal/arduino/libraries/librariesindex/json.go:64 +msgid "reading library_index.json: %s" +msgstr "lese library_index.json: %s" + +#: internal/arduino/resources/install.go:116 +msgid "reading package root dir: %s" +msgstr "Lese Paketstammverzeichnis: %s" + +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:697 +msgid "recipe not found '%s'" +msgstr "Rezept nicht gefunden '%s'" + +#: internal/arduino/cores/packagemanager/package_manager.go:601 +msgid "release %[1]s not found for tool %[2]s" +msgstr "Freigabe %[1]s für Werkzeug %[2]s nicht gefunden " + +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 +msgid "release cannot be nil" +msgstr "Freigabe kann nicht null sein" + +#: internal/arduino/resources/download.go:46 +msgid "removing corrupted archive file: %s" +msgstr "Entfernen der beschädigten Archivdatei: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:152 +msgid "removing library directory: %s" +msgstr "Entferne das Bibliotheksverzeichnis: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 +msgid "removing platform files: %s" +msgstr "Entferne die Plattformdateien: %s" + +#: internal/arduino/cores/packagemanager/download.go:87 +msgid "required version %[1]s not found for platform %[2]s" +msgstr "Erforderliche Version %[1]s für Plattform %[2]s nicht gefunden " + +#: internal/arduino/security/signatures.go:72 +msgid "retrieving Arduino public keys: %s" +msgstr "Abrufen der öffentlichen Arduino-Schlüssel: %s" + +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "" + +#: internal/arduino/resources/install.go:74 +msgid "searching package root dir: %s" +msgstr "Suche im Stammverzeichnis des Pakets: %s" + +#: commands/service_sketch_new.go:78 +msgid "sketch name cannot be empty" +msgstr "Sketchname darf nicht leer sein" + +#: commands/service_sketch_new.go:91 +msgid "sketch name cannot be the reserved name \"%[1]s\"" +msgstr "Der Sketchname darf nicht der reservierte Name \"%[1]s\" sein." + +#: commands/service_sketch_new.go:81 +msgid "" +"sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" +msgstr "" +"Sketchname zu lang (%[1]d Zeichen). Die maximal zulässige Länge ist %[2]d" + +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 +msgid "sketch path is not valid" +msgstr "Der Sketch-Pfad ist ungültig" + +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 +msgid "sketchPath" +msgstr "Sketch-Pfad" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 +msgid "starting discovery %s" +msgstr "Starte Discovery %s" + +#: internal/arduino/resources/checksums.go:117 +msgid "testing archive checksum: %s" +msgstr "Prüfung der Archivprüfsumme: %s" + +#: internal/arduino/resources/checksums.go:110 +msgid "testing archive size: %s" +msgstr "Archivgröße wird getestet: %s" + +#: internal/arduino/resources/checksums.go:104 +msgid "testing if archive is cached: %s" +msgstr "Prüfe, ob das Archiv zwischengespeichert ist: %s" + +#: internal/arduino/resources/install.go:38 +msgid "testing local archive integrity: %s" +msgstr "Prüfung der Integrität des lokalen Archivs: %s" + +#: internal/arduino/builder/sizer.go:191 +msgid "text section exceeds available space in board" +msgstr "Textbereich überschreitet den verfügbaren Platz auf der Platine" + +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 +msgid "the compilation database may be incomplete or inaccurate" +msgstr "Die Kompilierdatenbank kann unvollständig oder ungenau sein" + +#: commands/service_board_list.go:102 +msgid "the server responded with status %s" +msgstr "Der Server antwortete mit dem Status %s" + +#: internal/arduino/monitor/monitor.go:139 +msgid "timeout waiting for message" +msgstr "Timeout beim Warten auf Nachricht" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 +msgid "tool %s is not managed by package manager" +msgstr "Das Tool %s wird nicht vom Paketmanager verwaltet." + +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 +msgid "tool %s not found" +msgstr "Tool %s nicht gefunden" + +#: internal/arduino/cores/packagemanager/package_manager.go:551 +msgid "tool '%[1]s' not found in package '%[2]s'" +msgstr "Tool '%[1]s' nicht in Paket '%[2]s' gefunden" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 +msgid "tool not installed" +msgstr "Werkzeug nicht installiert" + +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 +msgid "tool release not found: %s" +msgstr "Werkzeugfreigabe nicht gefunden: %s" + +#: internal/arduino/cores/status.go:105 +msgid "tool version %s not found" +msgstr "Werkzeugversion %s nicht gefunden" + +#: commands/service_library_install.go:92 +msgid "" +"two different versions of the library %[1]s are required: %[2]s and %[3]s" +msgstr "" +"zwei verschiedene Versionen der Bibliothek %[1]s sind erforderlich: %[2]s " +"und %[3]s" + +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 +msgid "unable to compute relative path to the sketch for the item" +msgstr "" +"Relativer Pfad zum Sketch konnte für das Element nicht berechnet werden" + +#: internal/arduino/builder/sketch.go:43 +msgid "unable to create a folder to save the sketch" +msgstr "Konnte keinen Ordner zum Speichern des Sketchs erstellen" + +#: internal/arduino/builder/sketch.go:124 +msgid "unable to create the folder containing the item" +msgstr "Konnte Ordner, der das Objekt enthält, nicht erstellen" + +#: internal/cli/config/get.go:85 +msgid "unable to marshal config to YAML: %v" +msgstr "Konnte die Konfiguration nicht in YAML umwandeln: %v" + +#: internal/arduino/builder/sketch.go:162 +msgid "unable to read contents of the destination item" +msgstr "Inhalt des Zielobjekts konnte nicht gelesen werden" + +#: internal/arduino/builder/sketch.go:135 +msgid "unable to read contents of the source item" +msgstr "Inhalt der Quelle konnte nicht gelesen werden" + +#: internal/arduino/builder/sketch.go:145 +msgid "unable to write to destination file" +msgstr "Schreiben in Zieldatei unmöglich" + +#: internal/arduino/cores/packagemanager/package_manager.go:329 +msgid "unknown package %s" +msgstr "unbekanntes Paket %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:336 +msgid "unknown platform %s:%s" +msgstr "unbekannte Plattform %s:%s" + +#: internal/arduino/sketch/sketch.go:137 +msgid "unknown sketch file extension '%s'" +msgstr "Unbekannte Sketch-Dateierweiterung '%s'" + +#: internal/arduino/resources/checksums.go:60 +msgid "unsupported hash algorithm: %s" +msgstr "Nicht unterstützter Hash-Algorithmus: %s" + +#: internal/cli/core/upgrade.go:44 +msgid "upgrade arduino:samd to the latest version" +msgstr "Aktualisiere arduino:samd auf die neueste Version" + +#: internal/cli/core/upgrade.go:42 +msgid "upgrade everything to the latest version" +msgstr "Aktualisiere alles auf die neueste Version" + +#: commands/service_upload.go:732 +msgid "uploading error: %s" +msgstr "Hochladefehler: %s" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 +msgid "user directory not set" +msgstr "Benutzerverzeichnis nicht gesetzt" + +#: internal/cli/feedback/terminal.go:94 +msgid "user input not supported for the '%s' output format" +msgstr "Benutzereingaben werden für das Ausgabeformat '%s' nicht unterstützt." + +#: internal/cli/feedback/terminal.go:97 +msgid "user input not supported in non interactive mode" +msgstr "Benutzereingaben werden im nicht interaktiven Modus nicht unterstützt" + +#: internal/arduino/cores/packagemanager/profiles.go:175 +msgid "version %s not available for this operating system" +msgstr "Version %s ist für dieses Betriebssystem nicht verfügbar" + +#: internal/arduino/cores/packagemanager/profiles.go:154 +msgid "version %s not found" +msgstr "Version %s nicht gefunden" + +#: commands/service_board_list.go:120 +msgid "wrong format in server response" +msgstr "falsches Format in der Serverantwort" diff --git a/i18n/data/en.po b/internal/i18n/data/en.po similarity index 100% rename from i18n/data/en.po rename to internal/i18n/data/en.po diff --git a/i18n/data/es.po b/internal/i18n/data/es.po similarity index 56% rename from i18n/data/es.po rename to internal/i18n/data/es.po index bb7b86937fb..c80d9853b58 100644 --- a/i18n/data/es.po +++ b/internal/i18n/data/es.po @@ -8,103 +8,88 @@ # Iago, 2022 # Gonzalo Martínez, 2023 # Gaia Castronovo <g.castronovo@arduino.cc>, 2023 +# Diego Castro, 2023 # msgid "" msgstr "" -"Last-Translator: Gaia Castronovo <g.castronovo@arduino.cc>, 2023\n" +"Last-Translator: Diego Castro, 2023\n" "Language-Team: Spanish (https://app.transifex.com/arduino-1/teams/108174/es/)\n" "Language: es\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "¡%[1]s ya no es compatible con la carpeta! %[2]s Para más información" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]s inválido, reconstruyendo todo" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]s es requerido pero %[2]s está actualmente instalado." -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "No se encuentra patrón %[1]s" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, mensaje: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, puerto: %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, puertos: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, versión del protocolo: %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s ya está descargado" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "%s y %s no se pueden usar juntos" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "%s instalado" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "%s ya está instalado." -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "%s no es un directorio" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "%s no es manejado por el administrador de paquetes" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "%s debe ser instalado." -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "Falta el patrón %s " -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "'%s' tiene una firma inválida" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(oculto)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "(legado)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" @@ -112,7 +97,7 @@ msgstr "" "--git-url y --zip-path están deshabilitados por defecto, para más " "información mira: %v" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." @@ -120,24 +105,24 @@ msgstr "" "las banderas --git-url y --zip-path permiten instalar archivos no " "verificados, úsalo bajo tu propio riesgo." -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "El archivo .ino ya existe" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "Una nueva versión de Arduino CLI está disponible:" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "Se requiere un programador para subir." -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "ARQUITECTURA" @@ -145,268 +130,276 @@ msgstr "ARQUITECTURA" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "MANUAL DE LA LINEA DE COMANDOS DE ARDUINO" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "Temas de ayuda adicionales:" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "Agrega uno o más valores a una configuración." -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "Alias:" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "Todos los núcleos están en su última versión" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "Ya está instalado %s" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "Alternativas para %[1]s: %[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "Ocurrió un error añadiendo prototipos" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "Ocurrió un error detectando librerías" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "Registro de depuración añadido al archivo especificado" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "Arquitectura: %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "El archivo ya existe" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "Archivando el núcleo construido (cacheado) en: %[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Comandos de sketch de Arduino CLI." -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "Interfaz de la línea de comandos de Arduino (arduino-cli)." -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "Comandos de la placa Arduino." -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "Comandos de cache de Arduino" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "Comandos sobre librerías de Arduino" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "Commandos de configuración de Arduino" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "Operaciones del núcleo Arduino" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "Errores en los argumentos: %v " -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "Conecta una tabla al sketch." -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "Autor: %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "Disponible" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "Comandos disponibles:" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "Archivo binario para cargar." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "Nombre de la placa" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "Nombre de la placa:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "Versión de la placa:" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "Fichero Bootloader especificado pero ausente: %[1]s" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" "La compilaciones de 'core.a' e guardan en esta ruta para ser cacheadas y " "reusadas" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "No se puede crear el directorio de datos %s" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "No se puede crear el sketch" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "No fue posible descargar la librería" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "No puedo encontrar las dependencias para la plataforma %s" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "No es posible abrir el sketch" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "No se puede establecer multiples valores a un mismo índice %v" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "No se puede escribir el archivo de configuración: %v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "No se puede crear el directorio de caché de compilación" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "No se puede crear el directorio de caché de compilación" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "No se puede crear el directorio de archivos de configuración: %v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "No se puede crear el archivo de configuración: %v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "No se puede crear un directorio temporal" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "No se puede crear un archivo temporal" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "No se puede ejecutar la herramienta de depuración" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "No se puede encontrar la ruta absoluta: %v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "No se puede instalar la plataforma" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "No se puede instalar la herramienta %s" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "No se puede realizar el reinicio del puerto: %s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 msgid "Cannot upgrade platform" msgstr "No se puede actualizar la plataforma" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "Categoría: %s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "Comprueba el estado de las dependencias de la librería especificada." -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "El checksum difiere del checksum en package.json" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "Checksum:" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "Limpiando caches." -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" "Lista separada por comas de URLs adicionales para el Gestor de Tarjetas." -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." @@ -414,88 +407,88 @@ msgstr "" "El comando sigue ejecutándose e imprime la lista de placas conectadas cada " "vez que hay un cambio." -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "Proyecto compilado no encontrado en %s" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "Compila los sketch de Arduino" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "Compilando el núcleo..." -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "Compilando librerías..." -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "Compilando librería \"%[1]s\"" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "Compilando el sketch..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" "El archivo de configuración ya existe, utilice --overwrite para descartar el" " existente." -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "Archivo de configuración escrito en: %s" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "Opciones de configuración para %s" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "Configurando plataforma." -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "Conectado" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "¡Conectado a %s! Pulse CTRL-C para salir." +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "Núcleo" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "No se pudo conectar vía HTTP" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "No se ha podido crear el directorio índice." -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "No se pudo determinar el tamaño del programa" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "No se ha podido obtener el directorio de trabajo actual: %v" @@ -503,7 +496,7 @@ msgstr "No se ha podido obtener el directorio de trabajo actual: %v" msgid "Create a new Sketch" msgstr "Crear un nuevo Sketch" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "" @@ -511,7 +504,7 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "Crea un archivo zip conteniendo todos los archivos del sketch." -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." @@ -519,95 +512,95 @@ msgstr "" "Crea o actualiza el archivo de configuración en el directorio de datos o " "directorio personalizado con los ajustes actuales." -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "OBSOLETO" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "Depurar sketches de Arduino." -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "Intérprete de depuración e.j.: %s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "Depuración no soportada para la tarjeta: %s" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "Debugging soportado:" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "Por defecto" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "Elimina una llave de configuraciones y sus sub-llaves." -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "Dependencias: %s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "Descripción" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "Detectando las librerías usadas..." -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" "Detecta y muestra una lista de placas conectadas al computador actual." -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "La carpeta contiene archivos binarios para la depuración." -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "La carpeta contiene archivos binarias para subir." @@ -623,292 +616,303 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "Desconectado" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "No instale dependencias." -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "No sobrescribir librerías ya instaladas." -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "No sobrescribir plataformas ya instaladas." -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "Descargando %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "Descargando el índice: %s" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "Descargando la librería %s" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "Descargando herramienta perdida %s" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "Descargando paquetes" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "Descargando la plataforma %s" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "Descargando la herramienta%s" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" "Descarga uno o más núcleos y sus dependencias de herramienta " "correspondientes." -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "Descarga una o más librerías sin instalarlas." -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "Introduzca una ruta para el archivo zip" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "Introducir la url de git para librerías alojadas en repositorios" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "Error añadiendo sketch al archivo de sketch" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "Error calculando la ruta de archivo relativa" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "Error limpiando caches: %v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "Error copiando el archivo de salida %s" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "Error creando la instancia: %v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "Error al crear el directorio de salida" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "Error creando el archivo de sketch" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "Error creando el sketch: %v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "Error detectando placas: %v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "Error al descargar %[1]s: %[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "Error descargando %s" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "Error descargando el índice '%s'" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "Error descargando el índice de firmas '%s'" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "Error descargando la librería %s" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "Error descargando la plataforma %s" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "Error descargando la herramienta %s" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "Error durante la carga: %v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "Error durante la instalación: %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "Error durante la desinstalacion: %v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "Error durante la actualización: %v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "Error extrayendo %s" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "Error obteniendo la ruta absoluta del archivo de sketch" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "Error obteniendo los detalles de la placa: %v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" "Error obteniendo el directorio actual para la base de datos de compilación%s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "Error obteniendo información para la librería %s" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "Error obteniendo información de las librerías: %v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "Error instalando la plataforma %s" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "Error instalando la herramienta %s" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "Error listando las placas: %v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -916,44 +920,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "Error listando las plataformas: %v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "Error al leer el archivo de configuración: %v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "Error leyendo los archivos del sketch" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -961,203 +961,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "Error al revertir los cambios: %s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "Error en la búsqueda de placas: %v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "Error al desinstalar %[1]s: %[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "Ejemplos:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "Borrado del chip fallida" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "Archivo:" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "Banderas:" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "" @@ -1174,15 +1189,19 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "Banderas globales:" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1190,298 +1209,298 @@ msgstr "" "Las variables Globales usan %[1]s bytes (%[3]s%%) de la memoria dinámica, " "dejando %[4]s bytes para las variables locales. El máximo es %[2]s bytes." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "Variables globales usan %[1]s bytes de memoria dinamica." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "Propiedades de identificación:" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Instalado" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "Instalado %s" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "Instalando %s" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "Instalando la librería %s" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "Instalando la plataforma %s" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "Instalando la herramienta %s" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "Error interno en la cache" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "FQBN inválido" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "URL inválida" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "URL adicional inválida: %v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "Instancia inválida" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "Librería inválida" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: internal/cli/configuration/network.go:66 +msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "Parámetro inválido %s: versión no compatible" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "Perfil inválido" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "Versión inválida" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "LIBNAME" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "LIBRERÍA" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "Última" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" "La librería %[1]s ya está instalada, pero en una versión diferente: %[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "La librería %s ya se encuentra en la versión más reciente" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "La librería %s no está instalada" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "Librería %s no encontrada" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "La librería '%s' no fue encontrada" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "La instalación de la librería no fue exitosa" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "Librería instalada" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "Licencia: %s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "Listar las placas conectadas." -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "Enumera las librerías actualizables." -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "Enumera las plataformas actualizables." -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "Enumera todas las placas conectadas." @@ -1489,116 +1508,122 @@ msgstr "Enumera todas las placas conectadas." msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "Ubicación" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "" "Hay poca memoria disponible; pueden producirse problemas de estabilidad." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "Falta '%[1]s' de la biblioteca en %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "Falta el puerto" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "No se encuentra la dirección del puerto " -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "Falta el protocolo del puerto" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "Monitor '%s' no encontrado" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "Se encontraron varias bibliotecas para \"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "Nombre" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "Nombre: \"%s\"" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "No se encontraron placas." -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "No se encontraron las librerías." -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "No hay librerías instaladas." -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "Ninguna librería concuerda con tu búsqueda." -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1606,273 +1631,279 @@ msgstr "" "Ninguna librería concuerda con tu búsqueda.\n" "Querías decir...\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "No hay plataformas que coincidan con su búsqueda." -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" "No hay suficiente memoria, ver %[1]s para obtener consejos sobre cómo " "optimizar su código." -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "No utilizado: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "OS:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "Placa oficial de Arduino:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "Abre un puerto de comunicación con una placa." -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "Opción:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "La plataforma %s ya está instalada" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "Plataforma %s instalada" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "Plataforma %s desinstalada" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "La plataforma '%s' ya se encuentra en su versión más reciente" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "Puerto" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "Puerto cerrado: %v" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1881,194 +1912,235 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "Perfil '%s' no encontrado" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "Programadores:" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "La propiedad '%s' no está definida" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "Protocolo" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" -msgstr "" +msgstr "Reemplazando %[1]s con %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" -msgstr "" +msgstr "Reemplazando plataforma %[1]s con %[2]s" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "Herramienta requerida:" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" "Busca un núcleo in el Manager de Tarjetas usando las palabras clave " "especificadas." -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "Busca un núcleo in el Manager de Tarjetas." -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "Sentencia: %s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "El servidor respondió con: %s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "Muestra todos los núcleos disponibles." -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "Mostrar solo los nombres de la librería." -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2079,11 +2151,11 @@ msgstr "" "Muestra los núcleos y librerías obsoletas después de una actualización de " "índice" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2092,52 +2164,52 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "Mostrar la lista de plataformas instaladas." -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "Muestra la lista de ejemplos para las librerías." -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "Tamaño (bytes):" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "Programa muy grando: visite %[1]s para ver cómo reducirlo." -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2145,116 +2217,128 @@ msgstr "" "El Sketch usa %[1]s bytes (%[3]s%%) del espacio de almacenamiento de " "programa. El máximo es %[2]s bytes." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2270,91 +2354,92 @@ msgstr "" "Este comando muestra una lista de los núcleos o librerías instaladas\n" "que pueden ser actualizadas. Si ninguno necesita ser actualizado no se mostrará nada." -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "La herramienta %s ya está instalada" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "La herramienta %s se desinstaló" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "Habilitar el modo verbose." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "Tipo" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "Tipos: %s" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "URL:" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "No es posible abrir el archivo para el logging: %s" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "Desinstalando %s" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "Desinstalando %s, la herramienta ya no es requerida" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." @@ -2362,15 +2447,15 @@ msgstr "" "Desinstalar uno o más núcleos y sus herramientas correspondientes si ya no " "son usadas." -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "Desinstalar una o más librerías." -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2382,23 +2467,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2410,155 +2495,156 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "Subir el binario después de la compilación." -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "Cargar el bootloader en la placa usando un programador externo." -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "Cargar el bootloader." -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "Uso:" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "Use %spara más información acerca de un comando." -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Usado: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "Usando librería %[1]s con versión %[2]s en la carpeta: %[3]s %[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "Utilizando biblioteca %[1]s en carpeta: %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "Utilizando archivo previamente compilado: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "VERSIÓN" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2567,46 +2653,42 @@ msgstr "" "y puede ser incompatible con tu actual tarjeta la cual corre sobre " "arquitectura(s) %[3]s." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "Sitio web: %s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2614,370 +2696,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" msgstr "" -#: commands/upload/upload.go:700 +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "Candidatos" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "comando" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "comando fallido: %s" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "identificador de placa vacío" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:68 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "banderas" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: arduino/resources/download.go:53 +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" + +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2989,635 +3042,623 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "ítem inválido %s" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "" - -#: internal/cli/core/search.go:45 +#: internal/cli/core/search.go:39 msgid "keywords" msgstr "Palabras clave" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "Listando los puertos seriales" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/libraries/librariesmanager/install.go:126 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "library not valid" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:341 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "versión %s no encontrada" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "Error de formato en la respuesta del servidor" diff --git a/i18n/data/fr.po b/internal/i18n/data/fr.po similarity index 53% rename from i18n/data/fr.po rename to internal/i18n/data/fr.po index 0490294be64..d82a8509014 100644 --- a/i18n/data/fr.po +++ b/internal/i18n/data/fr.po @@ -11,126 +11,110 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" "le dossier %[1]sn'est plus supporté ! Consulter%[2]s pour plus " "d'informations" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "%[1]s est un schéma manquant" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s déjà téléchargé" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "%set%sne peuvent pas être téléchargé." -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "(héritage)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -138,350 +122,358 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "Manuel d'Arduino Command Line" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "Aide supplémentaire sur les sujets :" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "Ajouter une autre valeur à un réglage." -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "Alias :" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "Tous les cœurs sont à jours vers la dernière version." -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "Déjà installé %s" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "Alternative pour %[1]s: %[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "Architecture : %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "L'archive existe déjà" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "Archivage du noyau construit (mise en cache) dans: %[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Arduino CLI croquis commandes." -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "Fichier du bootloader spécifié mais absent: %[1]s" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "Impossible de créer le dossier temporaire" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "Impossible de créer le fichier temporaire" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "Croquis compilé introuvable %s" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "Compilation des croquis Arduino." -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "Compilation du croquis..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "Configuration de la plateforme." -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "Connecté" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -489,7 +481,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "" @@ -497,100 +489,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "Défaut" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "" @@ -604,289 +596,300 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "Téléchargement %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "Téléchargement des paquets" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "Erreur lors de l'installation de la librairie Zip : %v" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "Erreur lors de l'installation de la plateforme %s" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "Erreur lors de l’installation de l'outil %s." -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -894,44 +897,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -939,203 +938,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "" @@ -1152,15 +1166,19 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1169,297 +1187,297 @@ msgstr "" "dynamique, ce qui laisse %[4]s octets pour les variables locales. Le maximum" " est de %[2]s octets." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "Les variables globales utilisent %[1]s octets de mémoire dynamique." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Installé" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: internal/cli/configuration/network.go:66 +msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1467,389 +1485,401 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "" "La mémoire disponible faible, des problèmes de stabilité pourraient " "survenir." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "Fichier manquant '%[1]s' de la bibliothèque dans %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "Plusieurs bibliothèque trouvées pour \"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" "Mémore insuffisante; consulter la page %[1]s pour obtenir des astuces sur " "comment le réduire." -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "Non utilisé: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "Port" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1858,192 +1888,233 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2052,11 +2123,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2065,52 +2136,52 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "Croquis trop gros; vois %[1]s pour des conseils de réduction." -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2118,116 +2189,128 @@ msgstr "" "Le croquis utilise %[1]s octets (%[3]s%%) de l'espace de stockage de " "programmes. Le maximum est de %[2]s octets." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2241,105 +2324,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2351,23 +2435,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2379,158 +2463,159 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Utilisé: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "" "Utilisation de la bibliothèque %[1]s version %[2]s dans le dossier: %[3]s " "%[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "" "Utilisation de la bibliothèque %[1]s prise dans le dossier: %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "Utilisation du fichier déjà compilé: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2539,46 +2624,42 @@ msgstr "" "architecture(s) %[2]s et peut être incompatible avec votre carte actuelle " "qui s'exécute sur %[3]s." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2586,370 +2667,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" +msgstr "" + +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" msgstr "" -#: commands/upload/upload.go:700 +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:68 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2961,635 +3013,623 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:126 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "library not valid" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:341 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "impossible d’écrire dans le fichier de destination." -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "paquet inconnu %s" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "plateforme inconnue %s:%s" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "extension de croquis inconnue '%s' " -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "algorithme de hachage non supporté" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "mise à jour de arduino:samd vers la dernière version" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "tout mettre à jour tout vers la dernière version" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/he.po b/internal/i18n/data/he.po similarity index 51% rename from i18n/data/he.po rename to internal/i18n/data/he.po index 20309bd90d7..48dddfc41a0 100644 --- a/i18n/data/he.po +++ b/internal/i18n/data/he.po @@ -7,126 +7,110 @@ msgstr "" "Last-Translator: rel_m3, 2022\n" "Language-Team: Hebrew (https://app.transifex.com/arduino-1/teams/108174/he/)\n" "Language: he\n" -"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" +"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s%[2]s גרסה: %[3]s קומיט: %[4]sתאריך: %[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "%[1]s תבנית חסרה" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, הערה: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, פורט: %[2]s " - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, גרסאת פרוטוקול: %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "%s מותקן" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "%s אינו תיקייה" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "%s אינו מנוהל על ידי מנהל ההתקנות" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(מוסתר)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -134,350 +118,358 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "ארכיטקטורה: %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "פקודות סקיצה בשורת הפקודה של ארדואינו." -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "שורת הפקודה של ארדואינו." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "פקודות לוח של ארדואינו." -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "" -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -485,7 +477,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "" @@ -493,100 +485,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "" @@ -600,289 +592,300 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -890,44 +893,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -935,203 +934,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "" @@ -1148,311 +1162,315 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: internal/cli/configuration/network.go:66 +msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1460,385 +1478,397 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1847,192 +1877,233 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2041,11 +2112,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2054,167 +2125,179 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2228,105 +2311,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2338,23 +2422,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2366,200 +2450,197 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2567,370 +2648,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" msgstr "" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:68 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2942,635 +2994,623 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:126 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:341 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/it_IT.po b/internal/i18n/data/it_IT.po similarity index 63% rename from i18n/data/it_IT.po rename to internal/i18n/data/it_IT.po index 08764032efe..6d691f2482d 100644 --- a/i18n/data/it_IT.po +++ b/internal/i18n/data/it_IT.po @@ -7,92 +7,76 @@ # Gabriel F., 2022 # CLI team <prj_cli_team@arduino.cc>, 2022 # Gaia Castronovo <g.castronovo@arduino.cc>, 2023 -# Giovanni Scafora <scafora.giovanni@gmail.com>, 2023 +# Giovanni Scafora <scafora.giovanni@gmail.com>, 2024 # msgid "" msgstr "" -"Last-Translator: Giovanni Scafora <scafora.giovanni@gmail.com>, 2023\n" +"Last-Translator: Giovanni Scafora <scafora.giovanni@gmail.com>, 2024\n" "Language-Team: Italian (Italy) (https://app.transifex.com/arduino-1/teams/108174/it_IT/)\n" "Language: it_IT\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s %[2]s Versione: %[3]s Commit: %[4]s Data: %[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" "La cartella %[1]s non è più supportata! Vedere %[2]s per maggiori " "informazioni" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]s non è valido, ricompilo tutto" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]s è richiesto ma %[2]s risulta attualmente installato." -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "Manca il pattern %[1]s" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, messaggio: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, porta: %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, porte: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, versione protocollo: %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr " %s già scaricato" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "%s e %s non possono essere usati insieme" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "%s installato" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "%s è già installato." -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "%s non è una directory" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "%s non è gestito dal gestore pacchetti" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "%s deve essere installato." -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "Manca il pattern %s" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "'%s' ha una firma invalida" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" @@ -100,15 +84,15 @@ msgstr "" "'build.core' e 'build.variant' fanno riferimento a piattaforme diverse: " "%[1]s and %[2]s" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(nascosto)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "(ereditato)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" @@ -116,7 +100,7 @@ msgstr "" "--git-url e --zip-path sono disabilitati per impostazione predefinita, per " "maggiori informazioni vedere: %v" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." @@ -124,25 +108,25 @@ msgstr "" "I flag --git-url e --zip-path consentono l'installazione di file non " "attendibili, utilizzateli a vostro rischio e pericolo." -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" "--git-url o --zip-path non possono essere usate con --install-in-builtin-dir" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "il file .ino è già presente" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "È disponibile una nuova versione di Arduino CLI:" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "Per caricare è necessario un programmatore" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "ARCH" @@ -150,99 +134,103 @@ msgstr "ARCH" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "MANUALE DELLA LINEA DI COMANDO DI ARDUINO" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "Informazioni aggiuntive:" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "Aggiunge uno o più valori a un'impostazione." -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "Alias:" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "Tutte le piattaforme sono aggiornate." + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "Tutti i core sono già all'ultima versione" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "Già installato %s" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "Alternative per %[1]s: %[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "Si è verificato un errore durante l'aggiunta di un prototipo" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "Si è verificato un errore durante il rilevamento delle librerie" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "Aggiungi il log di debug in coda al file specificato" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "Architettura: %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "L'archivio è già presente" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "Archivio il core compilato (caching) in: %[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Comandi degli sketch di Arduino CLI." -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "Interfaccia a linea di comando di Arduino (arduino-cli)." -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "Comandi delle schede Arduino." -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "Comandi della cache Arduino." -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "Comandi Arduino riguardo le librerie." -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "Comandi di configurazione Arduino." -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "Operazioni core Arduino" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "Errore di argomenti: %v" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "Collega uno sketch ad una scheda." -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "Autore: %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." @@ -250,7 +238,7 @@ msgstr "" "Non è possibile eseguire l'installazione automatica della libreria, " "rimuovere manualmente tutti i duplicati e riprovare." -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." @@ -258,165 +246,170 @@ msgstr "" "La disinstallazione automatica delle librerie non può essere eseguita, " "rimuovile manualmente." -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "Disponibile" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "Comandi disponibili:" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "File binario da caricare." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "Nome scheda" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "Nome scheda:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "Versione scheda:" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "Il file del bootloader specificato è inesistente: %[1]s" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" "Le build di 'core.a' vengono salvate in questo percorso per essere " "memorizzate nella cache e riutilizzate." -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "Non è possibile creare la directory dei dati %s" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "Non è possibile creare lo sketch" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "Non è possibile scaricare la libreria" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "Impossibile trovare le dipendenze per la piattaforma %s" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "Non è possibile aprire lo sketch" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "Non è possibile impostare valori multipli nella chiave %v" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "Impossibile aggiornare lo sketch" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "Non è possibile utilizzare insieme i seguenti flag: %s" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "Non è possibile salvare il file di configurazione: %v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "Non è possibile scrivere il log di debug: %s" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "Non è possibile creare la directory di build della cache." -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "Non è possibile creare la directory per la build" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" "Non è stato possibile creare la directory del file di configurazione: %v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "Non è possibile creare il file di configurazione: %v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "Non è possibile creare la cartella temporanea" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "Non è possibile creare il file temporaneo" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "Impossibile eliminare la chiave %[1]s: %[2]v" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "Non è possibile eseguire lo strumento di debug" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "Percorso assoluto non trovato: %v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "Impossibile ottenere la chiave di configurazione %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "Non è possibile installare la piattaforma" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "Non è possibile installare il tool %s" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "Non è possibile effettuare il reset della porta: %s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "Impossibile rimuovere la chiave di configurazione %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 msgid "Cannot upgrade platform" msgstr "Non è possibile aggiornare la piattaforma" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "Impossibile scrivere il file %[1]s: %[2]v" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "Categoria: %s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "Controllare lo stato delle dipendenze per la libreria specificata." -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" +"Controlla se la combinazione fornita scheda/programmatore supporta il debug." + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "Il checksum è diverso da quello presente in package.json" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "Checksum:" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "Pulire le cache." -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" "Elenco separato da virgole degli URL aggiuntivi per il Boards Manager." -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." @@ -424,46 +417,46 @@ msgstr "" "Il comando continua a funzionare e stampa l'elenco delle schede collegate " "ogni volta che viene apportata una modifica." -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "Sketch compilato non trovato in %s" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "Compila gli sketch di Arduino." -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "Compilazione del core in corso..." -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "Compilazione delle librerie in corso..." -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "Compilazione della libreria \"%[1]s\"" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "Compilazione dello sketch in corso..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" "Il file di configurazione esiste già, usa --overwrite per sovrascrivere " "quello esistente." -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "File di configurazione scritto in: %s" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "Opzioni di configurazione per %s" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." @@ -471,44 +464,44 @@ msgstr "" "Configura le impostazioni della porta di comunicazione. Il formato è " "<ID>=<value>[,<ID>=<value>]..." -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "Configurazione della piattaforma." -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "Strumento di configurazione." -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "Connesso" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "Connesso a %s! Premere CTRL-C per uscire." +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "Connessione in corso a %s. Premere CTRL-C per uscire." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "Core" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "Non è possibile connettersi via HTTP" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "Impossibile creare la directory dell'indice" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" "Non è stato possibile creare una cache profonda della build core: %[1]s" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "Non è possibile determinare la dimensione del programma" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "Impossibile ottenere la cartella di lavoro corrente: %v" @@ -516,7 +509,7 @@ msgstr "Impossibile ottenere la cartella di lavoro corrente: %v" msgid "Create a new Sketch" msgstr "Crea un nuovo Sketch" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "Crea e stampa una configurazione del profilo dalla build." @@ -524,7 +517,7 @@ msgstr "Crea e stampa una configurazione del profilo dalla build." msgid "Creates a zip file containing all sketch files." msgstr "Crea un file zip contenente tutti gli sketch." -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." @@ -532,7 +525,7 @@ msgstr "" "Crea o aggiorna il file di configurazione nella directory dei dati o nella " "directory personalizzata con le impostazioni di configurazione correnti." -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." @@ -540,94 +533,94 @@ msgstr "" "Attualmente, i profili di compilazione supportano solo le librerie " "disponibili tramite Arduino Library Manager." -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" -msgstr "Configurazione personalizzata del plugin IDE cortex-debug:" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" +msgstr "Configurazione personalizzata di %s:" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "DEPRECATO" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "Deamon è ora in ascolto su %s:%s" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "Eseguire il debug degli sketch di Arduino" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" "Eseguire il debug degli sketch di Arduino. (questo comando apre una sessione" " gdb interattiva)" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "Interprete di debug, ad esempio: %s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "Debugging non supportato per la scheda %s" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "Debugging supportato:" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "Predefinito" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "FQBN predefinito impostato su" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "Porta predefinita impostata su" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "Programmatore predefinito impostato su" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "Elimina la cache delle Schede/Gestire di download delle Librerie" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" -"Elimina il contenuto della cartella directories.downloads, dove i file di " -"archivio sono organizzati durante l'installazione delle librerie e delle " -"schede. " +"Cancella il contenuto della cartella cache dei download, in cui i file di " +"archivio sono collocati durante l'installazione delle librerie e delle " +"piattaforme delle schede." #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" "Elimina una chiave delle impostazioni e tutte le sue chiavi secondarie." -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "Dipendenze: %s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "Descrizione" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "Rilevamento delle librerie utilizzate in corso..." -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "Rileva e visualizza un elenco di schede collegate al computer." -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "Directory contenente i binari per il debug." -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "Directory contenente i file binari da caricare." @@ -644,320 +637,337 @@ msgid "Disable completion description for shells that support it" msgstr "" "Disabilita la descrizione del completamento per le shell che la supportano." -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "Disconnesso" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "Visualizza solo le chiamate gRPC fornite" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "Non installare le dipendenze." -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "Non sovrascrivere le librerie già installate." -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "Non sovrascrivere le piattaforme già installate." -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "" "Non eseguire il caricamento vero e proprio, ma solo le azioni di logout." -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "Non terminare il processo del demone se il processo principale muore" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" +"Non tentare di aggiornare le dipendenze delle librerie se sono già " +"installate." + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "Sto scaricando %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "Sto scaricando la firma dell'indice: %s" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "Sto scaricando l'indice: %s" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "Sto scaricando la libreria %s" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "Sto scaricando il tool mancante %s" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "Sto scaricando i pacchetti" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "Sto scaricando la piattaforma %s" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "Sto scaricando il tool %s" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "Scarica uno o più core e le corrispondenti dipendenze dei tool." -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "Scarica uno o più librerie, senza installarle." -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "Abilita il debug logging delle chiamate gRPC" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "Immettere il percorso del file zip" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "Immettere l'url del git delle librerie ospitate nei repository" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" "Si è verificato un errore durante l'aggiunta del file all'archivio dello " "sketch" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" "Si è verificato un errore durante l'archiviazione del core compilato " "(caching) in %[1]s: %[2]s" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "Errore durante l'archiviazione: %v" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" "Si è verificato un errore durante il calcolo del percorso relativo del file" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "Si è verificato un errore durante la pulizia della cache: %v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "" "Si è verificato un errore durante la conversione del percorso in assoluto:: " "%v" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "Si è verificato un errore durante la copia del file di output %s" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" +"Si è verificato un errore durante la creazione della configurazione: %v" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "Si è verificato un errore durante la creazione dell'istanza: %v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "" "Si è verificato un errore durante la creazione della cartella di output" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" "Si è verificato un errore durante la creazione dell'archivio dello sketch" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "Errore durante la creazione dello sketch: %v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "Si è verificato un errore durante il rilevamento delle schede: %v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "Si è verificato un errore durante lo scaricamento di %[1]s:%[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "Si è verificato un errore durante lo scaricamento di %s" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "Si è verificato un errore durante lo scaricamento dell'indice '%s'" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" "Si è verificato un errore durante lo scaricamento della firma dell'indice " "'%s'" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "Errore durante il download della libreria %s" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "Errore durante il download della piattaforma %s" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "Errore durante il download del tool %s" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "Errore durante il debug: %v" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "Si è verificato un errore durante il rilevamento FQBN: %v" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "Si è verificato un errore durante la codifica JSON dell'output: %v" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "Errore durante il caricamento di: %v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "Si è verificato un errore durante la codifica YAML dell'output: %v" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "Si è verificato un errore durante la compilazione: %v" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "Errore durante l'installazione: %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "Si è verificato un errore durante la disintallazione: %v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "Si è verificato un errore durante l'aggiornamento: %v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "Si è verificato un errore durante l'estrazione di %s" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "" "Si è verificato un errore durante la ricerca degli artefatti di compilazione" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "" "Si è verificato un errore durante l'acquisizione delle informazioni di " "debug: %v" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" "Si è verificato un errore nell'acquisizione del percorso assoluto " "dell'archivio degli sketch" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "Impossibile ottenere i dettagli della scheda: %v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" "Si è verificato un errore durante l'acquisizione della directory corrente " "per il database di compilazione: %s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" +"Si è verificato un errore durante la rilevazione della porta predefinita da " +"`sketch.yaml`. Controllare se la cartella degli sketch è corretta oppure " +"utilizzare il flag --port:: %s" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" "Si è verificato un errore durante l'acquisizione delle informazioni della " "libreria %s" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "Impossibile ottenere le informazioni sulle librerie: %v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "" "Si è verificato un errore durante l'acquisizione dei metadati della porta: " "%v" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "" "Si è verificato un errore durante l'acquisizione dei dettagli delle " "impostazioni della porta: %s" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "" "Si è verificato un errore durante la ricezione dell'input da parte " "dell'utente" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "Si è verificato un errore durante l'inizializzazione dell'istanza: %v" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "Errore durante l'installazione %s: %v" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "Errore durante l'installazione della libreria Git: %v" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" "Si è verificato un errore durante l'installazione della libreria zip: %v" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "Si è verificato un errore durante l'installazione della libreria %s" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" "Si è verificato un errore durante l'installazione della piattaforma %s" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "Errore durante l'installazione del tool %s" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" "Si è verificato un errore durante la visualizzazione dell'elenco delle " "schede: %v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "Errore nell'elenco delle librerie: %v" @@ -967,50 +977,46 @@ msgstr "" "Si è verificato un errore durante la visualizzazione dell'elenco delle " "piattaforme: %v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" "Si è verificato un errore durante il caricamento della piattaforma hardware" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "Si è verificato un errore durante il caricamento dell'indice %s" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "Si è verificato un errore durante l'apertura di %s" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "" "Si è verificato un errore durante l'apertura del file di log di debug: %s" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "" "Si è verificato un errore durante l'apertura del codice sorgente che " "sovrascrive i file: %v" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "" "Si è verificato un errore durante il parsing del flag --show-properties: %v" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "" "Si è verificato un errore durante la lettura della directory di compilazione" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "Errore durante la lettura del file di configurazione: %v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "Si è verificato un errore durante la lettura dei file degli sketch" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" "Si è verificato un errore durante la risoluzione delle dipendenze di %[1]s: " @@ -1021,175 +1027,190 @@ msgid "Error retrieving core list: %v" msgstr "" "Si è verificato un errore durante il recupero dell'elenco dei core: %v " -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "Si è verificato un errore durante il ripristino delle modifiche: %s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" "Si è verificato un errore durante il salvataggio dell'indice scaricato" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" "Si è verificato un errore durante il salvataggio della firma dell'indice " "scaricato" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "Si è verificato un errore durante la ricerca delle schede: %v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "Si è verificato un errore durante la ricerca delle librerie: %v" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "Si è verificato un errore durante la ricerca delle piattaforme: %v" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" "Si è verificato un errore durante la serializzazione del database di " "compilazione: %s" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "Errore di impostazione della modalità raw: %s" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "Si è verificato un errore durante l'impostazione del valore: %v" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "Si è verificato un errore durante l'avvio della rilevazione: %v" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "Si è verificato un errore durante la disinstallazione di %[1]s: %[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" "Si è verificato un errore durante l'aggiornamento dell'indice della " "libreria: %v" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "Si è verificato un errore durante l'aggiornamento delle librerie" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "" "Si è verificato un errore durante l'aggiornamento della piattaforma: %s" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "Si è verificato un errore durante la verifica della firma" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" "Si è verificato un errore durante il rilevamento delle librerie incluse da " "%[1]s" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "" "Si è verificato un errore durante la determinazione delle dimensioni dello " "sketch: %s" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" "Si è verificato un errore durante la scrittura del database di compilazione:" " %s" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "Si è verificato un errore durante la scrittura del file: %v" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "Errore: la descrizione del comando non è supportata da %v" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "Errore: il codice sorgente non è valido e sovrascrive i dati: %v" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "Evento" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "Esempi della libreria %s" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "Esempi:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "Eseguibile per il debug" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" "Ci si aspettava che lo sketch compilato fosse nella directory %s, invece è " "un file" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "Impossibile cancellare il chip" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "Programmazione non riuscita" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "Impossibile masterizzare il bootloader" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "Impossibile creare la directory dei dati" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "Impossibile creare la directory degli scaricamenti" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" "Impossibile ascoltare sulla porta TCP: %[1]s. %[2]s non è una porta valida." -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" "Impossibile ascoltare sulla porta TCP: %[1]s. %[2]s è un nome sconosciuto." -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" "Impossibile ascoltare sulla porta TCP: %[1]s. Errore imprevisto: %[2]v" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "Impossibile ascoltare sulla porta TCP: %s. L'indirizzo è già in uso." -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "Caricamento non riuscito" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "File:" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" @@ -1197,26 +1218,26 @@ msgstr "" "La crittografia/firma del firmware richiede la definizione di tutte le " "seguenti proprietà: %s" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "Il primo messaggio deve contenere la richiesta di debug, non i dati." -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "Il flag %[1]s è obbligatorio se usato insieme a: %[2]s" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "Flag:" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" "Forza l'esecuzione degli script post-install (se la CLI non è in esecuzione " "interattiva)." -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." @@ -1224,29 +1245,29 @@ msgstr "" "Forza l'esecuzione degli script pre-uninstall (se la CLI non viene eseguita " "in modo interattivo)." -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" "Forza il salto degli script post-install (se la CLI non è in esecuzione " "interattiva)." -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" "Forza il salto degli script pre-uninstall (se la CLI viene eseguita in modo " "interattivo)." -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "Sono state trovate %d piattaforme corrispondenti \"%s\": %s" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "Fully Qualified Board Name, ad esempio: arduino:avr:uno" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "Il server GDB '%s' non è supportato" @@ -1263,15 +1284,19 @@ msgstr "Genera gli script di completamento" msgid "Generates completion scripts for various shells" msgstr "Genera gli script di completamento per varie shell" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "Sto generando i prototipi di funzione..." -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "Ottiene il valore di una chiave di impostazione." + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "Flag globali:" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1280,29 +1305,29 @@ msgstr "" "lasciando altri %[4]s byte liberi per le variabili locali. Il massimo è " "%[2]s byte." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "Le variabili globali usano %[1]s byte di memoria dinamica." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "Proprietà identificative:" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "Se impostato, i binari saranno esportati nella cartella degli sketch." -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." @@ -1310,169 +1335,166 @@ msgstr "" "Se impostato, restituisce tutti i core installabili e installati, compresi " "quelli installati manualmente." -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" "Include le librerie integrate (dalle piattaforme e dall'IDE) nell'elenco." -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "Include %s directory nell'archivio." -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "Installare le librerie nella cartella IDE-Builtin" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Installato" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "Installato %s" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "Installazione %s" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "Sto installando la libreria %s" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "Sto installando la piattaforma %s" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "Sto installando il tool %s" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "Installa uno o più core e le corrispondenti dipendenze dei tool." -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "Installa nel sistema una o più librerie specificate." -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "Errore interno alla cache" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "La proprietà '%[1]s' non è valida: %[2]s" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" -"Chiamata non valida: dovrebbe mostrare la guida, ma è disponibile solo in " -"modalità testo." - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "FQBN non è valido" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "Indirizzo TCP non valido: manca la porta" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "URL non è valido" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "L' URL aggiuntivo non è valido: %v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -"L' archivio non è valido: il file %{1} non è presente nell'archivio %{2}s" +"Archivio non valido: il file %[1]s non è stato trovato nell'archivio %[2]s" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "L' argomento passato non è valido: %v" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "Proprietà di compilazione non valide" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "La dimensione dei dati della regexp non è valida: %s" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "La dimensione della eeprom della regexp non è valida: %s" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "URL non valido: %s" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "Istanza non è valida" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "Oggetto invalido %s" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "Libreria non è valida" -#: configuration/network.go:63 +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "Livello di log non valido: %s" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "Configurazione di rete non valida: %s" + +#: internal/cli/configuration/network.go:66 msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "network.proxy '%[1]s' non è valido: %[2]s" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "Opzione non valida per --log-level: %s" - -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "Formato di output non valido: %s" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "Indice del pacchetto non valido in %s" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "Il parametro %s non è valido: versione non consentita" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "Il valore pid non è valido: '%s'" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "Il profilo non è valido" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "Scrittura non valida in platform.txt" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "La dimensione della regexp non è valida: %s" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "Timeout non valido: %s" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "Versione non è valida" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "Il valore di vid non è valido: '%s'" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." @@ -1480,74 +1502,75 @@ msgstr "" "Produce solo il database di compilazione, senza compilare. Tutti i comandi " "di compilazione vengono saltati, ad eccezione dei pre* hooks." -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "LIBNAME" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "LIBRERIA" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "LIBRARY_NAME" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "Ultimo" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "La libreria %[1]s è stata dichiarata precompilata:" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" "La libreria %[1]s è già installata, ma con una versione differente: %[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "La libreria %s è già alla versione più recente" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "La libreria %s non è installata" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "Impossibile trovare la libreria %s" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "Impossibile trovare la libreria '%s'" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" "La libreria non può utilizzare entramble le cartelle '%[1]s' e '%[2]s'. " "Doppio controllo in '%[3]s'." -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "Impossibile installare la libreria" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "La libreria è stata installata" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "Licenza: %s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "Collegare tutto insieme..." -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" @@ -1555,15 +1578,15 @@ msgstr "" "Elenca tutte le schede in cui è installata la piattaforma di supporto. È possibile cercare\n" "una scheda specifica, se si specifica il nome della scheda" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "Elenca tutte le schede conosciute e il corrispondente FQBN." -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "Lista delle schede connesse." -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." @@ -1571,7 +1594,7 @@ msgstr "" "Elenco delle opzioni della scheda separate da virgole. Oppure può essere " "usato più volte per più opzioni." -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." @@ -1579,15 +1602,15 @@ msgstr "" "Elenco delle proprietà di costruzione personalizzate separate da virgole. " "Oppure può essere usato più volte per più proprietà." -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "Lista delle libreria con update disponibili." -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "Lista delle piattaforme con update disponibili." -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "Lista di tutte le schede connesse." @@ -1595,119 +1618,127 @@ msgstr "Lista di tutte le schede connesse." msgid "Lists cores and libraries that can be upgraded" msgstr "Elenca i core e le librerie che possono essere aggiornati" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "Sto caricando il file dell'indice: %v" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "Posizione" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "" "Poca memoria disponibile, potrebbero presentarsi problemi di stabilità" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "Manutentore: %s" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" +"Numero massimo di compilazioni parallele. Se impostato a 0, verrà utilizzato" +" il numero disponibile di core della CPU." + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" "Tempo massimo di attesa per la rilevazione della porta, ad es: 30s, 1m" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" "I messaggi con questo livello o superiore saranno registrati. I livelli " "validi sono: %s" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "Manca '%[1]s' nella libreria %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "FQBN mancante (Fully Qualified Board Name)" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "Porta mancante" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "Porta di comunicazione non trovata" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "Manca il protocollo della porta" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "Manca il programmatore" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "Manca un campo obbligatorio del caricamento: %s" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "Manca la dimensione della regexp" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "Manca il percorso dello sketch" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "Impossibile trovare il monitor '%s'" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "Impostazioni sulla porta del monitor:" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "Più di una libreria trovata per \"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "Nome" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "Nome: \"%s\"" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "Nuova porta di caricamento: %[1]s (%[2]s)" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "Nessuna scheda trovata." -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "Nessuna porta predefinita o FQBN impostato" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "Nessuna porta predefinita, FQBN o programmatore impostato" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "Nessuna libreria trovata." -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "Nessuna libreria installata." -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "Non ci sono librerie corrispondenti alla tua ricerca." -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1715,54 +1746,54 @@ msgstr "" "Non ci sono biblioteche corrispondenti alla tua ricerca.\n" "Intendevi dire...\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "Non sono disponibili aggiornamenti per le librerie." -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "Nessun monitor disponibile per il protocollo della porta %s" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "Non sono state trovate piattaforme o librerie non aggiornate." -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "Nessuna piattaforma installata." -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "Non ci sono piattaforme corrispondenti alla tua ricerca." -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "" "Non è stata trovata alcuna porta di upload, come alternativa verrà " "utilizzata %s" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "Non è stata trovata una soluzione valida per le dipendenze" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" "Memoria esaurita; guarda %[1]s per consigli su come ridurne l'utilizzo." -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "Non usata: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "Sistema Operativo:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "Scheda Arduino ufficiale:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." @@ -1770,43 +1801,43 @@ msgstr "" "Omette i dettagli della libreria per tutte le versioni tranne la più recente" " (produce un output JSON più compatto)." -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "Apre una porta di comunicazione con una scheda." -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "Opzione:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" "Facoltativo, può essere: %s. Utilizzato per indicare a gcc quale livello di " "warning utilizzare (flag -W)." -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" "Facoltativo, ripulisce la cartella di build e non usa nessuna build in " "cache." -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" "Facoltativo, ottimizza l'output di compilazione per il debug, piuttosto che " "per il rilascio." -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "Facoltativo, sopprime quasi tutti gli output." -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "Facoltativo, attiva la modalità verbosa." -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." @@ -1814,7 +1845,7 @@ msgstr "" "Facoltativo. Percorso di un file .json che contiene una serie di " "sostituzioni del codice sorgente dello sketch." -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." @@ -1822,52 +1853,52 @@ msgstr "" "Sovrascrive una proprietà di build con un valore personalizzato. Può essere " "usato più volte per più proprietà." -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "Sovrascrivi la configurazione corrente del file." -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "Sovrascrivi un archivio già esistente" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "Sovrascrivi il file sketch .ino esistente" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "PACKAGER" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "URL pacchetto:" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "Manutentore del pacchetto: " -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "Nome pacchetto:" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "Aiuto in linea del pacchetto:" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "Website pacchetto:" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "Paragrafo: %s" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "Percorso" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." @@ -1875,7 +1906,7 @@ msgstr "" "Percorso di un gruppo di librerie. Può essere usato più volte o le voci " "possono essere separate da virgole." -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." @@ -1883,11 +1914,11 @@ msgstr "" "Percorso della cartella principale di una singola libreria. Può essere usato" " più volte o le voci possono essere separate da virgole." -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "Percorso del file in cui verranno scritti i log." -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." @@ -1895,19 +1926,20 @@ msgstr "" "Percorso in cui salvare i file compilati. Se omesso, verrà creata una " "directory nel percorso temporaneo predefinito del tuo sistema operativo." -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "Esecuzione di un touch reset a 1200-bps sulla porta seriale %s" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "La piattaforma %s è già installata" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "La piattaforma %s è installata" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" @@ -1915,55 +1947,55 @@ msgstr "" "La piattaforma %s non è stata trovata in nessun indice conosciuto.\n" "Forse è necessario aggiungere un URL di 3terze parti?" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "La piattaforma %s è stata disinstallata" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "La piattaforma '%s' è già aggiornata all'ultima versione" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "Impossibile trovare la piattaforma '%s'" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "ID piattaforma" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "L' ID della piattaforma non è esatto" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "URL piattaforma:" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "Architettura della piattaforma:" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "Categoria della piattaforma:" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "Checksum della piattaforma:" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "Nome del file della piattaforma:" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "Nome piattaforma:" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "Dimensione della piattaforma (bytes):" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" @@ -1971,7 +2003,7 @@ msgstr "" "Specificare un FQBN. Sono state rilevate più schede sulla porta %[1]s con " "protocollo %[2]s" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" @@ -1979,34 +2011,39 @@ msgstr "" "Specificare un FQBN. La scheda sulla porta %[1]s con protocollo %[2]s non " "può essere identificata" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "Porta" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "Porta chiusa: %v" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "Errore di monitoraggio della porta" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "Impossibile trovare la libreria precompilata in \"%[1]s\"" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "Visualizza i dettagli di una scheda." -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "Stampa il codice preelaborato su stdout invece di compilarlo." -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "Stampa i log sull'output standard." +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "Stampa l'output in formato JSON." + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "Stampa la configurazione attuale" @@ -2015,180 +2052,251 @@ msgstr "Stampa la configurazione attuale" msgid "Prints the current configuration." msgstr "Stampa la configurazione attuale." -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "Impossibile trovare il profilo '%s'" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "Impossibile trovare il programmatore '%s'" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "Nome del programmatore" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "Programmatore da utilizzare, ad esempio: atmel_ice" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "Programmatori:" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "La proprietà '%s' non è definita" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "Protocollo" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "La dotazione comprende: %s" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "Rimuove uno o più valori da un'impostazione." -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "Sostituire %[1]s con %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "Sto sostituendo la piattaforma %[1]s con %[2]s" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "Tool richiesto:" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "Avvio come demone sulla porta: %s" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "" "Avvio in modalità silenziosa, mostra solo l'ingresso e l'uscita del monitor." -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." -msgstr "" -"Avviato come demone, l'inizializzazione dei core e delle librerie viene " -"eseguita una sola volta." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "Avvia la CLI di Arduino come demone gRPC." -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "Esecuzione della normale compilazione del core..." -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "Sto avviando lo script pre_uninstall." -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "TERMINE_DI_RICERCA" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "Path del file SVD" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "Salva gli artefatti di compilazione in questa directory." -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" "Cerca una scheda nel gestore delle schede usando le parole chiave " "specificate." -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "Cerca una scheda nel gestore delle schede." -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" "Cerca un core nel gestore delle schede, usando le parole chiave specificate." -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "Cerca un core nel gestore delle schede." -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." -msgstr "" -"Ricerca di uno o più dati di librerie (ricerca senza distinzione tra " -"maiuscole e minuscole)." - #: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "Cerca i dati di una o più librerie." - -#: internal/cli/lib/search.go:157 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" +"Cerca le librerie che corrispondono a zero o più termini di ricerca.\n" +"\n" +"Tutte le ricerche vengono eseguite senza distinzione tra maiuscole e minuscole. Le query contenenti\n" +"termini di ricerca multipli restituiranno solo le librerie che corrispondono a tutti i termini.\n" +"\n" +"I termini di ricerca, che non corrispondono alla sintassi QV descritta di seguito, sono termini di ricerca di base e corrispondono alle librerie che includono il termine in uno dei seguenti campi:\n" +"- Autore\n" +"- Nome\n" +"- Paragrafo\n" +"- Fornisce\n" +"- Frase\n" +"\n" +"Una sintassi speciale, chiamata qualifier-value (QV), indica che un termine di ricerca deve\n" +"essere confrontato con un solo campo di ogni voce dell'indice della libreria. Questa sintassi \n" +"utilizza il nome di un campo dell'indice (senza distinzione tra maiuscole e minuscole), un segno \n" +"di uguale (=) o i due punti (:) e un valore, ad esempio 'name=ArduinoJson' o 'provides:tinyusb.h'.\n" +"\n" +"I termini di ricerca QV, che utilizzano un separatore di due punti, corrisponderanno a tutte le librerie con il valore in qualsiasi punto del campo nominato mentre, i termini di ricerca QV che utilizzano un separatore di uguale, corrisponderanno solo alle librerie con il valore esatto fornito nel campo nominato.\n" +"\n" +"I termini di ricerca QV possono includere spazi incorporati utilizzando caratteri con virgolette doppie (\") intorno al valore o all'intero termine, ad esempio \"categoria=\"Elaborazione dati\"\" e \"categoria=elaborazione dati\" sono equivalenti. Un termine QV può includere un carattere letterale con doppio apice preceduto dal carattere backslash (\\).\n" +"\n" +"NOTA: i termini di ricerca QV, che utilizzano caratteri con virgolette doppie o backslash passati come argomenti della riga di comando, possono richiedere l'uso di virgolette o di escape, per evitare che la shell interpreti erroneamente tali caratteri.\n" +"\n" +"- Architetture\n" +"- Categoria\n" +"- Dipendenze\n" +"- Licenza\n" +"- Manutentore\n" +"- Tipi\n" +"- Versione\n" +"- Sito web\n" +"\t\t" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "Cerca una o più biblioteche che corrispondono ad una ricerca." + +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "Frase: %s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "Path del server" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "Il server ha risposto con: %s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "Tipo di server" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "Imposta un valore per un campo richiesto dal caricamento." -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." msgstr "Imposta il terminale in modalità raw (non bufferizzata)." -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "Imposta un valore di regolazione." -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -"Imposta i valori predefiniti per porta e FQBN. Se non viene specificata " -"alcuna porta o FQBN, vengono visualizzati la porta e l'FQBN predefiniti " -"correnti." +"Imposta i valori predefiniti per porta e FQBN. Se non vengono specificati " +"porta, FQBN o programmatore, vengono visualizzati la porta, l'FQBN ed il " +"programmatore predefiniti." -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "Imposta dove salvare il file di configurazione." -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "Impostazioni" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "La chiave delle impostazioni non esiste" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" +"Dovrebbe mostrare un messaggio di aiuto, ma è disponibile solo in modalità " +"TESTO." -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "Mostra tutte le versioni del core disponibili." -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "Mostra tutte le impostazioni della porta di comunicazione." -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" "Mostra anche le schede contrassegnate come 'nascoste' nella piattaforma." -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." @@ -2197,11 +2305,11 @@ msgstr "" "show-properties=unexpanded\" se si desidera che siano esattamente come sono " "definite." -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "Mostra tutti i dettagli delle schede" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." @@ -2209,15 +2317,15 @@ msgstr "" "Visualizza informazioni dettagliate riguardanti una scheda, in particolare " "se ci sono opzioni che possono essere specificate tramite FQBN." -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "Mostra solo i nomi delle librerie." -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "Mostra l'elenco dei programmatori disponibili" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2228,11 +2336,11 @@ msgid "Show outdated cores and libraries after index update" msgstr "" "Mostra i core e le librerie non aggiornate dopo l'aggiornamento dell'indice" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "Mostra la lista delle librerie installate." -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2246,15 +2354,15 @@ msgstr "" "libreria. Per impostazione predefinita, le librerie fornite come built-in da piattaforme/core non\n" "sono elencate, ma possono essere elencate aggiungendo il flag --all." -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "Mostra l'elenco delle piattaforme installate." -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "Mostra l'elenco degli esempi delle librerie." -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." @@ -2262,21 +2370,21 @@ msgstr "" "Mostra l'elenco degli esempi delle librerie. È possibile indicare un nome " "come argomento per cercare una libreria specifica." -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" "Mostra il numero di versione di Arduino CLI installato sul tuo sistema." -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "Mostra il numero di versione di Arduino CLI." -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "Dimensione (bytes):" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" @@ -2284,21 +2392,21 @@ msgstr "" "Lo sketch non si trova nel percorso di compilazione. Specificare un percorso" " di compilazione diverso" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "Sketch è stato creato in: %s" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "Profilo dello sketch da utilizzare" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" "Sketch troppo grande; guarda %[1]s per consigli su come ridurne la " "dimensione" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2306,7 +2414,7 @@ msgstr "" "Lo sketch usa %[1]s byte (%[3]s%%) dello spazio disponibile per i programmi." " Il massimo è %[2]s byte." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" @@ -2314,74 +2422,86 @@ msgstr "" "Gli sketch con estensione .pde sono deprecati, rinominare i seguenti file in" " .ino:" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "Salta il linking dell'eseguibile finale." -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" "Salto il touch reset a 1200-bps: nessuna porta seriale è stata selezionata!" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "Salta la creazione dell'archivio di: %[1]s" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "Salta la compilazione di: %[1]s" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" "Salta il rilevamento delle dipendenze della libreria precompilata %[1]s" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "Salta la configurazione della piattaforma." -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "Salto lo script pre_uninstall." -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "Salta la configurazione dello strumento." -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "Salta: %[1]s" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "Non è stato possibile aggiornare alcuni indici." -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" "Alcuni aggiornamenti non sono andati a buon fine, controlla l'output per i " "dettagli." -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "TOUCH: si è verificato un errore durante il reset: %s" - -#: internal/cli/daemon/daemon.go:58 +#: internal/cli/daemon/daemon.go:76 msgid "The TCP port the daemon will listen to" msgstr "La porta TCP su cui il demone si metterà in ascolto" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "Il formato di output del comando può essere: %s" + +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "" "Il file di configurazione personalizzato (se non specificato, verrà " "utilizzato quello predefinito)." -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "Il flag --debug-file deve essere usato con --debug." -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "La configurazione fornita scheda/programmatore NON supporta il debug." + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "La configurazione fornita scheda/programmatore supporta il debug." + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "L'istanza non è più valida e deve essere reinizializzata." + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" @@ -2389,7 +2509,7 @@ msgstr "" "La chiave '%[1]v' non è un elenco di elementi, non può essere aggiunta.\n" "Forse si può usare '%[2]s'?" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" @@ -2397,11 +2517,11 @@ msgstr "" "La chiave '%[1]v' non è un elenco di elementi, non può essere rimossa.\n" "Forse si può usare '%[2]s'?" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "La libreria %s richiede altre installazioni:" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." @@ -2410,7 +2530,7 @@ msgstr "" "crittografare un binario durante il processo di compilazione. Utilizzata " "solo dalle piattaforme che la supportano." -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." @@ -2419,11 +2539,11 @@ msgstr "" " durante il processo di compilazione. Utilizzata solo dalle piattaforme che " "la supportano." -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "Il formato di output dei log può essere: %s" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." @@ -2432,11 +2552,11 @@ msgstr "" "firmare e crittografare un binario. Utilizzato solo dalle piattaforme che lo" " supportano." -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "La piattaforma non supporta '%[1]s' per le librerie precompilate." -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2456,93 +2576,94 @@ msgstr "" "Questo comando mostra un elenco di core e/o librerie installate\n" "che possono essere aggiornate. Se non è necessario aggiornare nulla, l'output è vuoto." -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "Timestamp di ogni linea in entrata." -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "Il tool %s è già installato" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "Il tool %s è disinstallato" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "La toolchain '%s' non è supportata" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "Il percorso della toolchain" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "Il prefisso della toolchain" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "Il tipo della toolchain" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "Prova ad eseguire %s" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "Attiva la modalità verbosa." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "Tipo" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "Tipi: %s" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "URL:" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" "Non è possibile memorizzare nella cache il core compilato, riferisci ai " "manutentori di %[1]s di seguire le istruzioni %[2]s" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "Impossibile ottenere la cartella documenti: %v" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "Impossibile ottenere la cartella dati dell'app locale: %v" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "Impossibile ottenere la home directory dell'utente: %v" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "Impossibile aprire il file per il logging: %s" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "Non è stato possibile analizzare l'URL" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "Disinstallazione di %s" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "Disinstallazione di %s, il tool non è più necessario." -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." @@ -2550,15 +2671,15 @@ msgstr "" "Disinstalla uno o più core e le corrispondenti dipendenze dei tool se non " "vengono più utilizzati." -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "Disinstalla una o più librerie." -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "Sconosciuto" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "FQBN sconosciuto" @@ -2571,23 +2692,23 @@ msgid "Updates the index of cores and libraries to the latest versions." msgstr "" "Aggiorna l'indice dei core e delle librerie alle versioni più recenti." -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "Aggiorna l'indice dei core alla versione più recente." -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "Aggiorna l'indice dei core." -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "Aggiorna l'indice delle librerie alla versione più recente." -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "Aggiorna l'indice delle librerie." -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "L'aggiornamento non accetta parametri con la versione" @@ -2599,58 +2720,58 @@ msgstr "Aggiorna i core e le librerie installate alla versione più recente." msgid "Upgrades installed cores and libraries." msgstr "Aggiorna i core e le librerie installate." -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "Aggiorna le librerie installate." -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "Aggiorna una o tutte le piattaforme alla versione più recente." -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "Carica gli sketch di Arduino." -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" "Carica gli sketch di Arduino. Questo NON compila lo sketch prima del " "caricamento." -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "Indirizzo della porta di caricamento, ad esempio: COM3 o /dev/ttyACM2" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "Porta di caricamento trovata su %s" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "Protocollo della porta di caricamento, ad esempio: seriale" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "Carica il binario dopo la compilazione." -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" "Carica il bootloader sulla scheda utilizzando un programmatore esterno." -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "Carica il bootloader." -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" "Il caricamento sulla scheda specificata tramite il protocollo %s richiede le" " seguenti informazioni:" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" @@ -2658,106 +2779,107 @@ msgstr "" "Gli URL non possono contenere virgole. Separare con uno spazio gli url multipli esportati come env var:\n" "%s" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "Uso: " -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "Usa %s per ulteriori informazioni su un comando." -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "Libreria utilizzata" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "Piattaforma utilizzata" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Usata: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "Utilizzo della scheda '%[1]s' dalla piattaforma nella cartella: %[2]s" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" "Utilizzo delle dipendenze delle librerie nella cache per i file: %[1]s" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "Utilizzo del core '%[1]s' dalla piattaforma nella cartella: %[2]s" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "Uso la libreria %[1]s alla versione %[2]s nella cartella: %[3]s %[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "Uso la libreria %[1]s nella cartella: %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "Utilizzo del core precompilato: %[1]s" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "Utilizzo della libreria precompilata in %[1]s" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "Uso il file precedentemente compilato: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "VERSIONE" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "VERSION_NUMBER" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "Valori" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "Verifica dei binari dopo il caricamento." -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "Versione" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "Versioni: %s" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "ATTENZIONE: non è possibile configurare la piattaforma: %s" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "ATTENZIONE non è possibile configurare lo strumento: %s" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "AVVISO non è possibile eseguire lo script pre_uninstall: %s" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" "ATTENZIONE: lo sketch è compilato utilizzando una o più librerie " "personalizzate." -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2766,26 +2888,26 @@ msgstr "" "%[2]s e potrebbe non essere compatibile con la tua scheda che utilizza " "l'architettura %[3]s" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "In attesa della porta di caricamento..." -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" "Attenzione: la scheda %[1]s non definisce una preferenza per %[2]s. " "Autoimpostato su: %[3]s" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "Sito web: %s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "Scrive la configurazione corrente in un file di configurazione." -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." @@ -2793,26 +2915,22 @@ msgstr "" "Scrive la configurazione corrente nel file di configurazione nella directory" " dei dati." -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "Scrittura del file di configurazione: %v" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" "Non puoi utilizzare il flag %s durante la compilazione con un profilo." -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "L'hash dell'archivio è diverso dall'hash dell'indice" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" "l'archivio non è valido: sono stati trovati più file nel livello superiore " "del file zip" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "" "l'archivio non è valido: nessun file trovato nella cartella principale del " @@ -2822,382 +2940,353 @@ msgstr "" msgid "archivePath" msgstr "percorso dell'archivio" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "Manca il pattern arduino-preprocessor" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "rileva automaticamente l'artefatto di compilazione: %s" - -#: internal/cli/feedback/stdio.go:35 +#: internal/cli/feedback/stdio.go:37 msgid "available only in text format" msgstr "disponibile solo in formato testo" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "ricerca di base per \"audio\"" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "ricerca di base per \"esp32\" e \"display\" limitata al manutentore ufficiale" + +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "file binario non trovato in %s" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "la scheda %s non è stata trovata" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "nomescheda" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "la directory delle librerie integrate non è configurata" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "Chiamata a %[1]s: %[2]w" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "Impossibile trovare l'ultima versione di %s" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "Impossibile trovare l'ultima versione del tool %s" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "Impossibile trovare il file principale dello sketch in %s" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "Non riesco a trovare un pattern per il rilevamento con id %s" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "Impossibile recuperare il flusso di errori standard: %s" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "Impossibile recuperare il flusso di output standard: %s" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "candidati" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "Impossibile eseguire il tool di caricamento: %s" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "Sto controllando l'integrità dell'archivio locale" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "pulizia del percorso di compilazione" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "comando" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "il comando '%[1]s' non è andato a buon fine: %[2]s" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "il comando non è andato a buon fine: %s" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "comunicazione fuori sincronia, atteso '%[1]s', ricevuto '%[2]s'" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "calcolo dell'hash: %s" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "La chiave della configurazione %s contiene un carattere non valido" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "Il valore della configurazione %s contiene un carattere non valido" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "copia della libreria nella directory di destinazione:" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "impossibile trovare un artefatto di compilazione valido" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "impossibile sovrascrivere" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "Impossibile rimuovere la vecchia libreria" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "non è stato possibile aggiornare il file del progetto" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "creazione in corso della cartella cache del core: %s" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "creazione di installed.json in %[1]s: %[2]s" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "creazione di una directory temporanea per l'estrazione: %s" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "la sezione dati supera lo spazio disponibile nella scheda" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "la dipendenza '%s' non è disponibile" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "la destinazione esiste già" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "" "La directory di destinazione %s esiste già, non è possibile installare" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "il percorse della directory è già esistente" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "la directory non esiste: %s" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" -msgstr "il processo di rilevamento %[1]s non è stato avviato: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "sono stati trovati %[1]s processi non avviati" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "rilevamento %s non è stato trovato" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "il rilevamento %s non è installato" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "il rilascio del rilevamento non è stato trovato: %s" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "scarica una versione specifica (in questo caso la 1.6.9)." -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "scarica l'ultima versione del core SAMD di Arduino." -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "scaricato" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "sto scaricando il tool %[1]s: %[2]s" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "identificativo della scheda vuoto" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" "si è verificato un errore durante il caricamento del file di progetto dello " "sketch:" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "si è verificato un errore durante l'apertura di %s" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "valore di parsing dell'errore: %v" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "si è verificato un errore durante il parsing dei vincoli di versione" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "" "si è verificato un errore durante l'elaborazione della risposta del server" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "" "si è verificato un errore durante l'interrogazione di Arduino Cloud Api" -#: arduino/resources/install.go:67 +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" +msgstr "estrazione in corso dell'archivio" + +#: internal/arduino/resources/install.go:68 msgid "extracting archive: %s" msgstr "estrazione dell'archivio: %s" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" -msgstr "estrazione dell'archivio: %w" - -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "Impossibile calcolare l'hash del file \"%s\"" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "Impossibile inizializzare il client http" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "" "La dimensione dell'archivio recuperato differisce dalla dimensione " "specificata nell'indice" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "i file dell'archivio devono essere collocati in una sottodirectory" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "sto cercando il percorso assoluto di %s" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "flag" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "il seguente collegamento simbolico %s" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "per una specifica versione." -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "per la versione più recente." -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "per la specifica versione." -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" -msgstr "sto generando installation.id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "il campo di fqbn %s contiene un carattere non valido" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" -msgstr "sto generando installation.secret: %w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "generazione in corso di installation.id" -#: arduino/resources/download.go:53 +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "generazione in corso di installation.secret" + +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "sto recuperando le informazioni sui file dell'archivio: %s" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "sto recuperando le informazioni sull'archivio: %s" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "sto recuperando il percorso dell'archivio: %s" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "sto recuperando le proprietà di costruzione della scheda %[1]s: %[2]s" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" "sto recuperando le dipendenze del rilevamento per la piattaforma %[1]s: " "%[2]s" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" "sto recuperando le dipendenze del monitor per la piattaforma %[1]s: %[2]s" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "sto recuperando la directory padre di %[1]s: %[2]s" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" "sto recuperando le dipendenze dei tool per la piattaforma %[1]s: %[2]s" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "La directory di installazione non è stata impostata" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "Sto installando il tool %[1]s: %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "Sto installando la piattaforma %[1]s: %[2]s" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" "il terminale interattivo non è supportato per il formato dell'output '%s'" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "la direttiva '%s' non è valida" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "il messaggio 'add' non è valido: porta mancante" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "il messaggio 'remove' non è valido: porta mancante" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "il formato del checksum non è valido: %s" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "l'opzione di configurazione non è valida: %s" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "l'architettura del core vuota non è valida '%s'" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "l'argomento del core vuoto non è valido" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "il nome del core vuoto non è valido '%s'" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "il riferimento al core vuoto non è valido '%s'" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "la versione del core vuota non è valida: '%s'" @@ -3209,87 +3298,85 @@ msgstr "il nome della libreria vuoto non è valido" msgid "invalid empty library version: %s" msgstr "la versione della libreria vuota non è valida: %s" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "è stata trovata un'opzione vuota non valida" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "url git non è valido" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "hash non valido '%[1]s': %[2]s" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "elemento non valido %s" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "la direttiva della libreria non è valida:" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "il layout della libreria non è valido: %s" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "la posizione della libreria non è valida: %s" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "libreria non valida: non è stato trovato alcun file di intestazione" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "l'opzione '%s' non è valida" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "l'opzione '%s' non è valida." -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -"il percorso della creazione della cartella di configurazione non è valido: " -"%[1]s error: %[2]w" +"path non valido per la creazione della cartella di configurazione: errore " +"%[1]s" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" -msgstr "" -"il percorso per la scrittura del file di inventario non è valido: %[1]s " -"error: %[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "path non valido per la scrittura del file di inventario: errore %[1]s" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "la dimensione dell'archivio della piattaforma non è valida: %s" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "l'identificatore della piattaforma non è valido" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "URL dell'indice della piattaforma non è valido:" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "il riferimento al monitor collegabile non è valido: %s" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "il valore di configurazione della porta non è valido per %s: %s" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "la configurazione della porta non è valida: %s" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "scrittura non valida '%[1]s': %[2]s" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " @@ -3299,150 +3386,161 @@ msgstr "" "alfanumerico o \"_\", quelli successivi possono contenere anche \"-\" e " "\".\". L'ultimo non può essere \".\"." -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "il valore '%[1]s' non è valido per l'opzione '%[2]s'" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "la directory della versione non è valida %s" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "la versione non è valida:" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "la chiave non è stata trovata nelle impostazioni" - -#: internal/cli/core/search.go:45 +#: internal/cli/core/search.go:39 msgid "keywords" msgstr "parole chiave" -#: arduino/libraries/librariesmanager/install.go:130 +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "librerie create da Daniel Garcia" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "librerie create solo da Adafruit con \"gfx\" nel loro nome" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "librerie che dipendono almeno da \"IRremote\"" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "librerie che dipendono solo da \"IRremote\"" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "librerie con \"buzzer\" nel campo nome" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "librerie con un nome che corrisponde esattamente a \"pcf8523\"" + +#: internal/arduino/libraries/librariesmanager/install.go:126 msgid "library %s already installed" msgstr "la libreria %s è già installata" -#: arduino/libraries/librariesmanager/install.go:319 +#: internal/arduino/libraries/librariesmanager/install.go:315 msgid "library not valid" msgstr "la libreria non è valida" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" -msgstr "il percorso della libreria non esiste: %s" - -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "elenco delle porte seriali" - -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 msgid "loading %[1]s: %[2]s" msgstr "caricamento di %[1]s: %[2]s" -#: arduino/cores/packagemanager/loader.go:351 +#: internal/arduino/cores/packagemanager/loader.go:314 msgid "loading boards: %s" msgstr "caricamento delle schede: %s" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" -msgstr "caricamento dei tool in dotazione da %s" - -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "caricamento del file indice json %[1]s: %[2]s" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "caricamento della libreria da %[1]s: %[2]s" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "caricamento di library.properties: %s" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "rilascio della piattaforma di caricamento %s" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "caricamento di platform.txt" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "caricamento della piattaforma richiesta %s" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "caricamento del tool richiesto %s" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "rilascio del tool di caricamento in %s" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "sto cercando boards.txt in %s" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "ricerca degli artefatti di compilazione in corso" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "il file principale manca dallo sketch: %s" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "Manca la direttiva '%s'" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "manca il checksum di: %s" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "manca il pacchetto %[1]s a cui fa riferimento la scheda %[2]s" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" "Manca l'indice del pacchetto %s, non possono essere garantiti aggiornamenti " "futuri" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "manca la piattaforma %[1]s:%[2]s referenziata dalla scheda %[3]s" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" "manca la release della piattaforma %[1]s:%[2]s a cui fa riferimento la " "scheda %[3]s" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "Firma mancante" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "release del monitor non è stata trovata: %s" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "sto spostando l'archivio estratto nella directory di destinazione: %s" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "sono stati trovati più artefatti di compilazione: '%[1]s' e '%[2]s'" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "Sono stati trovati più file di sketch principale (%[1]v, %[2]v)" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" @@ -3450,418 +3548,395 @@ msgstr "" "non è disponibile una versione degli strumenti di %[1]s per il sistema " "operativo corrente, prova a contattare %[2]s" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "non è stato specificato alcun eseguibile" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "non è stata specificata alcuna istanza" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "non è stata specificata alcuna directory/file di sketch o di build" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "nessun file o directory di questo tipo" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" "non c'è una directory radice unica nell'archivio, ma sono state trovate " "'%[1]s' e '%[2]s'." -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "Non è stata fornita alcuna porta di upload" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "Non è stato trovato uno sketch valido in %[1]s: manca %[2]s" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" "non sono disponibili versioni per il sistema operativo corrente, prova a " "contattare %s" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "non è un FQBN: %s" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "non è in esecuzione in un terminale" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "apertura del file di archivio: %s" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "apertura di boards.txt" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "apertura della porta a 1200bps" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "apertura del file della firma: %s" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "apertura del file di destinazione: %s" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "il pacchetto %s non è stato trovato" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "Il pacchetto '%s' non è stato trovato" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "parsing dell'indice all'interno dell'IDE" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "sto facendo il parsing di fqbn: %s" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "sto facendo il parsing di library_index.json: %s" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "il percorso non è una directory della piattaforma: %s" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "la piattaforma %[1]s non è stata trovata nel pacchetto %[2]s" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" -msgstr "La piattaforma %s non ha rilasci disponibili" - -#: arduino/cores/packagemanager/package_manager.go:298 +#: internal/arduino/cores/packagemanager/package_manager.go:341 msgid "platform %s is not installed" msgstr "la piattaforma %s non è installata" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "la piattaforma non è disponibile per il sistema operativo in uso" + +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "piattaforma non installata" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "utilizza invece --build-property." -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "rilevamento collegabile già aggiunto: %s" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "porta" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "la porta non è stata trovata: %[1]s %[2]s" -#: arduino/monitor/monitor.go:236 +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "programmatore" + +#: internal/arduino/monitor/monitor.go:235 msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" "la versione del protocollo non è supportata: richiesta %[1]d, ottenuta %[2]d" -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" -msgstr "la versione del protocollo non è supportata: richiesta 1, ottenuta %d" - -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" -msgstr "lettura di %[1]s: %[2]s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "lettura della directory %[1]s: %[2]s" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" -msgstr "lettura del contenuto della directory %[1]s: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "lettura in corso del contenuto della directory %[1]s" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "lettura cartella %s" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" -msgstr "lettura del contenuto della directory %s: %w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" +msgstr "lettura in corso del contenuto della directory %s" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "lettura del file %[1]s: %[2]s" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" -msgstr "Lettura dei file: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "lettura dei file in corso" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "lettura degli header delle librerie: %s" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" -msgstr "lettura delle directory lib src: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "lettura in corso degli header della libreria" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" -msgstr "lettura degli header delle librerie: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "lettura in corso della directory dei sorgenti della libreria: %s" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "lettura di library_index.json: %s" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "lettura della directory principale del pacchetto: %s" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "lettura degli sketch in corso" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "scrittura non trovata '%s'" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "il rilascio %[1]s non è stato trovato per il tool %[2]s" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "il rilascio non può essere nullo" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "sto rimuovendo il file di archivio danneggiato: %s" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "rimozione directory della libreria: %s" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "sto rimuovendo i file della piattaforma: %s" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" "la versione richiesta %[1]s non è stata trovata per la piattaforma %[2]s" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "sto recuperando le chiavi pubbliche di Arduino: %s" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "esempi di scansione: %s" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" -msgstr "ricerca di builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "scansione degli esempi di sketch in corso" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "ricerca nella directory principale del pacchetto: %s" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "sto impostando DTR su OFF" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "Il nome dello sketch non può essere vuoto" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "il nome dello sketch può essere riservato \"%[1]s\"" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" "il nome dello sketch è troppo lungo (%[1]d caratteri). La lunghezza massima " "consentita è %[2]d" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "il percorso dello sketch non è valido" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "percorso dello sketch" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "la sorgente non è una directory" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "Avvio della rilevazione %s" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "verifica del checksum dell'archivio: %s" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "verifica delle dimensioni dell'archivio: %s" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "verifica se l'archivio è memorizzato nella cache: %s" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "verifica l'integrità dell'archivio locale: %s" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "la sezione del testo supera lo spazio disponibile nella scheda" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "il database di compilazione potrebbe essere incompleto o impreciso" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "la piattaforma non ha rilasci" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "il server ha risposto con lo stato %s" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "timeout in attesa del messaggio" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "timeout in attesa di un messaggio da %s" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "il tool %s non è gestito dal gestore dei pacchetti" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "Il tool %s non è stato trovato" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "il tool '%[1]s' non è stato trovato nel pacchetto '%[2]s'" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "Il tool non è installato" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "il rilascio del tool non è stato trovato: %s" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "la versione %s del tool non è stata trovata" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" "sono necessarie due versioni diverse della libreria %[1]s: %[2]s e %[3]s" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "" "non è possibile calcolare il percorso relativo allo sketch per l'elemento" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "non è possibile creare una cartella per salvare lo sketch" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "non è possibile creare la cartella contenente l'elemento" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" "non è possibile eseguire il marshalling della configurazione in YAML: %v" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "non è possibile leggere il contenuto dell'elemento di destinazione" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "non è stato possibile leggere i contenuti della risorsa" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "non è possibile scrivere sul file di destinazione" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "pacchetto sconosciuto %s" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "piattaforma sconosciuta %s:%s" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "estensione sconosciuta per il file sketch \"%s\"" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "l'algoritmo dell'hash non è supportato: %s" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "aggiorna arduino:samd all'ultima versione" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "aggiornare tutto con l'ultima versione disponibile" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "errore durante il caricamento: %s" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "la directory dell'utente non è configurata" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "l'input dell'utente non è supportato per il formato dell'output '%s'" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "l'input dell'utente non è supportato nella modalità non interattiva" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "la versione %s non è disponibile per questo sistema operativo" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "la versione %s non è stata trovata" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "formato errato nella risposta del server" diff --git a/i18n/data/ja.po b/internal/i18n/data/ja.po similarity index 52% rename from i18n/data/ja.po rename to internal/i18n/data/ja.po index 698c7677b7e..159a7e585a8 100644 --- a/i18n/data/ja.po +++ b/internal/i18n/data/ja.po @@ -11,124 +11,108 @@ msgstr "" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "%[1]s パターンが見つかりません" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, メッセージ: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, ポート: %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, ポート: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, プロトコルバージョン: %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%sはすでにダウンロードされています" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "%sと%sは同時に利用できません" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "%sをインストールしました" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "%sはすでにインストールされています。" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "%sはディレクトリではありません" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "(レガシー)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -136,350 +120,358 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "%[1]sにビルドされたコア(キャッシュ)をアーカイブ中です" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "ブートローダのファイルが指定されましたが次が不足しています:%[1]s" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "スケッチをコンパイルしています..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -487,7 +479,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "" @@ -495,100 +487,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "初期値" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "" @@ -602,289 +594,300 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -892,44 +895,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -937,203 +936,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "" @@ -1150,312 +1164,316 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "" "最大%[2]sバイトのRAMのうち、グローバル変数が%[1]sバイト(%[3]s%%)を使っていて、ローカル変数で%[4]sバイト使うことができます。" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "グローバル変数は%[1]sバイトのRAMを使用しています。" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "インストール済" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/configuration/network.go:66 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1463,385 +1481,397 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "スケッチが使用できるメモリが少なくなっています。動作が不安定になる可能性があります。" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "%[2]sのライブラリに「%[1]s」がありません" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "「%[1]s」に対して複数のライブラリが見つかりました" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "スケッチが使用するメモリが足りません。メモリを節約する方法については、以下のURLのページを参照してください。%[1]s" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "未使用:%[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "シリアルポート" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1850,192 +1880,233 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2044,11 +2115,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2057,167 +2128,179 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "スケッチが大きすぎます。%[1]s には、小さくするコツが書いてあります。" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "最大%[2]sバイトのフラッシュメモリのうち、スケッチが%[1]sバイト(%[3]s%%)を使っています。" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2231,105 +2314,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "タイプ" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2341,23 +2425,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2369,201 +2453,198 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "使用済:%[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "次のフォルダのライブラリ%[1]sバージョン%[2]sを使用中:%[3]s %[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "次のフォルダのライブラリ%[1]sを使用中:%[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "以前コンパイルされたファイルを使用中:%[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "" "警告:ライブラリ%[1]sはアーキテクチャ%[2]sに対応したものであり、アーキテクチャ%[3]sで動作するこのボードとは互換性がないかもしれません。" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2571,370 +2652,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" msgstr "" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:68 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2946,635 +2998,623 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:126 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:341 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/kk.po b/internal/i18n/data/kk.po similarity index 100% rename from i18n/data/kk.po rename to internal/i18n/data/kk.po diff --git a/i18n/data/ko.po b/internal/i18n/data/ko.po similarity index 52% rename from i18n/data/ko.po rename to internal/i18n/data/ko.po index 86386853885..e966d20453b 100644 --- a/i18n/data/ko.po +++ b/internal/i18n/data/ko.po @@ -9,124 +9,108 @@ msgstr "" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "%[1]s 패턴이 없습니다" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "(레거시)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -134,350 +118,358 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "부트로더 파일이 지정되었으나 누락됨: %[1]s" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "스케치를 컴파일 중…" -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -485,7 +477,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "" @@ -493,100 +485,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "디폴트" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "" @@ -600,289 +592,300 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -890,44 +893,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -935,203 +934,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "" @@ -1148,312 +1162,316 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "" "전역 변수는 동적 메모리 %[1]s바이트(%[3]s%%)를 사용, %[4]s바이트의 지역변수가 남음. 최대는 %[2]s 바이트." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "전역 변수는 %[1]s 바이트의 동적 메모리를 사용." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "설치됨" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: internal/cli/configuration/network.go:66 +msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1461,385 +1479,397 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "사용 가능한 메모리 부족, 안정성에 문제가 생길 수 있습니다." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "라이브러리 %[2]s에서 '%[1]s'가 없음" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "\"%[1]s\"를 위한 복수개의 라이브러리가 발견되었습니다" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "메모리가 충분하지 않음; 메모리를 줄이기 위한 팁을 위해 다음 링크를 참고하세요%[1]s" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "사용되지 않음: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "포트" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1848,192 +1878,233 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2042,11 +2113,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2055,167 +2126,179 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "스케치가 너무 큼; 이것을 줄이기 위해 다음을 참고하세요. %[1]s" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "스케치는 프로그램 저장 공간 %[1]s 바이트(%[3]s%%)를 사용. 최대 %[2]s 바이트." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2229,105 +2312,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "타입" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2339,23 +2423,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2367,201 +2451,198 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "사용됨: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "라이브러리 %[1]s를 버전 %[2]s 폴더: %[3]s %[4]s 에서 사용" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "폴더:%[2]s %[3]s의 라이브러리 %[1]s 사용" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "이전에 컴파일된 파일: %[1]s 사용" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "" "경고: 라이브러리 %[1]s가 %[2]s 아키텍처에서 실행되며 %[3]s아키텍처에서 실행되는 현재보드에서는 호환되지 않을 수 있습니다." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2569,370 +2650,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" +msgstr "" + +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" msgstr "" -#: commands/upload/upload.go:700 +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:68 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2944,635 +2996,623 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:126 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "library not valid" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:341 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/lb.po b/internal/i18n/data/lb.po similarity index 52% rename from i18n/data/lb.po rename to internal/i18n/data/lb.po index e7dc0c8d2ce..40142b4f210 100644 --- a/i18n/data/lb.po +++ b/internal/i18n/data/lb.po @@ -9,124 +9,108 @@ msgstr "" "Language: lb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s schon erofgelueden" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "%s installéiert" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "%s ass schon installéiert." -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "%s muss installéiert ginn." -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(verstoppt)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -134,350 +118,358 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "Auteur: %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "Kann Bibliothéik net roflueden" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "Kategorie: %s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "" -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -485,7 +477,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "" @@ -493,100 +485,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "Beschreiwung" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "" @@ -600,289 +592,300 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "Feeler wärend der Installatioun: %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "Feeler bei der Installatioun vun %s: %v" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "Feeler bei der Installatioun vun der Bibliothéik %s" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -890,44 +893,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -935,203 +934,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "Beispiller fir d'Bibliothéik %s" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "Beispiller:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "" @@ -1148,311 +1162,315 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Installéiert" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "Ongülteg Bibliothéik" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: internal/cli/configuration/network.go:66 +msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "Ongülteg Versioun" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "BIBLIOTHEIK" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "D'Bibliothéik %s huet schon déi neisten Versioun" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "Bibliothéik %s ass net installéiert" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "Bibliothéik %s net fonnt" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "Bibliothéik '%s' net fonnt" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "Bibliothéik installéiert" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "Lizenz: %s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1460,385 +1478,397 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "Numm" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "Numm: \"%s\"" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "Optioun:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1847,192 +1877,233 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "Astellung" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2041,11 +2112,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2054,167 +2125,179 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "Gréisst (Bytes):" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2228,105 +2311,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "Onbekannt" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2338,23 +2422,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2366,200 +2450,197 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "Benotzten Bibliothéik" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Benotzt: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "Versioun" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "Versiounen: %s" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "Websäit: %s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2567,370 +2648,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" msgstr "" -#: commands/upload/upload.go:700 +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "erofgelueden" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:68 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: arduino/resources/download.go:53 +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" + +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2942,635 +2994,623 @@ msgstr "ongültegen, eidelen Bibliothéiksnumm" msgid "invalid empty library version: %s" msgstr "ongülteg, eidel Bibliothéiksversioun: %s" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "Ongülteg Optioun '%s'" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "Ongülteg Versioun" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" -msgstr "Bibliothéik %s ass schon installéiert" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" -msgstr "Bibliothéik ongülteg" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:126 +msgid "library %s already installed" +msgstr "Bibliothéik %s ass schon installéiert" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "library not valid" +msgstr "Bibliothéik ongülteg" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:341 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/mn.po b/internal/i18n/data/mn.po similarity index 100% rename from i18n/data/mn.po rename to internal/i18n/data/mn.po diff --git a/i18n/data/my_MM.po b/internal/i18n/data/my_MM.po similarity index 100% rename from i18n/data/my_MM.po rename to internal/i18n/data/my_MM.po diff --git a/i18n/data/ne.po b/internal/i18n/data/ne.po similarity index 55% rename from i18n/data/ne.po rename to internal/i18n/data/ne.po index 346b9c5d3f6..5df26d23900 100644 --- a/i18n/data/ne.po +++ b/internal/i18n/data/ne.po @@ -9,91 +9,75 @@ msgstr "" "Language: ne\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s%[2]sसंस्करण: %[3]s प्रतिबद्ध: %[4]s मिति:%[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:464 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:139 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:123 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:484 msgid "%[1]s pattern is missing" msgstr "" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:49 msgid "%s already downloaded" msgstr "" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:753 msgid "%s and %s cannot be used together" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:367 msgid "%s installed" msgstr "" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:120 msgid "%s is already installed." msgstr "" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:62 +#: internal/arduino/cores/packagemanager/loader.go:616 msgid "%s is not a directory" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:287 msgid "%s is not managed by package manager" msgstr "" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:117 msgid "%s must be installed." msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:194 +#: internal/arduino/builder/internal/preprocessor/gcc.go:61 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:820 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:446 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:96 internal/cli/board/search.go:93 msgid "(hidden)" msgstr "" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:301 msgid "(legacy)" msgstr "" @@ -113,15 +97,15 @@ msgstr "" msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:65 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:32 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:301 msgid "A programmer is required to upload" msgstr "" @@ -138,7 +122,7 @@ msgstr "" msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:33 internal/cli/config/add.go:34 msgid "Adds one or more values to a setting." msgstr "" @@ -146,75 +130,79 @@ msgstr "" msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:111 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:86 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:134 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:71 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:215 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:207 msgid "Architecture: %s" msgstr "" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:68 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:141 msgid "Archiving built core (caching) in: %[1]s" msgstr "" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:32 internal/cli/sketch/sketch.go:33 msgid "Arduino CLI sketch commands." msgstr "" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:89 msgid "Arduino CLI." msgstr "" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:90 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:32 internal/cli/board/board.go:33 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:32 internal/cli/cache/cache.go:33 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:32 internal/cli/lib/lib.go:33 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:37 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:32 internal/cli/core/core.go:33 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:61 internal/cli/lib/install.go:129 msgid "Arguments error: %v" msgstr "" @@ -222,23 +210,23 @@ msgstr "" msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:198 msgid "Author: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:77 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:86 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:137 msgid "Available" msgstr "" @@ -246,12 +234,12 @@ msgstr "" msgid "Available Commands:" msgstr "" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:101 internal/cli/board/list.go:139 +#: internal/cli/board/listall.go:83 internal/cli/board/search.go:84 msgid "Board Name" msgstr "" @@ -263,7 +251,7 @@ msgstr "" msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:244 msgid "Bootloader file specified but missing: %[1]s" msgstr "" @@ -271,32 +259,29 @@ msgstr "" msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:64 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:513 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:90 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:88 +#: internal/arduino/cores/packagemanager/install_uninstall.go:133 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:539 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:526 msgid "Can't update sketch" msgstr "" @@ -304,184 +289,191 @@ msgstr "" msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:186 commands/service_compile.go:189 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:171 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:99 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:123 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:783 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:801 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:54 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:68 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:76 internal/cli/config/init.go:83 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:62 internal/cli/config/add.go:64 +#: internal/cli/config/get.go:58 internal/cli/config/remove.go:62 +#: internal/cli/config/remove.go:64 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:140 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:345 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:531 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:74 internal/cli/config/add.go:76 +#: internal/cli/config/remove.go:72 internal/cli/config/remove.go:74 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:206 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/check_deps.go:39 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:41 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:167 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:189 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:34 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:183 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:55 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:175 commands/service_upload.go:439 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:81 internal/cli/compile/compile.go:82 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:418 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:397 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:132 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:381 msgid "Compiling sketch..." msgstr "" -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:93 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:178 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:240 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:76 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:174 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:355 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:195 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:243 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:101 internal/cli/board/list.go:139 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:101 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:486 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:153 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:36 internal/cli/lib/install.go:110 msgid "Couldn't get current working directory: %v" msgstr "" -#: internal/cli/sketch/new.go:37 internal/cli/sketch/new.go:38 +#: internal/cli/sketch/new.go:36 internal/cli/sketch/new.go:37 msgid "Create a new Sketch" msgstr "" @@ -489,104 +481,104 @@ msgstr "" msgid "Create and print a profile configuration from the build." msgstr "" -#: internal/cli/sketch/archive.go:37 internal/cli/sketch/archive.go:38 +#: internal/cli/sketch/archive.go:36 internal/cli/sketch/archive.go:37 msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:45 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:328 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:256 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:148 +#: internal/cli/outdated/outdated.go:121 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:54 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:55 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:68 internal/cli/debug/debug_check.go:50 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:205 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:299 msgid "Default" msgstr "" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:114 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:113 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 -msgid "Delete Boards/Library Manager download cache." +#: internal/cli/board/attach.go:115 +msgid "Default programmer set to" msgstr "" #: internal/cli/cache/clean.go:31 +msgid "Delete Boards/Library Manager download cache." +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" -#: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 +#: internal/cli/config/delete.go:31 internal/cli/config/delete.go:32 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:214 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:137 internal/cli/outdated/outdated.go:108 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:309 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:45 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:69 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "" @@ -600,11 +592,11 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:196 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "" @@ -620,45 +612,50 @@ msgstr "" msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:51 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:87 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:136 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:563 commands/instances.go:581 +#: commands/instances.go:595 commands/instances.go:612 +#: internal/arduino/resources/index.go:81 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:373 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:52 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:93 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:99 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "Downloading tool %s" msgstr "" @@ -670,7 +667,7 @@ msgstr "" msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "" @@ -682,23 +679,23 @@ msgstr "" msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:104 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:147 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:84 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:92 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:47 msgid "Error cleaning caches: %v" msgstr "" @@ -706,88 +703,87 @@ msgstr "" msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:383 msgid "Error copying output file %s" msgstr "" -#: internal/cli/instance/instance.go:43 +#: internal/cli/config/init.go:105 internal/cli/config/init.go:112 +#: internal/cli/config/init.go:119 internal/cli/config/init.go:133 +#: internal/cli/config/init.go:137 +msgid "Error creating configuration: %v" +msgstr "" + +#: internal/cli/instance/instance.go:45 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:367 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:80 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:70 internal/cli/sketch/new.go:82 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:82 internal/cli/board/list.go:95 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:70 internal/cli/lib/download.go:68 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:108 +#: internal/arduino/cores/packagemanager/profiles.go:109 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:660 internal/arduino/resources/index.go:82 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:137 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:383 commands/instances.go:389 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:126 +#: internal/arduino/cores/packagemanager/profiles.go:127 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:126 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:152 internal/cli/debug/debug.go:185 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:140 msgid "Error during FQBN detection: %v" msgstr "" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:238 internal/cli/feedback/feedback.go:244 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:261 internal/cli/compile/compile.go:303 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:376 msgid "Error during build: %v" msgstr "" @@ -795,27 +791,28 @@ msgstr "" msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:74 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:135 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:104 +#: internal/arduino/resources/index.go:123 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:436 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:132 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:56 msgid "Error getting absolute path of sketch archive" msgstr "" @@ -823,87 +820,93 @@ msgstr "" msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:84 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:110 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:306 commands/service_library_list.go:114 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:74 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:91 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:155 msgid "Error getting port settings details: %s" msgstr "" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:84 internal/cli/instance/instance.go:102 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:147 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:121 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:99 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:399 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:134 +#: internal/arduino/cores/packagemanager/profiles.go:135 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:185 +#: internal/arduino/cores/packagemanager/profiles.go:186 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:65 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:90 msgid "Error listing libraries: %v" msgstr "" -#: internal/cli/core/list.go:69 +#: internal/cli/core/list.go:68 msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:426 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:113 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:98 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "" @@ -915,93 +918,104 @@ msgstr "" msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:376 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:74 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:71 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:68 +#: internal/cli/core/upgrade.go:67 msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:164 +#: internal/arduino/resources/index.go:176 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:171 +#: internal/arduino/resources/index.go:180 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:62 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:125 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:81 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:69 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:221 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:66 internal/cli/config/set.go:73 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:85 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:66 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:112 internal/cli/lib/update_index.go:58 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:74 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:150 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:146 +#: internal/arduino/resources/index.go:152 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:371 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:78 internal/arduino/builder/sizer.go:87 +#: internal/arduino/builder/sizer.go:90 internal/arduino/builder/sizer.go:109 +#: internal/arduino/builder/sizer.go:214 internal/arduino/builder/sizer.go:224 +#: internal/arduino/builder/sizer.go:228 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:72 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:86 internal/cli/config/config.go:93 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" @@ -1010,11 +1024,11 @@ msgstr "" msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:101 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:122 msgid "Examples for library %s" msgstr "" @@ -1022,17 +1036,17 @@ msgstr "" msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:223 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:178 commands/service_upload.go:442 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" #: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:101 internal/cli/board/list.go:139 +#: internal/cli/board/listall.go:83 internal/cli/board/search.go:84 msgid "FQBN" msgstr "" @@ -1040,57 +1054,57 @@ msgstr "" msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:565 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:572 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:568 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:89 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:78 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:576 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:187 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:154 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:39 msgid "First message must contain debug request, not data" msgstr "" @@ -1123,15 +1137,15 @@ msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:841 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:38 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:187 msgid "GDB server '%s' is not supported" msgstr "" @@ -1148,27 +1162,31 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:329 msgid "Generating function prototypes..." msgstr "" +#: internal/cli/config/get.go:34 internal/cli/config/get.go:35 +msgid "Gets a settings key value." +msgstr "" + #: internal/cli/usage.go:31 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:163 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:169 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:215 internal/cli/core/list.go:116 +#: internal/cli/core/search.go:116 internal/cli/monitor/monitor.go:299 +#: internal/cli/outdated/outdated.go:103 msgid "ID" msgstr "" @@ -1180,7 +1198,7 @@ msgstr "" msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:129 msgid "If set built binaries will be exported to the sketch folder." msgstr "" @@ -1190,11 +1208,11 @@ msgid "" "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:54 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:50 msgid "Includes %s directory in the archive." msgstr "" @@ -1202,30 +1220,30 @@ msgstr "" msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:116 internal/cli/lib/list.go:137 +#: internal/cli/outdated/outdated.go:105 msgid "Installed" msgstr "" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:199 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:182 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:397 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:132 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:183 msgid "Installing tool %s" msgstr "" @@ -1237,82 +1255,85 @@ msgstr "" msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:396 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:379 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:62 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:80 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:185 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 +#: internal/arduino/resources/index.go:110 msgid "Invalid archive: file %{1}s not found in archive %{2}s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:58 internal/cli/core/install.go:65 +#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:107 +#: internal/cli/lib/download.go:57 internal/cli/lib/uninstall.go:55 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:250 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:249 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:255 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:596 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:48 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:113 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:98 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:261 +msgid "Invalid logging level: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: commands/instances.go:613 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/configuration/network.go:64 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:218 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:580 msgid "Invalid package index in %s" msgstr "" @@ -1320,31 +1341,27 @@ msgstr "" msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_list.go:80 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:222 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:268 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:239 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:116 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_list.go:77 msgid "Invalid vid value: '%s'" msgstr "" @@ -1358,63 +1375,64 @@ msgstr "" msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:37 internal/cli/lib/install.go:44 msgid "LIBRARY" msgstr "" #: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/uninstall.go:34 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:116 internal/cli/outdated/outdated.go:106 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:90 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:140 +#: internal/arduino/libraries/librariesmanager/install.go:129 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:136 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:62 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:376 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:447 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:473 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:576 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:233 +#: commands/service_library_install.go:273 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:204 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:434 msgid "Linking everything together..." msgstr "" @@ -1428,11 +1446,11 @@ msgstr "" msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:44 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:43 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." @@ -1444,7 +1462,7 @@ msgid "" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:56 msgid "List updatable libraries." msgstr "" @@ -1452,183 +1470,189 @@ msgstr "" msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:34 msgid "Lists all connected boards." msgstr "" -#: internal/cli/outdated/outdated.go:41 +#: internal/cli/outdated/outdated.go:43 msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:223 commands/instances.go:234 +#: commands/instances.go:344 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:137 internal/cli/outdated/outdated.go:107 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:204 msgid "Low memory available, stability problems may occur." msgstr "" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:199 msgid "Maintainer: %s" msgstr "" +#: internal/cli/compile/compile.go:134 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + #: internal/cli/arguments/discovery_timeout.go:31 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:171 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:468 msgid "Missing '%[1]s' from library in %[2]s" msgstr "" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:171 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:262 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:238 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:250 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:288 msgid "Missing programmer" msgstr "" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:243 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:499 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:360 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:202 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:158 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:215 internal/cli/core/list.go:116 +#: internal/cli/core/search.go:116 internal/cli/lib/list.go:137 +#: internal/cli/outdated/outdated.go:104 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:178 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:129 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:111 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:107 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:129 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:167 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:173 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:127 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:276 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:97 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:113 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:112 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:521 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:466 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:194 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:161 msgid "Not used: %[1]s" msgstr "" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:186 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:144 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:97 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:199 msgid "Option:" msgstr "" @@ -1650,11 +1674,11 @@ msgstr "" msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:130 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." @@ -1666,15 +1690,15 @@ msgid "" "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:61 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:51 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:45 msgid "Overwrites an existing .ino sketch." msgstr "" @@ -1683,31 +1707,31 @@ msgstr "" msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:164 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:163 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:162 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:166 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:165 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:201 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:451 internal/cli/compile/compile.go:466 msgid "Path" msgstr "" @@ -1723,7 +1747,7 @@ msgid "" "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:173 msgid "Path to the file where logs will be written." msgstr "" @@ -1733,97 +1757,99 @@ msgid "" "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:502 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:85 +#: commands/service_platform_install.go:92 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:191 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:399 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:315 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:484 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:408 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:84 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:384 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:172 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:171 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:170 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:177 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:173 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:169 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:175 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:155 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:135 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:101 internal/cli/board/list.go:139 msgid "Port" msgstr "" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:255 internal/cli/monitor/monitor.go:264 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:670 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:100 +#: internal/arduino/builder/libraries.go:108 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" @@ -1835,23 +1861,27 @@ msgstr "" msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:167 internal/cli/cli.go:169 msgid "Print the logs on the standard output." msgstr "" -#: internal/cli/config/dump.go:31 +#: internal/cli/cli.go:181 +msgid "Print the output in JSON format." +msgstr "" + +#: internal/cli/config/dump.go:30 msgid "Prints the current configuration" msgstr "" -#: internal/cli/config/dump.go:32 +#: internal/cli/config/dump.go:31 msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:204 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:341 msgid "Programmer '%s' not found" msgstr "" @@ -1859,66 +1889,64 @@ msgstr "" msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:34 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:215 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:393 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:139 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:211 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:33 internal/cli/config/remove.go:34 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:186 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:120 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:183 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:77 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:294 +#: internal/arduino/cores/packagemanager/install_uninstall.go:407 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:38 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:228 msgid "SVD file path" msgstr "" @@ -1934,77 +1962,120 @@ msgstr "" msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:39 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:40 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:39 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:200 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:236 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:62 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:235 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:74 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:33 internal/cli/config/set.go:34 msgid "Sets a setting value." msgstr "" #: internal/cli/board/attach.go:36 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:59 internal/cli/config/init.go:60 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:299 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:102 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:47 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:75 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:49 internal/cli/board/search.go:47 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" @@ -2024,7 +2095,7 @@ msgid "" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:96 msgid "Show library names only." msgstr "" @@ -2032,12 +2103,12 @@ msgstr "" msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:70 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" -#: internal/cli/update/update.go:45 +#: internal/cli/update/update.go:47 msgid "Show outdated cores and libraries after index update" msgstr "" @@ -2077,114 +2148,126 @@ msgstr "" msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:188 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:254 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:97 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:32 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:189 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:157 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:38 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:29 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:495 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:26 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:182 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:416 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:303 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:47 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:633 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:140 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:178 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:182 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:88 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:86 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:878 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:56 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:56 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:860 msgid "The library %s has multiple installations:" msgstr "" @@ -2200,7 +2283,7 @@ msgid "" "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:175 msgid "The output format for the logs, can be: %s" msgstr "" @@ -2210,7 +2293,7 @@ msgid "" "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:150 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" @@ -2222,93 +2305,94 @@ msgid "" "update is available." msgstr "" -#: internal/cli/outdated/outdated.go:42 +#: internal/cli/outdated/outdated.go:44 msgid "" "This commands shows a list of installed cores and/or libraries\n" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:78 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:86 +#: internal/arduino/cores/packagemanager/install_uninstall.go:325 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:428 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:143 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:225 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:226 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:224 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:397 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:101 internal/cli/board/list.go:139 msgid "Type" msgstr "" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:208 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:190 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:143 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:88 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:63 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:51 +#: internal/cli/configuration/configuration.go:76 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:248 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:562 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:70 +#: internal/arduino/cores/packagemanager/install_uninstall.go:277 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:98 +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 msgid "Uninstalling %s, tool is no more required" msgstr "" @@ -2322,47 +2406,47 @@ msgstr "" msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:171 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:185 msgid "Unknown FQBN" msgstr "" -#: internal/cli/update/update.go:37 +#: internal/cli/update/update.go:39 msgid "Updates the index of cores and libraries" msgstr "" -#: internal/cli/update/update.go:38 +#: internal/cli/update/update.go:40 msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:34 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:34 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:43 msgid "Upgrade doesn't accept parameters with version" msgstr "" -#: internal/cli/upgrade/upgrade.go:38 +#: internal/cli/upgrade/upgrade.go:40 msgid "Upgrades installed cores and libraries to latest version." msgstr "" -#: internal/cli/upgrade/upgrade.go:37 +#: internal/cli/upgrade/upgrade.go:39 msgid "Upgrades installed cores and libraries." msgstr "" @@ -2374,24 +2458,24 @@ msgstr "" msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:43 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:519 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:47 msgid "Upload port protocol, e.g: serial" msgstr "" @@ -2399,20 +2483,20 @@ msgstr "" msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:266 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:159 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" @@ -2426,48 +2510,49 @@ msgstr "" msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:449 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:464 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Used: %[1]s" msgstr "" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:329 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:353 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:330 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:311 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:305 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:116 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:97 +#: internal/arduino/builder/libraries.go:105 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:49 +#: internal/arduino/builder/compilation.go:180 msgid "Using previously compiled file: %[1]s" msgstr "" @@ -2475,115 +2560,115 @@ msgstr "" msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:37 internal/cli/lib/install.go:44 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:299 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 +#: internal/cli/core/search.go:116 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:209 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:182 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:360 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:412 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:327 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:282 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:508 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:335 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:202 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:44 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:47 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:147 internal/cli/compile/compile.go:150 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:186 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:189 msgid "archive is not valid: no files found in zip file top level" msgstr "" -#: internal/cli/sketch/archive.go:36 +#: internal/cli/sketch/archive.go:35 msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:63 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "" - #: internal/cli/feedback/stdio.go:35 msgid "available only in text format" msgstr "" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:83 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:88 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:763 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:351 msgid "board %s not found" msgstr "" @@ -2591,154 +2676,135 @@ msgstr "" msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:193 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:274 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 +#: internal/arduino/sketch/sketch.go:109 msgid "can't find main Sketch file in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:711 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:95 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:720 commands/service_upload.go:727 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:39 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:110 +#: internal/arduino/builder/build_options_manager.go:113 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:91 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:150 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:147 +#: internal/arduino/monitor/monitor.go:153 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:80 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:85 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:139 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:835 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:93 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:189 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:78 internal/arduino/sketch/yaml.go:82 +#: internal/arduino/sketch/yaml.go:86 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:95 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:216 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:44 +#: internal/arduino/resources/install.go:48 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:195 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:85 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:92 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:136 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:276 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:206 msgid "discovery %[1]s process not started: %[2]w" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:643 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:647 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:743 msgid "discovery release not found: %s" msgstr "" @@ -2754,71 +2820,67 @@ msgstr "" msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:54 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:59 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:95 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:212 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_list.go:114 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_list.go:94 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 +#: internal/arduino/resources/install.go:67 msgid "extracting archive: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 +#: internal/arduino/libraries/librariesmanager/install.go:177 msgid "extracting archive: %w" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:144 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_list.go:89 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:96 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:122 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:58 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:91 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:97 msgid "following symlink %s" msgstr "" @@ -2826,16 +2888,20 @@ msgstr "" msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 +#: internal/cli/lib/check_deps.go:41 internal/cli/lib/download.go:38 #: internal/cli/lib/install.go:48 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/install.go:49 #: internal/cli/lib/install.go:51 msgid "for the specific version." msgstr "" +#: internal/arduino/cores/fqbn.go:65 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + #: internal/inventory/inventory.go:68 msgid "generating installation.id: %w" msgstr "" @@ -2844,137 +2910,127 @@ msgstr "" msgid "generating installation.secret: %w" msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:53 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:34 +#: internal/arduino/resources/helpers.go:38 +#: internal/arduino/resources/install.go:55 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:357 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:105 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:113 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:98 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:147 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:58 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:208 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:37 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:210 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:72 internal/arduino/cores/fqbn.go:77 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:91 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:68 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:88 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:73 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:78 msgid "invalid empty core version: '%s'" msgstr "" -#: internal/cli/lib/args.go:49 +#: internal/cli/lib/args.go:48 msgid "invalid empty library name" msgstr "" -#: internal/cli/lib/args.go:54 +#: internal/cli/lib/args.go:53 msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:142 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:266 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:85 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:244 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:65 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:88 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:139 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:145 msgid "invalid option '%s'" msgstr "" @@ -2990,291 +3046,293 @@ msgstr "" msgid "invalid path writing inventory file: %[1]s error: %[2]w" msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:278 msgid "invalid platform archive size: %s" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:214 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:224 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:325 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:187 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:195 msgid "invalid port configuration: %s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:707 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:85 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:149 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:230 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:38 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:86 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:87 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:89 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:84 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:85 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:124 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:313 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:254 +#: internal/arduino/cores/packagemanager/loader.go:267 +#: internal/arduino/cores/packagemanager/loader.go:275 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/cores/packagemanager/loader.go:313 +msgid "loading boards: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:498 +#: internal/arduino/cores/packagemanager/package_manager.go:513 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:226 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:54 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:207 +#: internal/arduino/cores/packagemanager/loader.go:235 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:194 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:45 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:61 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:589 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:187 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:778 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:79 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:208 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:459 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:100 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:464 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:469 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:152 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:754 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:244 +#: internal/arduino/resources/install.go:96 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:830 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:71 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:334 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:272 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:785 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:58 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:125 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:702 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:285 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:127 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: internal/cli/feedback/terminal.go:51 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:59 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:223 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:83 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:75 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:527 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:165 +#: internal/arduino/cores/packagemanager/package_manager.go:298 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:72 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:178 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:79 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:344 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:91 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:120 +#: internal/arduino/cores/packagemanager/install_uninstall.go:176 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 +#: internal/arduino/cores/packagemanager/loader.go:419 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:136 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:135 msgid "pluggable discovery already added: %s" msgstr "" @@ -3282,260 +3340,242 @@ msgstr "" msgid "port" msgstr "" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:121 msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:34 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:236 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:215 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 +#: internal/arduino/libraries/loader.go:198 msgid "reading directory %[1]s content: %[2]w" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:68 +#: internal/arduino/cores/packagemanager/loader.go:150 +#: internal/arduino/cores/packagemanager/loader.go:217 +#: internal/arduino/cores/packagemanager/loader.go:581 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 +#: internal/arduino/libraries/librariesmanager/install.go:286 msgid "reading directory %s content: %w" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:82 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:204 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:91 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 +#: internal/arduino/libraries/libraries.go:228 msgid "reading lib src dir: %s" msgstr "" -#: arduino/libraries/libraries.go:116 +#: internal/arduino/libraries/libraries.go:116 msgid "reading library headers: %w" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:66 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:115 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:114 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:696 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:603 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:44 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:150 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:307 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:86 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:116 +#: internal/arduino/libraries/loader.go:154 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:73 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:77 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:90 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:80 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:51 internal/arduino/sketch/sketch.go:56 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:35 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:210 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:118 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:111 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:105 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:37 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:190 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:216 +#: internal/arduino/builder/internal/preprocessor/ctags.go:72 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:101 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:140 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:400 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:553 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:395 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:732 +#: internal/arduino/cores/packagemanager/package_manager.go:838 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:91 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:75 +#: internal/arduino/builder/sketch.go:119 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:44 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:125 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:84 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:163 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:136 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:146 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:332 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:339 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:143 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "" @@ -3547,30 +3587,30 @@ msgstr "" msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:731 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:93 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:96 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:173 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:152 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_list.go:119 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/pl.po b/internal/i18n/data/pl.po similarity index 52% rename from i18n/data/pl.po rename to internal/i18n/data/pl.po index 5abd6d5bd7b..b64f0193812 100644 --- a/i18n/data/pl.po +++ b/internal/i18n/data/pl.po @@ -11,124 +11,108 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "%[1]sfolder nie jest już wspierany,.Zobacz %[2]spo więcej informacji" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]snieprawidłowe, przebudowywuję całość" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]sjest wymagane ale %[2]s jest obecnie zaistalowane" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "Brakujący wzorzec %[1]s" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, wiadomość %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, port%[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, porty: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, wersja protokołu %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%sjuż pobrane" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "%s oraz %s nie mogą być razem użyte" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "%s zainstalowane" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "%sjuż jest zainstalowane" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "%snie jest " -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "%snie jest zarządzane przez zarządcę paczek" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "%smusi byc zainstalowane" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "%s brakuje wzoru" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "'%s' posiada niewłaściwy podpis" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(ukryte)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "(przestarzałe)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -136,350 +120,358 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "Architektura: %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "Archiwizowanie budowanego rdzenia (buforowanie) w: %[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "Autor: %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "Dostępne" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "Nazwa płytki:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "Podany nieistniejący plik programu rozruchowego: %[1]s" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "Kompilowanie szkicu..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -487,7 +479,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "" @@ -495,100 +487,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "Domyślne" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "" @@ -602,289 +594,300 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -892,44 +895,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -937,203 +936,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "" @@ -1150,15 +1164,19 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1167,297 +1185,297 @@ msgstr "" "pozostawiając %[4]s bajtów dla zmiennych lokalnych. Maksimum to %[2]s " "bajtów." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "Zmienne globalne używają %[1]s bajtów pamięci dynamicznej." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Zainstalowany" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/configuration/network.go:66 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1465,388 +1483,400 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "" "Niski poziom dostępnej pamięci, mogą wystąpić problemy ze stabilnością." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "Brakuje '%[1]s' z biblioteki w %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "Znaleziono wiele bibliotek w \"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" "Niewystarczająca ilość pamięci; sprawdź %[1]s w poszukiwaniu rozwiązania " "problemu" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "Niewykorzystane: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "Port" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1855,192 +1885,233 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2049,11 +2120,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2062,52 +2133,52 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "Szkic za duży, zobacz porady na %[1]s w celu zmiejszenia go." -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2115,116 +2186,128 @@ msgstr "" "Szkic używa %[1]s bajtów (%[3]s%%) pamięci programu. Maksimum to %[2]s " "bajtów." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2238,105 +2321,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "Wpisz" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2348,23 +2432,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2376,155 +2460,156 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Wykorzystane: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "Użycie biblioteki %[1]s w wersji %[2]s z folderu: %[3]s %[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "Użycie biblioteki %[1]s z folderu %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "Użycie wcześniej skompilowanego pliku: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2533,46 +2618,42 @@ msgstr "" "może nie być kompatybilna z obecną płytką która działa na " "architekturze(/architekturach) %[3]s." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2580,370 +2661,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" msgstr "" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:68 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2955,635 +3007,623 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:126 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:341 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/pt.po b/internal/i18n/data/pt.po similarity index 61% rename from i18n/data/pt.po rename to internal/i18n/data/pt.po index ab390b79962..2a534ac1561 100644 --- a/i18n/data/pt.po +++ b/internal/i18n/data/pt.po @@ -3,89 +3,74 @@ # CLI team <prj_cli_team@arduino.cc>, 2022 # Silas Sousa, 2022 # Kaseioo <kaseio@protonmail.com>, 2023 +# Igor Rückert, 2024 # msgid "" msgstr "" -"Last-Translator: Kaseioo <kaseio@protonmail.com>, 2023\n" +"Last-Translator: Igor Rückert, 2024\n" "Language-Team: Portuguese (https://app.transifex.com/arduino-1/teams/108174/pt/)\n" "Language: pt\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s%[5]s%[4]sData%[3]scomprometer%[2]sVersão" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "%[1]spasta não é mais suportada! Ver%[2]sPara maiores informações" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]sinválido, refazendo tudo" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]s‎é necessário, mas‎%[2]snão é instalado em nenhum momento." -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "%[1]so padrão está faltando" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]smensagem:%[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s,porta%[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]sportas:%[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[2]d%[1]s, versão do protocolo:" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s‎já baixado‎" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "%se%s‎não pode ser usado em conjunto‎" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "%sinstalado" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "%s‎já está instalado.‎" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "%s‎não é um diretório‎" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "%s‎não é gerenciado pelo gerente de pacotes‎" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "%s‎deve ser instalado.‎" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "%spadrão está faltando" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "%s‎tem uma assinatura inválida‎" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" @@ -93,15 +78,15 @@ msgstr "" "'build.core' e 'build.variant' referem a plataformas diferentes: %[1]s e " "%[2]s" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "‎(oculto)‎" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "‎(legado)‎" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" @@ -109,7 +94,7 @@ msgstr "" "%v‎--git-url e --zip-path são desativados por padrão, para obter mais " "informações, consulte:‎" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." @@ -117,25 +102,25 @@ msgstr "" "‎--git-url e --zip-path autorizaram a instalação de arquivos não confiáveis," " use por sua conta e risco.‎" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" "--git-url ou --zip-path não podem ser usados com --install-in-builtin-dir" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "arquivo .ino já existe" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "‎Uma nova atualização do Arduino CLI está disponível:‎" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "‎É necessário um programador para carregar‎" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "ARCH" @@ -143,99 +128,103 @@ msgstr "ARCH" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "MANUAL DE LINHA DE COMANDO ARDUINO" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "Tópicos de ajuda adicionais:" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "Adicionar um ou mais valores para uma configuração." -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "Apelidos:" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "Todas as plataformas estão atualizadas." + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "Todos os Núcleos já estão na versão mais recente" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "%s‎Já instalado‎" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "%[1]sAlternativas para‎%[2]s:" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "‎Ocorreu um erro ao adicionar os protótipos‎" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "‎Ocorreu um erro na detecção de bibliotecas‎" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "‎Registro de depuração de anexação ao arquivo especificado‎" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "%sArquitetura:‎" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "O Arquivo já existe" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "%[1]sArquivando núcleo construído (cache) em:" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Comandos de esboço da Linha de Comando Arduino" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Linha de Comando Arduino." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "Interface de Linha de Comando Arduino (arduino-cli)." -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "Comandos de Placa Arduino" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "Comandos de Cache Arduino." -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "Comandos Arduino sobre bibliotecas." -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "Comandos de configuração Arduino" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "Operações centrais Arduino." -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "%vErro nos argumentos:" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "‎Anexa um sketch a uma placa.‎" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "%sAltor" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." @@ -243,7 +232,7 @@ msgstr "" "Instalação automática de bibliotecas não pode ser realizada neste caso. Por " "favor, remova todas as cópias manualmente e tente novamente." -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." @@ -251,166 +240,171 @@ msgstr "" "Desinstalação automática de bibliotecas não pode ser realizada neste caso. " "Por favor, as remova manualmente e tente novamente. " -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "Disponível‎" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "Comandos Disponíveis:" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "‎Arquivo binário para carregar.‎" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "Nome da Placa" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "Nome da Placa:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "Versão da Placa:" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "" "Um Arquivo carregador de inicialização definido, mas está faltando: %[1]s" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" "Builds de 'core.a' são salvos nesse caminho para serem armazenados no Cache " "e reutilizados. " -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "Não é possível criar o diretório de dados %s" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "Não é possível criar esboço" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "Não é possível baixar biblioteca" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "Não foi possível encontrar as dependências para a plataforma %s" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "Não é possível abrir esboço" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "Não é possível designar múltiplos valores na chave %v" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "Não é possível atualizar o esboço" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "Não é possível utilizar as seguintes Flags ao mesmo tempo: %s" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "Não é possível escrever para o arquivo de configuração: %v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "Não é possível escrever para o arquivo de depuração: %s" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "Não é possível criar Build do diretório de Cache" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "Não é possível criar Build do diretório" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "Não é possível criar diretório de arquivo de configuração: %v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "Não é possível criar arquivo de configuração: %v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "Não é possível criar diretório temporário" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "Não é possível criar arquivo temporário" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "Não é possível deletar a chave %[1]s:%[2]v" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "Não é possível executar ferramenta de depuração" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "Não é possível encontrar caminho absoluto: %v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "Não é possível obter a chave de configuração %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "Não é possível instalar plataforma" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "Não é possível instalar ferramenta %s" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "Não é possível realizar redefinição de porta: %s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "Não é possível remover a chave de configuração %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 msgid "Cannot upgrade platform" msgstr "Não é possível realizar Upgrade na plataforma" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "Não é possível escrever para o arquivo %[1]s:%[2]v" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "Categoria: %s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "Verifique o estado das dependências para a biblioteca especificada." -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" +"Verifique se a combinação placa/programador fornecida suporta depuração." + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "Checksum difere da Checksum em packages.json" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "Checksum: " -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "Limpar Caches." -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" "Lista de valores separados por vírgula para URLs adicionais para o " "Gerenciador de Placas" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." @@ -418,46 +412,46 @@ msgstr "" "Comando continua a executar e a imprimir lista de placas conectadas sempre " "que ocorrer uma mudança." -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "Esboço compilado não encontrado em %s" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "Compila esboços Arduino." -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "Compilando núcleo..." -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "Compilando bibliotecas..." -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "%[1]s‎Biblioteca de compilação‎ \"\"" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "Compilando sketch..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" "Arquivo de configuração já existe, use --overwrite para descartar o arquivo " "atual." -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "%s‎Arquivo Config escrito para:‎" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "Opções de configuração para %s" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." @@ -465,43 +459,43 @@ msgstr "" "Designe as configurações da porta de comunicação. O formato é <ID> = " "<value>[,<ID> = <value>]..." -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "Configurando plataforma." -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "Configurando ferramenta." -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "Conectado" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "Conectado para %s! Aperte CTRL-C para sair." +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "Conectando a %s. Pressione CTRL-C para sair." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "Núcleo" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "Não foi possível conectar via HTTP" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "Não foi possível criar diretório Index" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "Não foi possível fazer o Cache profundo para a Build central: %[1]s" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "Não foi possível determinar o tamanho do programa" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "Não foi possível obter o diretório de trabalho atual: %v" @@ -509,7 +503,7 @@ msgstr "Não foi possível obter o diretório de trabalho atual: %v" msgid "Create a new Sketch" msgstr "Criar novo Esboço" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "Criar e imprimir perfil de configuração da Build." @@ -517,7 +511,7 @@ msgstr "Criar e imprimir perfil de configuração da Build." msgid "Creates a zip file containing all sketch files." msgstr "Cria um arquivo .zip contendo todos os arquivos de esboço." -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." @@ -525,7 +519,7 @@ msgstr "" "Cria ou atualiza o arquivo de configuração no diretório de dados ou em um " "diretório customizado com as definições de configuração atuais." -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." @@ -533,94 +527,91 @@ msgstr "" "Atualmente, os Perfis de Build só suportam bibliotecas disponíveis através " "do Gerenciador de Bibliotecas Arduino." -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" -msgstr "" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" +msgstr "Configuração personalizada para %s:" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "DESCONTINUADO" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "Daemon agora está ouvindo em %s:%s" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "Depurar esboços Arduino." -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" "Depurar esboços Arduino (esse comando abre uma sessão interativa com o " "depurador gdb)." -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "Depurar interpretador e.g.:%s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "Depuramento não é suportado para a placa %s" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "Depuramento suportado:" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "Padrão" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "Padrão FQBN definido como" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "Porta padrão definida como" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "Programador padrão definido para" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" "Deletar Placas/Cache de arquivos baixados do Gerenciador de Bibliotecas" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" -"Deletar conteúdo do diretório 'directories.downloads', onde arquivos de " -"depósito são criados durante a instalação de bibliotecas e de plataformas de" -" placas." #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "Deleta a chave de configurações e todas as suas sub-chaves." -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "Dependências: %s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "Descrição" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "Detectando bibliotecas utilizadas..." -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "Detecta e mostra a lista de placas conectadas ao computador atual." -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "Diretório com arquivos binários para depuração." -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "Diretório com arquivos binários para serem enviados." @@ -636,291 +627,302 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "Desabilitar a realização de descrições para Shells que suportam isso." -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "Desconectado" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "Mostrar apenas as chamadas gRPC oferecidas" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "Não instale dependências." -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "Não sobrescreva bibliotecas já instaladas." -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "Não sobrescreva plataformas já instaladas." -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "Não faça um envio verdadeiro, apenas registre as ações." -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "Não encerre o processo Daemon se o processo relacionado morrer." -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "Baixando %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "Baixando assinatura Indes: %s" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "Baixando Index: %s" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "Baixando biblioteca %s" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "Baixando ferramenta %s" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "Baixando pacotes" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "Baixando plataforma %s" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "Baixando ferramenta %s" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" "Baixe um ou mais núcleos e dependências de ferramentas correspondentes." -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "Baixe uma ou mais bibliotecas sem instalá-las." -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "Ligue registros de depuração para chamadas gRPC" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "Insira caminho para arquivo zip" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "Insira URL git para bibliotecas hospedadas em repositórios" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "Erro ao adicionar arquivo de esboço para o depósito de documentos" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "Erro ao adicionar Build do Núcleo (caching) em %[1]s:%[2]s" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "Erro ao adicionar para o depósito de documentos: %v" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "Erro ao calcular caminho de arquivo relativo" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "Erro ao limpar caches: %v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "Erro ao converter caminho para absoluto: %v" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "Erro ao copiar arquivo de saída %s" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "Erro ao criar instância: %v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "Erro ao criar diretório de saída" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "Erro ao criar diretório de esboços" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "Erro ao criar esboço: %v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "Erro ao detectar placas: %v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "Erro ao baixar %[1]s: %[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "Erro ao baixar %s" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "Erro ao baixar índice '%s'" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "Erro ao baixar assinatura de índice '%s'" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "Erro ao baixar biblioteca %s" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "Erro ao baixar plataforma %s" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "Erro ao baixar ferramenta %s" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "Erro durante Depuramento: %v" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "Erro durante detecção FQBN: %v" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "Erro durante codificação da saída JSON: %v" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "Erro durante envio: %v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "Erro durante codificação da saída YAML: %v" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "Erro durante build: %v" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "Erro durante instalação: %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "Erro durante desinstalação: %v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "Erro durante atualização: %v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "Erro ao extrair %s" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "Erro ao buscar por artefatos da Build" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "Erro ao obter informações de Depuração: %v" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "Erro ao obter caminho absoluto do arquivo de esboço" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "Erro ao obter detalhes da placa: %v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" "Erro ao obter o diretório atual para o banco de dados de compilação: %s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "Erro ao obter informações da biblioteca %s" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "Erro ao obter informações sobre as bibliotecas: %v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "Erro ao obter metadata da porta: %v" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "Erro ao obter detalhes das configurações da porta: %s" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "Erro ao obter entrada do usuário" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "Erro ao inicializar instância: %v" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "Erro ao instalar %s: %v" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "Erro ao instalar biblioteca Git: %v" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "Erro ao instalar biblioteca Zip: %v" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "Erro ao instalar biblioteca %s" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "Erro ao instalar plataforma %s" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "Erro ao instalar ferramenta %s" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "Erro ao instalar placas: %v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "Erro ao listar bibliotecas: %v" @@ -928,44 +930,40 @@ msgstr "Erro ao listar bibliotecas: %v" msgid "Error listing platforms: %v" msgstr "Erro ao listar plataformas: %v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "Erro ao carregar plataformas de hardware" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "Erro ao carregar índice %s" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "Erro ao abrir %s" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "Erro ao abrir arquivo de registro de depuração: %s" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "Erro ao abrir arquivo de dados que sobrescrevem o código fonte: %v" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "Erro ao fazer análise sintática na flag --show-properties: %v" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "Erro ao ler diretório de build" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "Erro ao ler arquivo de configuração: %v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "Erro ao ler arquivos de esboço" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "Erro ao esclarecer dependências para %[1]s: %[2]s" @@ -973,158 +971,173 @@ msgstr "Erro ao esclarecer dependências para %[1]s: %[2]s" msgid "Error retrieving core list: %v" msgstr "Erro ao adquirir lista de núcleos: %v" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "Erro ao reverter mudanças: %s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "Erro ao salvar índice baixado" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "Erro ao salvar assinatura de índice baixado" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "Erro ao buscar por placas: %v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "Erro ao buscar por bibliotecas: %v" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "Erro ao buscar por plataformas: %v" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "Erro ao serializar compilação do banco de dados: %s" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "Erro ao inicializar busca: %v" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "Erro ao desinstalar %[1]s: %[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "Erro ao atualizar índice de biblioteca: %v" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "Erro ao atualizar bibliotecas" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "Erro ao atualizar plataforma: %s" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "Erro ao verificar assinatura" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "Erro ao detectar bibliotecas incluídas por %[1]s" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "Erro ao determinar tamanho do esboço: %s" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "Erro ao escrever compilação de banco de dados: %s" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "Erro: descrição de comando não suportado por %v" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "Erro: arquivo de dados que sobrescrevem o código fonte inválido: %v" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "Evento" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "Exemplos para biblioteca %s" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "Exemplos:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "Executável para depurar" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" "Um esboço compilado era esperado no diretório %s, mas um arquivo foi " "encontrado." -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "Falha ao apagar chip" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "Falha ao programar" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "Falha ao gravar carregador de inicialização" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "Falha ao criar diretório de dados" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "Falha ao criar diretório de downloads" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "Falha ao ouvir porta TCP: %[1]s. %[2]s é uma porta inválida." -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "Falha ao ouvir porta TCP: %[1]s. %[2]s é nome desconhecido." -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "Falha ao ouvir porta TCP: %[1]s. Erro inesperado: %[2]v" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "Falha ao ouvir porta TCP: %s. Endereço já está em uso." -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "Falha ao enviar" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "Arquivo:" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" @@ -1132,53 +1145,53 @@ msgstr "" "Encriptação/assinatura de firmware requer que todas as propriedades a seguir" " sejam definidas: %s" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "" "A primeira mensagem deve conter uma requisição de depuração, e não dados." -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "A flag %[1]s é mandatória quando usada em conjunto com: %[2]s" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "Flags:" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" "Force a execução de scripts de pós instalação (se a Linha de Comando não " "estiver no modo interativo)." -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" "Pule a execução de scripts de pós instalação (se a Linha de Comando estiver " "no modo interativo)." -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "Nome de Placa Completamente Qualificada. E.g.: arduino:avr:uno" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "Servidor GDB '%s' não é suportado" @@ -1195,15 +1208,19 @@ msgstr "Gera scripts de conclusão" msgid "Generates completion scripts for various shells" msgstr "Gera scripts de conclusão para várias Shells" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "Gerando protótipos de função..." -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "Flags Globais:" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1211,31 +1228,31 @@ msgstr "" "Variáveis globais usam %[1]s bytes (%[3]s%%) de memória dinâmica, restando " "%[4]s bytes para variáveis locais. O maximo é %[2]s bytes." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "Variáveis globais usam %[1]s bytes de memória dinâmica." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "Propriedades de identificação:" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "" "Se designado, binárias de build serão exportadas para o diretório de " "esboços." -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." @@ -1243,171 +1260,166 @@ msgstr "" "Se designado, retorna todos os núcleos instaláveis e instalados, incluído os" " instalados manualmente." -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "Inclua bibliotecas embutidas (de plataformas e de IDE) na listagem." -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "Inclui o diretório %s no registro." -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "Instalar bibliotecas no Diretório Embutido da IDE." -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Instalado" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "%s instalado" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "Instalado %s" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "Instalando biblioteca %s" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "Instalando plataforma %s" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "Instalando ferramenta %s" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" "Instalando um ou mais núcleos e suas dependências de ferramenta " "correspondentes." -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "Instala uma ou mais bibliotecas especificadas no sistema." -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "Erro interno no Cache" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "Propriedade '%[1]s' inválida: %[2]s" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" -"Chamada inválida: deveria mostrar Ajuda, mas é avaliável apenas no modo " -"TEXT." - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "FQBN inválido" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "Endereço TCP inválido: a porta está faltando " -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "URL inválida" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "URL adicional inválida: %v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -"Depósito de documento inválido: arquivo %{1}s não encontrado no depósito " -"%{2}s" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "Argumento inválido passado: %v" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "Propriedades de compilação inválidas" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "Tamanho de dados para regexp inválida: %s" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "Regexp de tamanho EEPROM inválida: %s" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "Instância inválida" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "Item inválido %s" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "Biblioteca inválida" -#: configuration/network.go:63 +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "" + +#: internal/cli/configuration/network.go:66 msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "network.proxy inválido: '%[1]s':%[2]s" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "Opção inválida para --log-level: %s" - -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "Formato de saída inválido: %s" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "Índice de pacote inválido em %s" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "Parâmetro %s inválido: versão não permitida" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "Valor PID inválido: '%s'" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "Perfil inválido" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "Receita inválida em platform.txt" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "Tamanho de regexp inválido: %s" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "Limite de tempo inválido: %s" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "Versão inválida" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "Valor vid inválido: '%s'" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." @@ -1415,74 +1427,75 @@ msgstr "" "Produza apenas compilações de banco de dados, mas sem compilar. Todos os " "comandos de build serão pulados, exceto os ganchos pre*." -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "NOMEBIBL" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "BIBLIOTECA" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "NOME_BIBLIOTECA" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "Mais recente" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "A biblioteca %[1]s foi declarada como pré-compilada:" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" "A biblioteca %[1]s já está instalada, mas com uma versão diferente: %[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "A biblioteca %s já está instalada em sua versão mais recente." -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "A biblioteca %s não está instalada" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "A biblioteca %s não foi encontrada" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "A biblioteca '%s' não foi encontrada" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" "A biblioteca não pode usar ambos os diretórios '%[1]s' e '%[2]s'. Cheque " "novamente em '%[3]s'." -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "Instalação de biblioteca falhou" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "Biblioteca instalada" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "Licença: %s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "Vinculando tudo..." -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" @@ -1490,15 +1503,15 @@ msgstr "" "Listar todas as placas que já possuem a plataforma de suporte instalada. " "Você pode buscar por uma placa específica se você especificar o nome dela." -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "Listar todas as placas conhecidas e os seus FQBN correspondentes." -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "Listar todas as placas conectadas." -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." @@ -1506,7 +1519,7 @@ msgstr "" "Listar todas as opções de placas separadas por vírgula. Ou pode ser usado " "múltiplas vezes para múltiplas opções." -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." @@ -1514,15 +1527,15 @@ msgstr "" "Listar todas as propriedades de build customizadas, separadas por vírgula. " "Ou pode ser usado múltiplas vezes para múltiplas opções." -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "Listar bibliotecas atualizáveis." -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "Listar plataformas atualizáveis." -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "Listar todas as placas conectadas." @@ -1530,116 +1543,122 @@ msgstr "Listar todas as placas conectadas." msgid "Lists cores and libraries that can be upgraded" msgstr "Listar núcleos e bibliotecas que podem ser atualizadas" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "Carregando arquivo Index: %v" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "Localização" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "Pouca memória disponível, podem ocorrer problemas de estabilidade." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "Mantedor: %s" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "Tempo máximo para esperar a descoberta de porta. E.g.: 30s, 1m" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" "Mensagens com esse nível e acima serão registradas. Níveis válidos são: %s" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "'%[1]s' está faltando da biblioteca em %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "FQBN (Nome de Placa Totalmente Qualificado) está faltando" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "Porta faltando" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "Endereço de porta faltando" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "Protocolo de porta faltando" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "Programador faltando" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "Tamanho de regexp faltando" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "Caminho para esboço faltando" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "Monitor '%s' não encontrado" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "Configurações da porta do monitor:" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "Múltiplas bibliotecas foram encontradas para \"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "Nome" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "Nome: \"%s\"" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "Nenhuma placa encontrada." -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "Sem porta ou FQBN padrões." +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "Nenhuma biblioteca foi encontrada." -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "Nenhuma biblioteca instalada." -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "Nenhuma biblioteca correspondente à sua busca." -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1647,53 +1666,53 @@ msgstr "" "Nenhuma biblioteca correspondente à sua busca.\n" "Você quis dizer...\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "Nenhuma atualização de bibliotecas disponível." -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "Sem monitor disponível para o protocolo de porta %s" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "Nenhuma plataforma ou biblioteca desatualizada encontrada." -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "Nenhuma plataforma instalada." -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "Nenhuma plataforma correspondente à sua busca." -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "Nenhuma porta de envio encontrada, usando %s como reserva" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "Sem solução válida para dependências encontrada " -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" "Memória insuficiente: veja %[1]s para sugestões sobre como reduzir a sua " "pegada." -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "Não utilizado: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "SO:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "Placa Arduino oficial:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." @@ -1701,43 +1720,43 @@ msgstr "" "Esconder detalhes da biblioteca para todas as versões exceto a mais recente " "(produz uma saída JSON mais compacta)." -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "Abra uma porta de comunicação com a placa." -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "Opção:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" "Opcional, pode ser: %s. Usado para indicar ao GCC qual nível de alerta " "utilizar (flag -W)." -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" "Opcional, limpeza do diretório de compilação e não utilização de nenhuma " "compilação em cache." -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" "Opcional, otimize saída de compilação para depuração, ao invés de " "lançamento." -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "Opcional, esconde quase qualquer saída. " -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "Opcional, liga o modo verboso." -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." @@ -1745,7 +1764,7 @@ msgstr "" "Opcional. Caminho para um arquivo .json que contém um conjunto de " "substituições do código fonte do esboço." -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." @@ -1753,52 +1772,52 @@ msgstr "" "Sobrescreva uma propriedade de compilação com um valor customizado. Pode ser" " utilizado múltiplas vezes para múltipas propriedades. " -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "Sobrescrever o arquivo de configuração existente. " -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "Sobrescreve um depósito de documentos existente." -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "Sobrescreve um esboço .ino existente." -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "EMPACOTADOR" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "URL do pacote:" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "Responsável pela manutenção do pacote:" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "Nome do pacote:" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "Ajuda online para o pacote:" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "Website do pacote:" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "Parágrafo: %s" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "Caminho" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." @@ -1806,7 +1825,7 @@ msgstr "" "Caminho para a coleção de bibliotecas. Pode ser utilizado múltiplas vezes. " "Entradas podem ser separadas por vírgulas." -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." @@ -1814,11 +1833,11 @@ msgstr "" "Caminho para o diretório raíz de uma biblioteca. Pode ser utilizado " "múltiplas vezes. Entradas podem ser separadas por vírgulas." -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "Caminho para o arquivo onde os registros de dados serão escritos." -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." @@ -1826,19 +1845,20 @@ msgstr "" "Caminho para onde salvar arquivos compilados. Se omitido, um diretório vai " "ser criado no caminho temporário padrão do seu SO." -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "Executando toque de redefinição de 1200-bps na porta serial %s" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "Plataforma %s já está instalada" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "Plataforma %s instalada" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" @@ -1846,55 +1866,55 @@ msgstr "" "A plataforma %s não foi encontrada em nenhum índice conhecido\n" "Talvez você precise adicionar uma URL externa de 3ºs?" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "Plataforma %s desinstalada. " -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "Plataforma '%s' já está em sua versão mais recente." -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "Plataforma '%s' não encontrada" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "ID da Plataforma" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "ID da Plataforma incorreto" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "URL da Plataforma:" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "Arquitetura da Plataforma:" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "Categoria da Plataforma:" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "Checksum da plataforma:" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "Nome de arquivo da Plataforma:" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "Nome da Plataforma:" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "Tamanho da Plataforma (em bytes):" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" @@ -1902,7 +1922,7 @@ msgstr "" "Por favor especifique um FQBN. Possíveis placas foram detectadas na porta " "%[1]s com o protocolo %[2]s" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" @@ -1910,34 +1930,39 @@ msgstr "" "Por favor especifique um FQBN. A placa na porta %[1]s com o protocolo %[2]s " "não pode ser identificada" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "Porta" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "Porta fechada: %v" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "Erro no monitor de portas" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "Biblioteca pré-compilada em \"%[1]s\" não foi encontrada" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "Imprimir detalhes sobre a placa." -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "Imprimir código pré-processado para stdout ao invés de compilar." -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "Imprimir as informações de registro para a saída padrão." +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "Imprime a configuração atual" @@ -1946,179 +1971,214 @@ msgstr "Imprime a configuração atual" msgid "Prints the current configuration." msgstr "Imprime a configuração atual." -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "Perfil '%s' não encontrado" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "Programador '%s' não encontrado" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "Nome do programador " -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "Programador para utilizar, ex: atmel_ice" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "Programadores:" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "Propriedade '%s' não definida" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "Protocolo" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "Providenciar includes: %s" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "Remove um ou mais valores de uma configuração." -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "Substituindo %[1]s com %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "Substituindo plataforma %[1]s com %[2]s" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "Ferramenta necessária:" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "Execute como um daemon na porta: %s" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "" "Execute no modo silencioso e mostre apenas a entrada e a saída do monitor." -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -"Ao executar como um daemon, a inicialização de núcleos e bibliotecas é feita" -" apenas uma vez." -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "Executando compilação normal do núcleo..." -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "Salve artefatos de compilação neste diretório." -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" "Busque por uma placa no Gerenciador de Placas usando as palavras-chave " "especificadas." -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "Busque por uma placa no Gerenciador de Placas." -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" "Busque por um núcleo no Gerenciador de Placas usando as palavras-chave " "especificadas." -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "Busque por um núcleo no Gerenciador de Placas." -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -"Busque pelos dados de uma ou mais bibliotecas (a busca ignora maiúsculas e " -"minúsculas)." -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "Busque pelos dados de uma ou mais bibliotecas." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "Sentença: %s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "Servidor respondeu com: %s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "Define um valor de configuração." -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -"Define os valores padrões para porta e FQBN. Se nenhuma porta ou FQBN for " -"especificado, a porta e FQBN atuais vão ser utilizadas. " -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "Define onde o arquivo de configuração deve ser salvo." -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "Configuração" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "Chave de configuração não existe" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "Mostre todas as versões de núcleo disponíveis." -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "Mostre todas as configurações da porta de comunicação." -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "Mostre placas marcadas como 'escondidas' na plataforma" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." @@ -2127,11 +2187,11 @@ msgstr "" "\"--show-properties=unexpanded\" se você quer ver elas da exata maneira em " "que estão definidas. " -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "Mostrar todos os detalhes da placa" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." @@ -2139,15 +2199,15 @@ msgstr "" "Mostrar informações sobre uma placa, em específica se a placa possuir opções" " que devem ser especificadas no FQBN." -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "Mostrar apenas nomes de bibliotecas." -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "Mostrar lista de todos os programadores disponíveis" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2159,11 +2219,11 @@ msgid "Show outdated cores and libraries after index update" msgstr "" "Mostrar bibliotecas e núcleos desatualizados após a atualização de índice" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "Mostra uma lista de todas as bibliotecas instaladas." -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2177,15 +2237,15 @@ msgstr "" "Por padrão, as bibliotecas embutidas providenciadas pelas plataformas/núcleos\n" "não são listadas, mas podem ser adicionadas com a flag --all." -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "Mostra a lista de plataformas instaladas." -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "Mostra a lista de exemplos para bibliotecas." -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." @@ -2193,20 +2253,20 @@ msgstr "" "Mostra a lista de exemplos para bibliotecas. Um nome pode ser passado como " "argumento para buscar por uma biblioteca específica." -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "Mostra a versão da CLI Arduino instalada no seu sistema." -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "Mostra o número de versão da CLI Arduino." -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "Tamanho (em bytes):" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" @@ -2214,21 +2274,21 @@ msgstr "" "O Esboço não pode ser localizado no caminho de compilação. Por favor " "especifique um caminho diferente." -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "Esboço criado em: %s" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "Perfil de Esboço para utilizar" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" "O rascunho é demasiado grande; veja %[1]s para técnicas de reduzir o " "ficheiro." -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2236,7 +2296,7 @@ msgstr "" "O rascunho usa %[1]s bytes (%[3]s%%) do espaço de armazenamento do programa." " O máximo é %[2]s bytes." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" @@ -2244,74 +2304,86 @@ msgstr "" "Esboços com a extensão. pde estão descontinuados. Por favor renomeie os " "seguintes arquivos para .ino:" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "Pule a vinculação da executável final." -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" "Pulando o toque de redefinição 1200-bps: nenhuma porta serial foi " "selecionada!" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "Pulando a criação de depósito de documentos de: %[1]s" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "Pulando a compilação de: %[1]s" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" "Pulando detecção de dependências para a biblioteca pré-compilada %[1]s" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "Pulando configuração de plataforma." -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "Pulando configuração de ferramenta." -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "Pulando: %[1]s" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "Alguns índices não puderam ser atualizados." -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" "Algumas atualizações falharam, por favor veja a saída para mais detalhes." -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "TOQUE: erro durante redefinição: %s" - -#: internal/cli/daemon/daemon.go:58 +#: internal/cli/daemon/daemon.go:76 msgid "The TCP port the daemon will listen to" msgstr "O daemon da porta TCP irá ouvir em" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "" + +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "" "O arquivo de configuração customizado (caso não seja definido, o padrão vai " "ser usado)." -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "A flag --debug-file deve ser usada junto de --debug." -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" @@ -2319,7 +2391,7 @@ msgstr "" "A chave '%[1]v' não é uma lista de itens. Não é possível adicionar nela.\n" "Talvez tente usar '%[2]s'?" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" @@ -2327,11 +2399,11 @@ msgstr "" "A chave '%[1]v' não é uma lista de itens. Não é possível remover dela.\n" "Talvez tente usar '%[2]s'?" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "A biblioteca %s possui múltiplas instalações:" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." @@ -2340,7 +2412,7 @@ msgstr "" "binários durante o processo de compilação. Usado apenas por plataformas que " "possuem suporte." -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." @@ -2349,11 +2421,11 @@ msgstr "" "resultados binários durante o processo de compilação. Usado apenas por " "plataformas que possuem suporte." -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "Os formatos de saída para os arquivos de registro podem ser: %s" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." @@ -2362,11 +2434,11 @@ msgstr "" "e criptografar um resultado binário. Usado apenas por plataformas que " "possuem suporte." -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "A plataforma não suporta '%[1]s' para bibliotecas pré-compiladas." -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2387,105 +2459,106 @@ msgstr "" "podem ser atualizadas. Se nada precisar ser atualizado, a saída do comando " "será vazia." -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "Ferramenta %s já está instalada" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2497,23 +2570,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2525,155 +2598,156 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Utilizado: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "A usar a biblioteca %[1]s na directoria: %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "A usar o ficheiro previamente compilado: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2682,46 +2756,42 @@ msgstr "" "%[2]s e pode ser incompatível com a sua placa actual que é executada em " "arquitectura(s) %[3]s." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2729,370 +2799,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" msgstr "" -#: commands/upload/upload.go:700 +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:68 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -3104,638 +3145,626 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:126 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "library not valid" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:341 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" "%[1]s‎existem duas versões diferentes da biblioteca‎%[2]s‎são " "necessárias:‎%[3]se" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "" "não é possível encontrar o caminho relativo para o esboço para o item‎" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "‎não é possível criar uma pasta para salvar o sketch" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "‎não é possível criar a pasta contendo o item‎" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "‎não é possível de ler o conteúdo do item de destino‎" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "‎não é possível ler o conteúdo do item de origem‎" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "‎incapaz de escrever para o arquivo de destino‎" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "%spacote desconhecido" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "%splataforma desconhecida%s:" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "%s‎extensão do arquivo sketch é desconhecido‎' '" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "%s não há suporte ‎algoritmo hash:‎" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "‎atualizar arduino: samd para a versão mais recente‎" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "‎atualizar tudo para a versão mais recente‎" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "%serro ao carregar" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "%sversão ‎não disponível para este sistema operacional‎" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "%s versão não encontrada" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "‎formato errado na resposta do servidor‎" diff --git a/i18n/data/pt_BR.po b/internal/i18n/data/pt_BR.po similarity index 100% rename from i18n/data/pt_BR.po rename to internal/i18n/data/pt_BR.po diff --git a/i18n/data/ru.po b/internal/i18n/data/ru.po similarity index 53% rename from i18n/data/ru.po rename to internal/i18n/data/ru.po index aa7290d171c..55fad1d4374 100644 --- a/i18n/data/ru.po +++ b/internal/i18n/data/ru.po @@ -11,125 +11,109 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s%[2]s Версия: %[3]s Фиксация: %[4]s Дата: %[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "Папка %[1]s более не поддерживается! Более подробно в %[2]s" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "Требуется %[1]s, но в данный момент устанавливается %[2]s" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "%[1]s не найден шаблон" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, сообщение: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, порт: %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, порты: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, версия протокола: %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s уже скачана" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "%s не может быть использована вместе с %s" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "%s установлен" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "%s уже установлено." -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "%s не является директорией" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "%s должен быть установлен." -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "'%s' имеет неправильную сигнатуру " -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(скрытый)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "(устаревшее)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" "--git-url и --zip-path отключены по умолчанию, для подробностей смотрите: %v" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "Доступен новый релиз Arduino CLI:" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -137,350 +121,358 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "ИНСТРУКЦИЯ КОМАНДНОЙ СТРОКИ ARDUINO" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "Архивирование откомпилированного ядра (кэширование) в: %[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "Файл загрузчика указан но не существует: %[1]s" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "Компиляция скетча..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -488,7 +480,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "" @@ -496,100 +488,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "По умолчанию" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "" @@ -603,289 +595,300 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -893,44 +896,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -938,203 +937,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "" @@ -1151,15 +1165,19 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1167,297 +1185,297 @@ msgstr "" "Глобальные переменные используют %[1]s байт (%[3]s%%) динамической памяти, " "оставляя %[4]s байт для локальных переменных. Максимум: %[2]s байт." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "Глобальные переменные используют %[1]s байт динамической памяти." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Установлено" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/configuration/network.go:66 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1465,385 +1483,397 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "Недостаточно памяти, программа может работать нестабильно." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "Пропущен '%[1]s' из библиотеки в %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "Несколько библиотек найдено для \"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "Недостаточно памяти; прочитайте %[1]s" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "Не используется: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "Порт" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1852,192 +1882,233 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2046,11 +2117,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2059,52 +2130,52 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "Скетч слишком большой; прочитайте %[1]s" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2112,116 +2183,128 @@ msgstr "" "Скетч использует %[1]s байт (%[3]s%%) памяти устройства. Всего доступно " "%[2]s байт." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2235,105 +2318,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "Тип" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2345,23 +2429,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2373,155 +2457,156 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Используется: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "Используем библиотеку %[1]s версии %[2]s из папки: %[3]s %[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "Используем библиотеку %[1]s в папке: %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "Используем предварительно скомпилированный файл: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2529,46 +2614,42 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: библиотека %[1]s должна запускаться на архитектурах %[2]s и " "может быть несовместима с вашей платой на архитектуре %[3]s." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2576,370 +2657,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" msgstr "" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:68 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2951,635 +3003,623 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:126 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:341 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/zh.po b/internal/i18n/data/zh.po similarity index 59% rename from i18n/data/zh.po rename to internal/i18n/data/zh.po index 0043b12c174..5ad9a21eb60 100644 --- a/i18n/data/zh.po +++ b/internal/i18n/data/zh.po @@ -1,136 +1,120 @@ # # Translators: -# CLI team <prj_cli_team@arduino.cc>, 2022 # Kuo Szu-Wei, 2022 # ZW, 2022 # Mimi <stevenjoezhang@gmail.com>, 2023 -# cike567, 2023 +# cike567, 2024 +# HalfSweet, 2024 # msgid "" msgstr "" -"Last-Translator: cike567, 2023\n" +"Last-Translator: HalfSweet, 2024\n" "Language-Team: Chinese (https://app.transifex.com/arduino-1/teams/108174/zh/)\n" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s %[2]s 版本:%[3]s 提交:%[4]s 日期:%[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "%[1]s 文件夹不再受支持!有关详细信息,请参见 %[2]s" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]s 无效,全部重建" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]s 是必需的,但当前已安装 %[2]s。" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "%[1]s 模式丢失" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s,消息:%[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s,端口:%[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s,端口:%[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s,协议版本:%[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s 已经下载" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "%s 和 %s 不能一起使用" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "%s 已安装" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "%s 已安装" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "%s 不是目录" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "%s 不是由软件包管理器管理的" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "%s 必须安装" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "%s 模式丢失" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "‘%s’ 的签名无效" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "‘build.core’ 和 ‘build.variant’ 指的是不同的平台:%[1]s 和 %[2]s" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(隐藏)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "(遗留)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "--git-url 和 --zip-path 默认是禁用的,更多信息参考: %v" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "--git-url 和 --zip-path 参数允许安装不受信任的文件,使用该标志风险自负。" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "--git-url 或 --zip-path 不能与 --install-in-builtin-dir 一起使用。" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr ".ino 文件已存在" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "新版本的 Arduino CLI 可用:" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" -msgstr "需要编译器上传" +msgstr "需要编程器上传" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "ARCH" @@ -138,350 +122,358 @@ msgstr "ARCH" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "ARDUINO 命令行手册" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "更多帮助:" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "将一个或多个值添加到设置中。" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "别名:" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "所有平台都是最新的。" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "所有内核都是最新版本" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "已经安装 %s" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "%[1]s 的替代方案:%[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "添加原型时出错" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "检测库时出错" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "附加除错日志到特定文件" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "架构:%s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "存档已经存在" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "存档构建代码(缓存):%[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Arduino CLI 项目命令" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI。" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "Arduino 命令行界面 (arduino-cli)" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "Arduino 开发板命令" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "Arduino 缓存命令。" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "Arduino 关于库的命令。" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "Arduino 配置命令。" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "Arduino 内核操作。" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "参数错误:%v" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "将项目写入开发板上。" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "作者:%s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "在这种情况下不能进行自动安装库,请手动删除所有重复的库并重试。" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "在这种情况下不能进行自动卸载库,请手动删除它们。" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "可用" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "可用命令:" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "要上传的二进制文件。" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "开发板名" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "开发板名:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "开发板版本:" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "已指定引导加载程序文件,缺少:%[1]s" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "‘core.a’ 的构建被保存到这个路径中,以便被缓存和重复使用。" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "无法新建 %s 数据目录" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "无法新建项目" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "无法下载库" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "找不到 %s 平台的依赖" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "无法打开项目" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "无法在 %v 键中设置多个值" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" -msgstr "" +msgstr "无法更新项目" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "不能同时使用以下参数:%s" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "无法写入配置文件:%v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "无法写入调试日志:%s" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "无法新建构建缓存目录" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "无法新建构建目录" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "无法新建配置文件目录:%v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "无法新建配置文件:%v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "无法新建临时目录" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "无法新建临时文件" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" -msgstr "" +msgstr "无法删除位于%[2]v的%[1]s" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "无法运行调试工具" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "找不到绝对路径:%v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "无法从配置中取得键值对 %[1]s:%[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "无法安装平台" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "无法安装 %s 工具 " -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "无法执行端口重置:%s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 msgid "Cannot upgrade platform" msgstr "无法升级平台" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "类别:%s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "检查指定库的依赖状态。" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "请提供给定的开发板/编程器组合以检查是否支持调试。" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "校验码与 package.json 中的校验码不同" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "校验码:" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "清理缓存。" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "以逗号分隔的开发板管理器附加地址列表。" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "命令保持运行,并在发生更改时打印已连接开发板的列表。" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "在 %s 中找不到已编译项目" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "编译 Arduino 项目" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "正在编译内核。。。" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "正在编译库。。。" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "正在编译 “%[1]s” 库" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "正在编译项目。。。" -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "配置文件已经存在,使用 --overwrite 弃用现有的配置文件。" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "配置文件写入:%s" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "%s 的配置选项" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." -msgstr "" +msgstr "用于通信的端口设置格式为:<ID>=<value>[,<ID>=<value>]……" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "配置平台。" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "配置工具。" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "已连接" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "已连接到 %s!按 CTRL-C 退出。" +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "内核" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "无法通过 HTTP 连接" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "无法新建索引目录" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "无法深度缓存内核构建:%[1]s" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "无法确定程序大小" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "无法获得当前工作目录:%v" @@ -489,7 +481,7 @@ msgstr "无法获得当前工作目录:%v" msgid "Create a new Sketch" msgstr "新建项目" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "从构建中创建并打印一个配置文件的内容。" @@ -497,100 +489,100 @@ msgstr "从构建中创建并打印一个配置文件的内容。" msgid "Creates a zip file containing all sketch files." msgstr "新建包含所有项目文件的 zip 文件。" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "用当前的配置创建或更新数据目录或自定义目录中的配置文件。" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "目前,Build Profiles 只支持通过 Arduino Library Manager 提供的库。" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" -msgstr "" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" +msgstr "%s的个性化设置:" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "已弃用" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "守护进程正在监听 %s:%s" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "调试 Arduino 项目" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "调试 Arduino 项目(此命令打开交互式 gdb 会话)" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "调试解释器,例如:%s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "%s 开发板不支持调试" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "支持调试:" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "默认" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "默认的 FQBN 设置为" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "默认的端口设置为" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "默认编程器设置为" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "删除开发板/库管理器下载缓存" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." -msgstr "删除下载文件夹内的内容,在安装库和开发板平台期间暂存存档文件。" +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." +msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "删除设置键及其所有子键。" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "依赖:%s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "说明" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "正在检测使用的库。。。" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "检测并显示连接到电脑的开发板的列表。" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "包含用于调试的二进制文件的目录。" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "包含用于上传的二进制文件的目录。" @@ -604,289 +596,300 @@ msgstr "保存生成文件的目录。默认为 ./docs,该目录必须存在 msgid "Disable completion description for shells that support it" msgstr "对于支持完成描述的 shell,禁用完成描述" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "已断开连接" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "只显示提供的 gRPC 调用" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "不要安装依赖。" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "不要覆盖已经安装的库。" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "不要覆盖已经安装的平台。" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "不执行实际上传操作,只注销操作" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "如果父进程终止,则守护进程不终止。" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "如果已经安装了库依赖项,请不要尝试更新它们。" + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "正在下载 %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "正在下载 %s 索引签名" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "正在下载 %s 索引" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "正在下载 %s 库" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "正在下载丢失的 %s 工具 " -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "正在下载软件包" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "正在下载 %s 平台" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "正在下载 %s 工具" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "下载一个或多个内核和相应的工具依赖" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "下载一个或多个库而不安装它们。" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "启用 gRPC 调用的调试日志" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "输入压缩文件的路径" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "输入在存储库上托管的库的 git 地址" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "将文件添加到项目存档时出错" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "在 %[1]s 中存档构建内核(缓存)时出错:%[2]s" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "错误归档:%v" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "计算相对文件路径时出错" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "清理缓存出错:%v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "将路径转换为绝对路径时出错:%v" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "复制输出 %s 文件时出错" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "新建实例时出错:%v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "新建输出目录时出错" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "新建项目存档时出错" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "新建项目时出错:%v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "检测开发板时出错:%v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "下载 %[1]s 时出错:%[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "下载 %s 时出错" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "下载 ‘%s’ 索引时出错" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "下载 ‘%s’ 索引签名时出错" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "下载 %s 库时出错" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "下载 %s 平台时出错" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "下载 %s 工具时出错" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "调试时出错:%v" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "检测 FQBN 时出错:%v" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "输出编码 JSON 过程时出错:%v" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "上传时出错:%v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "输出编码 YAML 过程时出错:%v" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "构建时出错:%v" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "安装时出错:%v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "卸载时出错:%v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "升级时出错:%v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "提取 %s 时出错" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "查找构建项目时出错" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "获取调试信息时出错:%v" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "获取项目存档的绝对路径时出错" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "获取开发板详细信息时出错:%v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "获取编译数据库的当前目录时出错:%s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "从 `sketch.yaml` 获取默认端口时出错。检查是否在正确的 sketch 文件夹中,或提供 --port 标志: " + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "获取 %s 库的信息时出错" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "获取库信息时出错:%v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "获取端口元数据出错:%v" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "获取端口设置详细信息时出错:%s" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "获取用户输入时出错" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "初始化实例时出错:%v" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "安装 %s 时出错:%v" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "安装 Git 库时出错:%v" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "安装 Zip 库时出错:%v" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "安装 %s 库时出错" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "安装 %s 平台时出错" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "安装 %s 工具时出错" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "列出开发板列表时出错:%v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "列出库时出错:%v" @@ -894,44 +897,40 @@ msgstr "列出库时出错:%v" msgid "Error listing platforms: %v" msgstr "列出平台列表时出错:%v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "加载硬件平台时出错" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "加载 %s 索引时出错" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "打开 %s 时出错" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "打开调试日志文件出错:%s" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "打开源代码覆盖数据文件时出错:%v" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "解析 --show-properties 参数时出错:%v" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "读取构建目录时出错" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "读取配置文件时出错:%v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "读取项目文件时出错" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "解析 %[1]s 的依赖时出错:%[2]s" @@ -939,203 +938,218 @@ msgstr "解析 %[1]s 的依赖时出错:%[2]s" msgid "Error retrieving core list: %v" msgstr "检索内核列表时出错:%v" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "回滚更改时出错:%s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "保存下载的索引时出错" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "保存已下载的索引签名时出错" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "搜索开发板时错误:%v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "搜索库时出现错误:%v" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "搜索平台时出错:%v" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "序列化编译数据库时出错:%s" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "原始的设置出错:%s" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "启动时发现出错:%v" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "卸载 %[1]s 时出错:%[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "更新库索引时出错:%v" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "升级库时出错" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "更新平台时出错:%s" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "验证签名时出错" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "检测 %[1]s 包含的库时出错" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "确定项目大小时出错:%s" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "写入编译数据库时出错:%s" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "错误:%v 不支持命令说明" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "错误:无效的源代码覆盖了数据文件:%v" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "事件" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "%s 库的示例" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "示例:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "可执行调试" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "应在 %s 目录中编译项目,但它是一个文件" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "芯片擦除失败" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "编译失败" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "无法烧录引导加载程序" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "新建数据目录失败" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "新建下载文件夹失败" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "未能侦听 TCP 端口:%[1]s。%[2]s 是无效端口。" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "未能侦听 TCP 端口:%[1]s。%[2]s 是未知名称。" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "未能侦听 TCP 端口:%[1]s。意外错误:%[2]v" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "未能侦听 TCP 端口:%s。地址已被使用。" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "上传失败" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "文件:" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "固件加密或签名需要定义以下所有属性:%s" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "第一条消息必须包含调试请求,而不是数据" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "参数 %[1]s 是强制使用的,当与以下内容一起使用时:%[2]s" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "参数:" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "强制运行安装后脚本(如果 CLI 未以交互方式运行)。" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." -msgstr "" +msgstr "强制运行 pre-uninstall 命令(如果 CLI 不是交互式运行)。" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "强制跳过安装后脚本(如果 CLI 以交互方式运行)。" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." -msgstr "" +msgstr "强制跳过 pre-uninstall 命令(如果 CLI 以交互方式运行)。" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" -msgstr "" +msgstr "找到%d平台有符合的 \"%s\": %s" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "完全合格开发板名,例如:arduino:avr:uno" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "不支持 GDB 服务器 ‘%s’" @@ -1152,311 +1166,315 @@ msgstr "已生成脚本" msgid "Generates completion scripts for various shells" msgstr "已为各种 shell 生成脚本" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "生成函数原型。。。" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "取得设定的键值对。" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "全局参数:" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." -msgstr " 个全局变量使用 %[1]s 个字节(%[3]s%%)的动态内存,剩下 %[4]s 个字节用于局部变量。最大值为 %[2]s 字节。" +msgstr "全局变量使用 %[1]s 个字节(%[3]s%%)的动态内存。剩下 %[4]s 个字节将被用于局部变量,最大可用值为 %[2]s 字节。" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "全局变量使用 %[1]s 字节的动态内存。" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "标识属性:" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "如果设定,则构建的二进制文件将导出到项目文件夹。" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "如果设定,则返回所有可安装和已安装的内核,包括手动安装的内核。" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "在列表中包含内置库(来自平台和 IDE)。" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "在存档中包含 %s 目录。" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "在 IDE-Builtin 目录下安装库" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "已安装" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "已安装 %s" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "正在安装 %s" -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "正在安装 %s 库" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "正在安装 %s 平台" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "正在安装 %s 工具" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "安装一个或多个内核和相应的工具依赖。" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "在系统中安装一个或多个指定的库。" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "缓存中的内部错误" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "无效的 ‘%[1]s’ 属性:%[2]s" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "无效调用:应显示帮助,但仅在文本模式下可用。" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "无效的 FQBN" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "无效的 TCP 地址:缺少端口" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "无效的地址" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "无效的附加地址:%v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" -msgstr "无效存档:在存档 %{1}s 中未找到文件 %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "传递的参数无效:%v" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "无效的构建属性" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "无效的数据大小正则表达式:%s" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "无效的 eeprom 大小正则表达式:%s" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "无效的网站主页: %s" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "无效的实例" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "无效的 %s 条目" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "无效的库" -#: configuration/network.go:63 +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "" + +#: internal/cli/configuration/network.go:66 msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "无效的 ‘%[1]s’ 网络代理: %[2]s" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "--log-level 选项无效:%s" - -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "无效的输出格式:%s" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "%s 中的软件包索引无效" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "无效 %s 参数:版本不允许" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "无效的pid值:‘%s’" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "无效的配置文件" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "platform.txt 中的方法无效" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "无效的大小正则表达式:%s" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "超时无效:%s" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "无效的版本" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "无效的 vid 值:‘%s’" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "只生成编译数据库,不实际编译。跳过除 pre*hook 之外的所有生成命令。" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "库名" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "库" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "库_名" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "最新的" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "%[1]s 库已声明为预编译:" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "库 %[1]s 已经安装,但有不同的版本。:%[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "库 %s 已经是最新版本" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "%s 库未安装" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "未找到 %s 库" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "未找到 %s 库" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "库不能同时使用 ‘%[1]s’ 和 ‘%[2]s’ 文件夹。在 ‘%[3]s’ 再次检查。" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "库安装失败" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "已安装的库" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "许可证:%s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "将所有内容链接在一起。。。" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "列出已安装的受支持的平台的所有开发板。如果指定开发板名,则可以搜索指定开发板" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "列出所有已知开发板及其相应的 FQBN。" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "列出已连接的开发板。" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "用逗号分隔的开发板选项列表。可以对多个选项多次使用。" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "用逗号分隔的自定义构建属性列表。可以对多个属性多次使用。" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "列出可更新的库。" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "列出可更新的平台。" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "列出所有已连接的开发板。" @@ -1464,115 +1482,121 @@ msgstr "列出所有已连接的开发板。" msgid "Lists cores and libraries that can be upgraded" msgstr "列出可以升级的内核和库" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "正在加载索引文件:%v" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "位置" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "可用内存不足,可能会出现稳定性问题。" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "维护者:%s" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "最大并行编译数。如果设置为 0,则将使用可用的 CPU 核心数。" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "等待端口发现的最长时间,例如:30s, 1m" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "记录此级别及以上的消息。有效级别为 %s" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "%[2]s 中的库中缺少 ‘%[1]s’" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "缺少 FQBN(完全合格开发板名)" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "找不到端口" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "缺少端口地址" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "找不到端口协议" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" -msgstr "找不到编译器" +msgstr "找不到编程器" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" -msgstr "" +msgstr "缺少必要的上传字段:%s" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "缺少大小正则表达式" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "缺少项目路径" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "未找到 ‘%s’ 监视器" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "监视端口设置:" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "为 “%[1]s” 找到了多个库" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "名" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "名:“%s”" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" -msgstr "" +msgstr "新的上传端口%[1]s(%[2]s)" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "没有找到开发板" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "未设置默认端口或 FQBN" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "未设置默认端口、FQBN 或编程器" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "没有找到库。" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "没有安装库。" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "没有与你的搜索相匹配的库。" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1580,178 +1604,179 @@ msgstr "" "没有与您的搜索匹配的库。\n" "你的意思是。。。\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "没有可用的库更新。" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "没有可用于端口协议 %s 的监视器" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "没有找到过时的平台或库。" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." -msgstr "" +msgstr "没有任何平台被安装。" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "没有与你的搜索匹配的平台。" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "未找到上传端口,使用 %s 作为后备" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "找不到有效的依赖解决方案" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "内存不足;有关减少空间的提示,请参见 %[1]s。" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "未使用:%[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "操作系统:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "官方 Arduino 开发板:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "省略库中除最新版本之外的所有版本(生成更紧凑的 JSON 输出)。" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "开启开发板的通信端口。" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "选项:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "可选,可以是:%s。用于告诉 gcc 使用哪个警告级别(-W 参数)。" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "可选,清理构建文件夹并且不使用任何缓存构建。" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "可选,优化编译输出用于调试,而不是发布。" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "可选,禁止几乎所有输出。" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "可选,开启详细模式。" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "可选。 包含一组替换项目源代码的文件的路径。" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "使用自定义值替代构建属性。可以对多个属性多次使用。" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "覆盖现有的配置文件。" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "覆盖一个已经存在的存档文件" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "覆盖现有的 .ino 项目。" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "打包程序" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "软件包地址:" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "软件包维护者:" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "软件包名:" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "软件包在线帮助" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "软件包网站:" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "段落:%s" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "路径" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "一个库的集合的路径。可以多次使用,或者可以用逗号分隔条目。" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "单个库的根文件夹的路径。可以多次使用,或者可以用逗号分隔条目。" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "写入日志的文件的路径。" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "保存已编译文件的路径。如果省略,将在操作系统的默认临时路径中创建目录。" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "在 %s 端口上执行 1200-bps TOUCH 重置" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "%s 平台已经安装" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "已安装 %s 平台" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" @@ -1759,94 +1784,99 @@ msgstr "" "在任何已知索引中都找不到 %s 平台\n" "也许你需要添加一个第 3 方地址?" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "%s 平台已卸载" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "‘%s’ 平台已经是最新版本" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "未找到 ‘%s’ 平台" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "平台 ID" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "平台 ID 不正确" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "平台地址:" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "平台架构:" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "平台类别:" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "平台校验码:" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "平台文件名:" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "平台名称:" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "平台大小(字节):" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "请指定一个 FQBN。在 %[1]s 端口上检测到多个可能的开发板,协议为 %[2]s" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "请指定一个 FQBN。%[1]s 端口上的开发板与协议 %[2]s 不能被识别" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "端口" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "端口关闭:%v" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "端口监视器错误" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "在 “%[1]s” 中找不到预编译库" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "打印开发板的详细信息。" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "将预处理的代码打印到标准输出,而不是编译。" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "在标准输出上打印日志。" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "打印当前配置" @@ -1855,192 +1885,272 @@ msgstr "打印当前配置" msgid "Prints the current configuration." msgstr "打印当前配置。" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "未找到 ‘%s’ 的配置文件''。" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" -msgstr "未找到 ‘%s’ 编译器" +msgstr "未找到 ‘%s’ 编程器" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" -msgstr "编译器名" +msgstr "编程器名" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" -msgstr "要使用的编译器,例如:atmel_ice" +msgstr "要使用的编程器,例如:atmel_ice" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" -msgstr "编译器:" +msgstr "编程器:" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "‘%s’ 属性未定义" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "协议" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "提供包括:%s" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "从设置中删除一个或多个值。" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "将 %[1]s 替换为 %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "用 %[2]s 替换 %[1]s 平台" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "需要的工具:" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "在端口上作为守护进程运行:%s" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "以静默模式运行,仅显示监视器输入和输出。" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." -msgstr "作为守护进程运行时,只执行一次内核和库的初始化。" +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "正在运行正常的内核构建。。。" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." -msgstr "" +msgstr "运行 pre_uninstall 命令。" + +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "搜索_条件" -#: internal/cli/debug/debug.go:185 +#: internal/cli/debug/debug.go:226 msgid "SVD file path" -msgstr "" +msgstr "SVD 文件路径" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "将生成文件保存在此目录中。" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "使用指定的关键词在开发板管理器中搜索一个开发板。" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "在开发板管理器中搜索一个开发板。" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "使用指定的关键字在开发板管理器中搜索内核。" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "在开发板管理器中搜索内核。" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." -msgstr "搜索一个或多个库数据(不区分大小写的搜索)。" - #: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "搜索一个或多个库数据。" - -#: internal/cli/lib/search.go:157 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" +"搜索满足条件的库文件。\n" +"\n" +"所有搜索均不区分大小写。多词搜索只会返回全部满足条件的库文件。\n" +"\n" +"不符合QV语法的将为基本搜索,将查找符合以下条件的库文件:\n" +" - Author\n" +"- Name\n" +"- Paragraph\n" +"- Provides\n" +"- Sentence\n" +"\n" +"有一种特殊的语法,称为限定符-值 (QV),表示搜索词\n" +"应只与每个库索引条目的一个字段进行比较。这种 语法\n" +"使用索引字段的名称 (不区分大小写)、等号 (=) 或冒号 (:),\n" +"以及一个值,例如 \"name=ArduinoJson \"或 \"provides:tinyusb.h\"。\n" +"\n" +"使用冒号分隔符的 QV 搜索词将匹配命名字段中任意位置\n" +"具有该值的所有库,而使用等号分隔符的 QV 搜索词将\n" +"只匹配命名字段中具有所提供值的库文件。\n" +"\n" +"QV 搜索词可以包括嵌入的空格,在值或整个词周围使用双引号 (\")\n" +"字符,例如 \"category=\"Data Processing\"\n" +"和\"category=Data Processing\"是等价的。\n" +"QV 术语可以包括一个字面双引号字符,方法是在它前面加上一个\n" +"反斜杠 (\\)字符。\n" +"\n" +"注意:使用双引号或反斜杠字符作为命令行参数传递的 QV 搜索条件\n" +"作为命令行参数传递时,可能需要加引号或转义,以防止 shell 解释这些字符。\n" +"\n" +"除上述字段外,QV 术语还可以使用这些限定符:\n" +" - Architectures\n" +"- Category\n" +"- Dependencies\n" +"- License\n" +"- Maintainer\n" +"- Types\n" +"- Version\n" +"- Website\n" +"\t\t" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "搜索与查询匹配的一个或多个库文件。" + +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "句子:%s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" -msgstr "" +msgstr "服务器路径" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "服务器响应:%s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" -msgstr "" +msgstr "服务器类型" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." -msgstr "" +msgstr "为上传所需的字段设置值。" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." -msgstr "" +msgstr "将终端设置为原始模式(无缓冲)。" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "设置一个值。" -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." -msgstr "设置端口和 FQBN 的默认值。如果没有指定端口或 FQBN,将显示当前的默认端口和 FQBN。" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "设置端口和 FQBN 的默认值。如果未指定端口、FQBN 或编程器,则显示当前默认端口、FQBN 和编程器。" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "设置保存配置文件的位置。" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "设置" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "设置键不存在" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "显示所有可用的内核版本。" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "显示通讯端口的所有设置。" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "在平台上显示标记为隐藏的开发板" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." -msgstr "" +msgstr "显示构建属性。这些属性是展开的,如果你希望它们完全按照定义的样子显示,请使用\"--show-properties=unexpanded\"。" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "显示完整的开发板详细信息" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "显示有关开发板的信息,特别是如果开发板在 FQBN 中有指定的选项。" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "只显示库名。" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" -msgstr "显示可用编译器列表" +msgstr "显示可用编程器列表" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "显示有关调试会话的元数据,而不是启动调试器。" @@ -2049,11 +2159,11 @@ msgstr "显示有关调试会话的元数据,而不是启动调试器。" msgid "Show outdated cores and libraries after index update" msgstr "在索引更新后显示过时的内核和库" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "显示已安装库的列表。" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2064,125 +2174,137 @@ msgstr "" "显示已安装库的列表。如果指定了 LIBNAME 范围,则列表仅限于该特定库。默认情况下,不会列出 ‘平台/核心’ 内置的库,可以通过添加 --all " "参数来列出它们。" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "显示已安装平台的列表。" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "显示库示例列表。" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "显示库的示例列表。可以指定名称作为搜索特定库的参数。" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "显示您系统上安装的 Arduino CLI 的版本号。" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "显示 Arduino CLI 的版本号。" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "大小(字节):" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "项目不能位于生成路径中。请指定其他生成路径" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "项目新建于:%s" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "使用项目配置文件" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "项目太大;请参阅 %[1]s,以获取减少项目大小的提示。" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr " 项目使用 %[1]s 字节(%[3]s%%)的程序存储空间。最大值为 %[2]s 字节。" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "项目 .pde 扩展名已弃用,请将以下文件重命名为 .ino:" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "跳过最终可执行文件的链接。" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "跳过 1200-bps TOUCH 重置:未选择串口!" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "正在跳过以下内容的存档创建:%[1]s" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "跳过编译:%[1]s" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "跳过 %[1]s 预编译库的依赖检测" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "跳过平台配置。" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." -msgstr "" +msgstr "跳过 pre_uninstall 命令" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "跳过工具配置。" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "跳过:%[1]s" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "一些索引无法更新。" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "有一些升级失败了,请查看输出结果以了解详情。" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "TOUCH:重置时出错:%s" - -#: internal/cli/daemon/daemon.go:58 +#: internal/cli/daemon/daemon.go:76 msgid "The TCP port the daemon will listen to" msgstr "守护进程将监听的 TCP 端口" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "" + +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "自定义配置文件(如果未指定,将使用默认值)。" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "参数 --debug-file 必须与 --debug 一起使用。" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "给定的开发板/编程器配置不支持调试。" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "给定的开发板/编程器配置支持调试。" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "实例不再有效,需要重新初始化" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" @@ -2190,7 +2312,7 @@ msgstr "" "‘%[1]v’ 键不是列表中的条目,无法添加到其中。\n" "是否可以使用 ‘%[2]s’?" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" @@ -2198,37 +2320,37 @@ msgstr "" "‘%[1]v’ 键不是列表中的条目,无法从中删除。\n" "是否可以使用 ‘%[2]s’?" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "库 %s 有多个安装。" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "自定义加密密钥的名称,用于在编译过程中对二进制文件进行加密。只在支持它的平台上使用。" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "自定义签名密钥的名称,用于在编译过程中对二进制文件进行签名。只在支持它的平台上使用。" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "日志的输出格​​式,可以是:%s" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "搜索自定义密钥以签署和加密二进制文件的文件夹的路径。只在支持它的平台上使用。" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "该平台不支持预编译库的 ‘%[1]s’。" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2242,105 +2364,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "此命令显示可升级的已安装内核和库或其一的列表。如果不需要更新任何内容,则输出为空。" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." -msgstr "" +msgstr "显示时间戳。" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "%s 工具已经安装" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "%s 工具已经卸载" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "不支持 ‘%s’ 工具链" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "工具链路径" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "工具链前缀" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "工具链类型" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "尝试运行 %s" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "打开详细模式。" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "类型" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "类型:%s" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "地址:" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "无法缓存构建的内核,请告知 %[1]s 维护者关注 %[2]s" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "无法获取文档文件夹:%v" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "无法获取本地应用程序数据文件夹:%v" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "无法获取用户主目录:%v" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "无法打开文件进行日志记录:%s" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "无法解析地址" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "正在卸载 %s" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "卸载 %s,工具不再需要了" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "如果不再使用,卸载一个或多个内核和相应的工具依赖。" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "卸载一个或多个库。" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "未知" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "未知 FQBN" @@ -2352,23 +2475,23 @@ msgstr "更新内核和库的索引" msgid "Updates the index of cores and libraries to the latest versions." msgstr "将内核和库的索引更新到最新版本。" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "更新内核索引到最新版本。" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "更新内核索引。" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "更新库索引到最新版本。" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "更新库索引。" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "升级不接受带有版本范围" @@ -2380,53 +2503,53 @@ msgstr "将安装的内核和库升级到最新版本。" msgid "Upgrades installed cores and libraries." msgstr "升级已安装的内核和库。" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "升级已安装的库。" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "将一个或所有已安装的平台升级到最新版本。" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "上传 Arduino 项目。" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "上传 Arduino 项目。不会在上传之前编译项目。" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "上传端口地址,例如:COM3 或 /dev/ttyACM2" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "在 %s 上找到上传端口" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "上传端口协议,例如:串行" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "编译后上传二进制文件。" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." -msgstr "使用外部编译器将引导加载程序上传到板上。" +msgstr "使用外部编程器将引导加载程序上传到板上。" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "上传引导加载程序。" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "使用 %s 协议上传到指定的开发板需要以下信息:" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" @@ -2434,148 +2557,145 @@ msgstr "" "链接不能包含逗号。用空格隔开作为 env var 导出的多个链接:\n" "%s" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "用法:" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "使用 %s 获取有关命令的更多信息。" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "已使用的库" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "已使用的平台" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "使用:%[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "使用平台的 ‘%[1]s’ 开发板,在列出的文件夹中:%[2]s" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "使用缓存库文件依赖项:%[1]s" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "使用平台的 ‘%[1]s’ 代码,在列出的文件夹中:%[2]s" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "使用 %[2]s 版本的 %[1]s 库,在列出的文件夹中:%[3]s%[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "使用的 %[1]s 库,在列出的文件夹中:%[2]s%[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "使用预编译代码:%[1]s" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "在 %[1]s 中使用预编译库" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "使用以前编译的文件:%[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "版本" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "版本号" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "值" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "上传后验证上传的二进制文件。" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "版本" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "版本:%s" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "警告:无法配置平台:%s" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "警告无法配置工具:%s" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" -msgstr "" +msgstr "警告!无法运行 pre_uninstall 命令%s" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "警告:该项目是用一个或多个自定义库编译的。" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "警告:%[1]s 库声称在 %[2]s 体系结构上运行,可能与当前在 %[3]s 体系结构上运行的开发板不兼容。" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "正在等待上传端口。。。" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "警告:%[1]s 开发板未定义 %[2]s 首选项。自动设置为:%[3]s" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "网站:%s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "将当前配置写入配置文件。" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "将当前配置写入数据目录中的配置文件。" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "正在写入配置文件:%v" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "在用配置文件编译时,你不能使用 %s 参数。" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "存档哈希与索引中的哈希不同" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "存档无效:在 zip 文件顶层中找到多个文件" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "存档无效:在压缩文件的顶层没有找到文件" @@ -2583,370 +2703,341 @@ msgstr "存档无效:在压缩文件的顶层没有找到文件" msgid "archivePath" msgstr "存档路径" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "缺少 arduino 预处理器程序" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "自动检测生成项目:%s" - -#: internal/cli/feedback/stdio.go:35 +#: internal/cli/feedback/stdio.go:37 msgid "available only in text format" msgstr "仅以文本格式提供" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "基本搜索 \"audio\"" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "基础搜索只由官方维护的 \"esp32\" 和 \"display\" 字段" + +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "在 %s 中找不到二进制文件" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "未找到开发板 %s" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "开发板名" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "未设置内置库目录" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "调用 %[1]s: %[2]w" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "找不到 %s 的最新版本" -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "找不到 %s 工具的最新版本" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "在 %s 中找不到主项目文件" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "找不到 id 为 %s 的 discovery" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "无法检索标准错误流:%s" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "无法检索标准输出流:%s" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "候选" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "无法使用上传工具:%s" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "检查本地存档完整性" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "清理构建路径" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "命令" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "‘%[1]s’ 命令失败:%[2]s" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "命令失败:%s" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "通信不同步,应为 ‘%[1]s’,收到 ‘%[2]s’" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "计算哈希:%s" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "配置的键 %s 包含无效字符" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "配置的值 %s 包含无效字符" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "将库复制到目标目录:" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "找不到有效的构建项目" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "无法覆盖" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "无法删除旧库" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "无法更新项目文件" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "创建核心缓存文件夹:%s" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "在 %[1]s 中创建 installed.json:%[2]s" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "新建用于提取的临时目录:%s" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "数据部分超出开发板中的可用空间" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "‘%s’ 依赖不可用" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "目标已存在" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "%s 目录已经存在,无法安装" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "目标目录已经存在" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "目录不存在:%s" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" -msgstr "发现 %[1]s 进程未启动:%[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "未找到 %s discovery" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "%s discovery 未安装" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "未找到 discovery 版本:%s" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "下载特定版本(在本例中为 1.6.9)。" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "下载最新版本的 Arduino SAMD 内核。" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "下载" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "正在下载 %[1]s 工具:%[2]s" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "空开发板标识符" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "加载项目文件时错误:" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr " 开启 %s 时错误" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "错误解析值:%v" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "解析版本约束时错误" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "处理来自服务器的响应时出错" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "查询 Arduino Cloud Api 时出错" -#: arduino/resources/install.go:67 +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" +msgstr "" + +#: internal/arduino/resources/install.go:68 msgid "extracting archive: %s" msgstr "正在提取存档:%s" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" -msgstr "正在提取存档:%w" - -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "无法计算 “%s” 文件的哈希值" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "未能初始化 http 客户端" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "提取的档存大小与索引中指定的大小不同" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "存档中的文件必须放在子目录中" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "寻找 %s 的绝对路径" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "参数" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "接下来的符号链接 %s" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "针对特定版本。" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "最新版本。" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "针对特定版本。" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" -msgstr "正在生成安装 id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "fqbn 的字段 %s 包含无效字符" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" -msgstr "生成 installation.secret:%w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "" + +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "正在获取存档文件信息:%s" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "正在获取存档信息:%s" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "正在获取存档路径:%s" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "正在获取 %[1]s 开发板的构建属性:%[2]s" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "获取 %[1]s 平台的 discovery 依赖:%[2]s" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "获取 %[1]s 平台的监视器依赖项:%[2]s" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "正在获取 %[1]s 的父目录:%[2]s" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "正在获取 %[1]s 平台的工具依赖:%[2]s" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "未设置安装目录" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "正在安装 %[1]s 工具:%[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "安装 %[1]s 平台: %[2]s" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "“%s” 的输出格式不支持交互式终端" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "无效的 ‘%s’ 指令" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "无效的 “添加” 消息:找不到端口" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "无效的 “删除” 消息:找不到端口" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "无效的校验码格式:%s" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "无效的配置选项:%s" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "无效的空内核架构 ’%s‘" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "无效的空内核参数" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "无效的空内核名称 ’%s‘" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "无效的空内核引用 ’%s‘" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "无效的空内核版本:’%s‘" @@ -2958,635 +3049,623 @@ msgstr "无效的空库名" msgid "invalid empty library version: %s" msgstr "无效的空库版本:%s" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "发现无效的空选项" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "无效的 git 地址" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "无效的 ‘%[1]s’ 哈希:%[2]s" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "无效的 %s 条目" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "无效的库指令:" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "无效的库 layout:%s" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "无效的库 location:%s" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "无效库:没有找到头文件" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "无效的 ‘%s’ 选项 " -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "无效选项 '%s'。" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "新建配置目录的路径无效:%[1]s 错误:%[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" -msgstr "写入库存文件的路径无效:%[1]s 错误:%[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "无效的平台存档大小:%s" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "无效的平台标识符" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "无效的平台索引网址:" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "无效的热插拔监视器引用:%s" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "%s 的端口配置值无效:%s" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "无效的端口配置:%s" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "无效的 ‘%[1]s’ 方法: %[2]s" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." -msgstr "" +msgstr "无效的工程命名 \"%[1]s\": 第一个字符必须是字母数字或\"_\",后面的字符也可以包含\"-\"和\".\"。最后一个字符不能是\".\"。" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "‘%[2]s’ 选项的 ‘%[1]s’ 值无效" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "%s 版本目录无效" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "无效的版本:" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "在设置中找不到键" - -#: internal/cli/core/search.go:45 +#: internal/cli/core/search.go:39 msgid "keywords" msgstr "关键字" -#: arduino/libraries/librariesmanager/install.go:130 +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "Daniel Garcia编写的库文件" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "仅限由 Adafruit 维护,名称中含有 \"gfx\" 的库文件" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "至少依赖于 \"IRremote\" 的库" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "仅依赖于 \"IRremote\" 的库" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "名称中含有 \"buzzer\" 的库" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "名称与 \"pcf8523 \"完全匹配的库" + +#: internal/arduino/libraries/librariesmanager/install.go:126 msgid "library %s already installed" msgstr "%s 库已安装" -#: arduino/libraries/librariesmanager/install.go:319 +#: internal/arduino/libraries/librariesmanager/install.go:315 msgid "library not valid" msgstr "库无效" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" -msgstr "库路径不存在:%s" - -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "列出串口" - -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 msgid "loading %[1]s: %[2]s" msgstr "正在加载 %[1]s: %[2]s" -#: arduino/cores/packagemanager/loader.go:351 +#: internal/arduino/cores/packagemanager/loader.go:314 msgid "loading boards: %s" msgstr "正在加载开发板:%s" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" -msgstr "正在从 %s 下载附加工具" - -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "正在加载 %[1]s json 索引文件:%[2]s" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "正在从 %[1]s 加载库:%[2]s" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "正在加载库属性:%s" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "正在加载平台 %s 发行版本" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "正在加载 platform.txt" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "安装所需 %s 平台" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "安装所需 %s 工具" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "在 %s 中加载工具发行版本" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "在 %s 中查找 boards.txt" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "寻找构建产物" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "项目中缺少主文件:%s" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "缺少 ‘%s’ 指令" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "缺少校验码:%s" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "缺少 %[2]s 开发板引用的 %[1]s 软件包 " -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" -msgstr "" +msgstr "缺少软件包索引%s,无法保证未来的更新" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "缺少 %[1]s 平台:%[2]s 被开发板 %[3]s 引用" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "缺少平台 %[1]s 发行版本:%[2]s 被开发板 %[3]s 引用" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" -msgstr "" +msgstr "缺少签名" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "未找到公开监视器:%s" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "正在将提取的存档移动到目标目录:%s" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "找到多个构建文件:‘%[1]s’ 和 ‘%[2]s’" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "找到多个主项目文件 (%[1]v, %[2]v)" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "没有找到适用于当前操作系统的 %[1]s 工具的兼容版本,请尝试联系 %[2]s" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "没有指定可执行文件" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "没有指定实例" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "未指定项目或构建目录/文件" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "没有这样的文件或目录" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "存档中没有唯一的根目录,找到了 ‘%[1]s’ 和 ‘%[2]s’" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "未提供上传端口" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "在 %[1]s 中找不到有效的项目:缺少 %[2]s" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "对于当前的操作系统没有可用的版本,请尝试联系 %s" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "未在终端中运行" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "正在打开存档文件:%s" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "正在打开 boards.txt" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "以 1200bps 的速率打开端口" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "打开签名文件:%s" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "打开目标文件:%s" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "未找到 %s 软件包 " -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "未找到 ‘%s’ 软件包 " -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "正在解析 IDE 附加索引" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "解析 FQBN:%s" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "解析 library_index.json: %s" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "路径不是平台目录:%s" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "在 %[2]s 软件包中找不到 %[1]s 平台" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" -msgstr "%s 平台没有可用的版本" - -#: arduino/cores/packagemanager/package_manager.go:298 +#: internal/arduino/cores/packagemanager/package_manager.go:341 msgid "platform %s is not installed" msgstr "%s 平台未安装" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "该平台不适用于您的操作系统" + +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "平台未安装" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "请改用 --build-property。" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "已添加可插入 discovery:%s" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "端口" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "未找到端口:%[1]s %[2]s" -#: arduino/monitor/monitor.go:236 +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "编程器" + +#: internal/arduino/monitor/monitor.go:235 msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "不支持协议版本:请求了 %[1]d,获得了 %[2]d" -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" -msgstr "不支持协议版本:请求 1,得到 %d" - -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" -msgstr "正在读取 %[1]s: %[2]s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "正在读取 %[1]s 目录 : %[2]s" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" -msgstr "阅读目录 %[1]s 内容:%[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "正在读取 %s 目录" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" -msgstr "正在读取 %s 目录的内容:%w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" +msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "正在读取 %[1]s 文件: %[2]s" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" -msgstr "正在读取文件:%v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "读取文件" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "正在读取 lib 头文件:%s" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" -msgstr "正在读取 lib src 目录:%s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" -msgstr "正在读取库头文件:%w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "正在读取 library_index.json: %s" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "正在读取软件包根目录:%s" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "阅读项目文件" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "未找到 ‘%s’ 方法" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "找不到 %[2]s 工具的 %[1]s 发行版本" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "发行不能为无" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "正在删除损坏的存档文件:%s" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "删除库目录:%s" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "正在删除平台文件:%s" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "找不到 %[2]s 平台所需的 %[1]s 版本" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "正在检索Arduino密钥:%s" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "扫描示例:%s" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" -msgstr "在 %[1]s 中搜索 builtin_tools_versions.txt:%[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "扫描项目示例" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "正在搜索软件包根目录:%s" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "将 DTR 设置为 OFF" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "项目名称不能为空" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" -msgstr "" +msgstr "工程命名不能是保留名称 \"%[1]s\"" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "项目名称过长(%[1]d 个字符)。 最大允许长度为 %[2]d" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "项目路径无效" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "项目路径" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "来源不是目录" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "开始发现 %s" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "测试存档校验码:%s" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "测试存档大小:%s" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "测试存档是否被缓存:%s" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "测试本地存档完整性:%s" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "文本部分超出开发板的可用空间" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "编译数据库可能不完整或不准确" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "该平台没有发行版本" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "服务器响应状态 %s" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "等待消息超时" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "等待来自 %s 的消息超时" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "%s 工具不是由软件包管理器管理的" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "未找到 %s 工具" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "在 ‘%[2]s’ 软件包中找不到 ‘%[1]s’ 工具" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "工具未安装" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "找不到发行工具:%s" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "未找到工具的 %s 版本" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "需要 %[1]s 库的两个不同版本:%[2]s 和 %[3]s" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "无法计算项目的相对路径" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "无法新建文件夹来保存项目" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "无法新建包含该项目的文件夹" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "无法将 config 编码成 YAML:%v" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "无法读取目标项目的内容" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "无法读取源项目的内容" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "无法写入目标文件" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "未知 %s 软件包 " -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "未知 %s 平台:%s" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "未知的项目文件扩展名 ‘%s’" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "不支持的哈希算法:%s" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "将 arduino:samd 升级到最新版本" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "将所有内容升级到最新版本" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "上传错误:%s" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "未设置用户目录" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "'%s' 输出格式不支持用户输入" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "在非互动模式下不支持用户输入" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "%s 版本不适用于此操作系统" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "未找到 %s 版本" -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "服务器响应格式错误" diff --git a/i18n/data/zh_TW.po b/internal/i18n/data/zh_TW.po similarity index 59% rename from i18n/data/zh_TW.po rename to internal/i18n/data/zh_TW.po index 382039fdaaf..594c66ea6dc 100644 --- a/i18n/data/zh_TW.po +++ b/internal/i18n/data/zh_TW.po @@ -1,132 +1,116 @@ # # Translators: -# you bike, 2023 +# yubike, 2024 # msgid "" msgstr "" -"Last-Translator: you bike, 2023\n" +"Last-Translator: yubike, 2024\n" "Language-Team: Chinese (Taiwan) (https://app.transifex.com/arduino-1/teams/108174/zh_TW/)\n" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s %[2]s 版本:%[3]s 交付:%[4]s 日期:%[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "已不支援%[1]s 檔案夾!詳細資訊,請見 %[2]s" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]s 無效,重新建構全部" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:124 msgid "%[1]s is required but %[2]s is currently installed." msgstr "需要 %[1]s ,但已安裝 %[2]s" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:488 msgid "%[1]s pattern is missing" msgstr "%[1]s 樣態遺失" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s,訊息:%[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s,連接埠:%[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s,連接埠:%[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s,協議版本:%[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s 已經下載" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:754 msgid "%s and %s cannot be used together" msgstr "%s 和 %s 不能一起使用" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:371 msgid "%s installed" msgstr "%s 已安裝" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:121 msgid "%s is already installed." msgstr "%s 已安裝" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:617 msgid "%s is not a directory" msgstr "%s 不是目錄" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:290 msgid "%s is not managed by package manager" msgstr "%s 不是由套件管理員管理的" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:118 msgid "%s must be installed." msgstr "必須安裝 %s " -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:192 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "%s 樣態遺失" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "'%s'的簽名無效" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:443 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "'build.core' 和 'build.variant' 參照到不同的平台: %[1]s 和 %[2]s" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(隱藏)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:302 msgid "(legacy)" msgstr "(舊版)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "--git-url 和 --zip-path 預設為不能使用, 詳情請見: %v" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "--git-url 和 --zip-path 旗標允許安裝未被信任的檔案, 使用風險自負." -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "--git-url 或 --zip-path 不能和 --install-in-builtin-dir 一起使用" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr ".ino 檔已存在" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "有新版的 Arduino CLI" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "上傳需要編寫器/燒錄器" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "架構" @@ -134,350 +118,358 @@ msgstr "架構" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "ARDUINO 命令列手冊" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "更多協助主題:" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "加入一或多個值到設定中" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "別名:" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "全平台已是最新版" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "所有核心都已是最新版" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:135 msgid "Already installed %s" msgstr "已安裝 %s" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "%[1]s 的替代品: %[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "新增原型時出錯" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "偵測程式庫時出錯" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "添加除錯日誌到指定檔案" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "架構:%s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "壓縮檔已存在" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:163 msgid "Archiving built core (caching) in: %[1]s" msgstr "壓縮在: %[1]s 裏已編譯核心 (快取) " -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Arduino CLI sketch 命令" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI 命令列介面" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "Arduino 命令列界面 (arduino-cli)" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "Arduino 開發板指令" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "Arduino 快取指令" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "Arduino 程式庫指令" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "Arduino 設定指令" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "Arduino 核心作業" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "參數錯誤:%v" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "將 sketch 放入開發板" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "作者: %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:79 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "在這情況下無法自動化程式庫安裝, 請手動移除重覆的再試" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "在這情況下無法自動化程式庫卸除, 請手動移除" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "可用的" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "可用命令:" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "要上傳的二進位檔" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "開發板名" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "開發板名:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "開發板版本:" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:243 msgid "Bootloader file specified but missing: %[1]s" msgstr "找不到指定的 Bootloader 檔: %[1]s" -#: internal/cli/compile/compile.go:99 +#: internal/cli/compile/compile.go:98 msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "'core.a'的編譯檔已存到這路徑,方便快取和重複使用" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "無法建立 %s 資料目錄" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "無法建立 sketch" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:91 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "無法下載程式庫" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:136 msgid "Can't find dependencies for platform %s" msgstr "找不到 %s 平台的相依" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "無法打開 sketch" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "無法在 %v 鍵設多個值" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "無法更新 sketch" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:34 msgid "Can't use the following flags together: %s" msgstr "不能同時使用下列參數: %s" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "無法寫入設定檔: %v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "無法寫入除錯日誌: %s" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:199 msgid "Cannot create build cache directory" msgstr "無法建立編譯快取的目錄" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:177 msgid "Cannot create build directory" msgstr "無法建立編譯目錄" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "無法建立設定檔的目錄: %v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "無法建立設定檔: %v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "無法建立暫存目錄" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "無法建立暫存檔" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "無法刪除鍵值 %[1]s: %[2]v" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:69 msgid "Cannot execute debug tool" msgstr "無法執行除錯工具" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "找不到絕對路徑: %v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "無法從設定裏取得鍵值 %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:143 msgid "Cannot install platform" msgstr "無法安裝平台" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:349 msgid "Cannot install tool %s" msgstr "無法安裝工具 %s" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:532 msgid "Cannot perform port reset: %s" msgstr "無法執行連接埠重設: %s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "無法移除設定鍵 %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:161 msgid "Cannot upgrade platform" msgstr "無法升級平台" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "無法寫入檔案 %[1]s: %[2]v" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "類別:%s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "檢查指定程式庫的相依狀態" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "檢查指定的板子/燒錄器是否支援除錯。" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "校驗碼和 package.json 檔內的不同" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "校驗碼:" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "清除快取" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "給開發板管理員用的網址清單,以逗號分隔" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "命令保持執行, 在有更動時列出連接的開發板" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:176 commands/service_upload.go:440 msgid "Compiled sketch not found in %s" msgstr "在 %s 中找不到已編譯的 sketch" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "編譯 Arduino sketch" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:422 msgid "Compiling core..." msgstr "編譯核心..." -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:401 msgid "Compiling libraries..." msgstr "編譯程式庫..." -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:133 msgid "Compiling library \"%[1]s\"" msgstr "編譯程式庫 “%[1]s”" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:385 msgid "Compiling sketch..." msgstr "編譯 sketch ..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "設定檔已存在,使用 --overwrite 覆蓋它" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "設定檔寫入:%s" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:238 msgid "Configuration options for %s" msgstr "%s 的設定選項" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:74 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "通訊埠設定, 格式為 <ID>=<value>[,<ID>=<value>]..." -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:177 msgid "Configuring platform." msgstr "設定平台" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:359 msgid "Configuring tool." msgstr "設定工具" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:196 msgid "Connected" msgstr "已連接" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "已連到 %s!按 CTRL-C 退出" +#: internal/cli/monitor/monitor.go:241 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "連接 %s 中。按 CTRL-C 結束。" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Core" msgstr "核心" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:103 msgid "Could not connect via HTTP" msgstr "無法通過 HTTP 連接" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "無法建立索引目錄" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "無法深入快取核心編譯:%[1]s" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:154 msgid "Couldn't determine program size" msgstr "無法確定程式大小" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "無法取得工作目錄:%v" @@ -485,7 +477,7 @@ msgstr "無法取得工作目錄:%v" msgid "Create a new Sketch" msgstr "建立新 sketch" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:95 msgid "Create and print a profile configuration from the build." msgstr "從建構中建立並印出設定檔內容" @@ -493,100 +485,100 @@ msgstr "從建構中建立並印出設定檔內容" msgid "Creates a zip file containing all sketch files." msgstr "建立含全部 sketch 檔的 zip 壓縮檔" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "用目前的設定值建立或更新資料或自定義目錄內的設定檔" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:327 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "目前建構方案只支援 Arduino 程式庫管理員所提供的程式庫" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" -msgstr "cortex-debug IDE plugin 客製化設定:" +#: internal/cli/debug/debug.go:254 +msgid "Custom configuration for %s:" +msgstr "%s的客製化設定:" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "已棄用" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "背景程式正在監聽 %s:%s" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:52 msgid "Debug Arduino sketches." msgstr "除錯 Arduino sketch" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:53 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "除錯 Arduino sketch (此命令會開啟互動式 gdb 對話)" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:66 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "除錯解譯器,例如:%s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:206 msgid "Debugging not supported for board %s" msgstr "不支援 %s 開發板除錯" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "支援除錯:" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Default" msgstr "預設" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "預設 FQBN 設定為" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "預設連接埠設定為" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "預設燒錄器設為" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "刪除開發板/程式庫管理員下載快取" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." -msgstr "刪除 `directories.downloads` 目錄裏面的內容,內有在安裝程式庫和開發板平台時所暫存的檔案" +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." +msgstr "刪除下載快取目錄裏,含有安裝程式庫和開發板平台時存放的資料。" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "刪除某設定鍵和所有子鍵" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "相依: %s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "說明" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:313 msgid "Detecting libraries used..." msgstr "檢測有使用的程式庫..." -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "檢測並顯示連接到電腦的開發板清單" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:67 msgid "Directory containing binaries for debug." msgstr "目錄內有除錯用二進位檔" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "目錄內有上傳用二進位檔" @@ -600,289 +592,300 @@ msgstr "目錄用來保存生成檔。預設為 ./docs,本目錄必須存在" msgid "Disable completion description for shells that support it" msgstr "關閉 shell 的完成描述功能" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:197 msgid "Disconnected" msgstr "斷開連接" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "只顯示提供的 gRPC 呼叫" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "不安裝相依" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "不要覆蓋已安裝的程式庫" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "不要覆蓋已安裝的平台" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "不要真的上傳,取消動作" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "就算父程序已 GG,也不要中止背景程式" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "如果已安裝好切勿試著再更新程式庫相依" + +#: commands/service_library_download.go:88 msgid "Downloading %s" msgstr "下載 %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "下載索引簽名: %s" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "下載索引: %s" -#: commands/instances.go:439 +#: commands/instances.go:374 msgid "Downloading library %s" msgstr "下載程式庫 %s" -#: commands/instances.go:136 +#: commands/instances.go:53 msgid "Downloading missing tool %s" msgstr "下載缺少的工具 %s" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:96 msgid "Downloading packages" msgstr "下載安裝包" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "下載平台 %s" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "下載工具 %s" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "下載一或多個核心及工具相依" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "下載一或多個程式庫, 但不安裝" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "啟用 gRPC 呼叫的除錯記錄" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "輸入 zip 壓縮檔的路徑" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "輸入托管程式庫的 git 位址" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "將檔案加入 sketch 時出錯" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:169 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "在 %[1]s 中儲存編譯核心(快取)時出錯:%[2]s" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "錯誤歸檔:%v" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "計算相對檔案路徑時出錯" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "清理快取時出錯: %v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:216 msgid "Error converting path to absolute: %v" msgstr "將路徑轉換成絕對路徑時出錯: %v" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:403 msgid "Error copying output file %s" msgstr "複製輸出檔 %s 時出錯" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "建立設定檔出錯: %v" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "建立實例時出錯: %v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:387 msgid "Error creating output dir" msgstr "建立輸出目錄時出錯" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "建立 sketch 檔時出錯" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "建立 sketch 時出錯: %v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:96 msgid "Error detecting boards: %v" msgstr "偵測開發板時出錯: %v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "下載 %[1]s 出錯: %[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "下載 %s 出錯" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "下載索引'%s'時出錯" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "下載索引簽名 '%s' 出錯" -#: commands/instances.go:451 +#: commands/instances.go:384 commands/instances.go:390 msgid "Error downloading library %s" msgstr "下載程式庫 %s 出錯" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "下載平台 %s 出錯" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "下載工具 %s 出錯" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:150 internal/cli/debug/debug.go:183 msgid "Error during Debug: %v" msgstr "除錯時出錯: %v" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:141 msgid "Error during FQBN detection: %v" msgstr "FQBN 偵測時出錯: %v" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "輸出 JSON 編碼過程出錯:%v" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:260 internal/cli/compile/compile.go:302 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "上傳時出錯: %v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "輸出 YAML 編碼過程出錯: %v" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:375 msgid "Error during build: %v" msgstr "建構時出錯: %v" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "安裝時出錯: %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "卸載時出錯: %v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "升級時出錯: %v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "解開 %s 時出錯" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:437 msgid "Error finding build artifacts" msgstr "尋找建構成品時出錯" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:130 msgid "Error getting Debug info: %v" msgstr "取得除錯資訊時出錯: %v" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "取得 sketch 檔絕對路徑時出錯" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "取得開發板細節時出錯: %v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "取得編譯資料庫所在目錄時出錯: %s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:108 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "從 `sketch.yaml` 取得預設連接埠出錯. 請檢查是否在正確的 sketch 目錄下, 或者提供 --port 參數: %s" + +#: commands/service_compile.go:326 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "取得程式庫 %s 資訊時出錯" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "取得程式庫資訊時出錯: %v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:92 msgid "Error getting port metadata: %v" msgstr "取得連接埠資訊出錯: %v" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:153 msgid "Error getting port settings details: %s" msgstr "取得連接埠設定細節出錯: %s" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "取得用戶輸入時出錯" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "初始化實例時出錯: %v" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "安裝 %s 時出錯: %v" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "安裝 Git 程式庫出錯: %v" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "安裝 Zip 程式庫出錯: %v" -#: commands/instances.go:461 +#: commands/instances.go:400 msgid "Error installing library %s" msgstr "安裝程式庫 %s 出錯" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "安裝 %s 平台出錯" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "安裝 %s 工具出錯" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "列出開發板出錯: %v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "列出程式庫出錯: %v" @@ -890,44 +893,40 @@ msgstr "列出程式庫出錯: %v" msgid "Error listing platforms: %v" msgstr "列出平台出錯: %v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "載入硬體平台時出錯" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "載入索引 %s 出錯" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "開啟 %s 時出錯" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "打開除錯日誌檔出錯: %s" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:189 msgid "Error opening source code overrides data file: %v" msgstr "打開原始碼覆寫資料檔時出錯: %v" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:202 msgid "Error parsing --show-properties flag: %v" msgstr "解析 --show-properties 參數出錯: %v" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:396 msgid "Error reading build directory" msgstr "讀取建構目錄時出錯" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "讀取設定檔時出錯: %v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "讀取 sketch 檔出錯" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "解析 %[1]s 的相依時出錯: %[2]s" @@ -935,203 +934,218 @@ msgstr "解析 %[1]s 的相依時出錯: %[2]s" msgid "Error retrieving core list: %v" msgstr "取得核心列表出錯: %v" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 msgid "Error rolling-back changes: %s" msgstr "回復更改時出錯: %s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "儲存下載的索引出錯" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "儲存下載的索引簽名時出錯" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "搜尋開發板時出錯: %v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "搜尋程式庫時出錯: %v" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "搜尋平台時出錯: %v" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "序列化編譯資料庫時出錯: %s" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:219 +msgid "Error setting raw mode: %s" +msgstr "設定原始模式出錯: %s" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "設定鍵值時出錯: %v" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "啟動探索時出錯:%v" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "卸載 %[1]s 時出錯: %[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "更新程式庫索引時出錯: %v" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "更新程式庫時出錯" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:153 msgid "Error upgrading platform: %s" msgstr "更新平台時出錯: %s" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "驗證簽名時出錯" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "偵測 %[1]s 所包含的程式庫時出錯" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:79 internal/arduino/builder/sizer.go:88 +#: internal/arduino/builder/sizer.go:91 internal/arduino/builder/sizer.go:110 +#: internal/arduino/builder/sizer.go:215 internal/arduino/builder/sizer.go:225 +#: internal/arduino/builder/sizer.go:229 msgid "Error while determining sketch size: %s" msgstr "確定 sketch 大小時出錯: %s" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "寫入編譯資料庫時出錯: %s" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "寫入檔案時出錯: %v" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "錯誤: %v 不支持命令說明" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:195 msgid "Error: invalid source code overrides data file: %v" msgstr "錯誤: 無效原始碼覆蓋了資料檔: %v" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:102 msgid "Event" msgstr "事件" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "%s 程式庫的範例" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "範例:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:221 msgid "Executable to debug" msgstr "可執行來除錯" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:179 commands/service_upload.go:443 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "%s 目錄內應該有已編譯的 sketch,卻只有個檔案" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:566 msgid "Failed chip erase" msgstr "晶片擦除失敗" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:573 msgid "Failed programming" msgstr "燒錄失敗" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:569 msgid "Failed to burn bootloader" msgstr "燒錄 bootloader 失敗" -#: commands/instances.go:166 +#: commands/instances.go:90 msgid "Failed to create data directory" msgstr "建立資料目錄失敗" -#: commands/instances.go:156 +#: commands/instances.go:79 msgid "Failed to create downloads directory" msgstr "建立下載檔案夾失敗" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "監聽 TCP 埠失敗: %[1]s. %[2]s 是無效連接埠" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "監聽 TCP 埠失敗: %[1]s. %[2]s 是未知名稱" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "監聽 TCP 埠: %[1]s 失敗, 未預期的錯誤: %[2]v" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "監聽 TCP 埠: %s 失敗。位址已被使用" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:577 msgid "Failed uploading" msgstr "上傳失敗" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "檔案:" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:160 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "韌體加密/簽名需要定義以下全部屬性: %s" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:40 msgid "First message must contain debug request, not data" msgstr "第一則訊息必須包含除錯請求,而不是資料" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:45 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "參數 %[1]s 當與:%[2]s 一起使用時必須強制使用" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "旗標參數:" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "強制執行安裝後指令檔 (如果 CLI 未以互動方式執行)" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "強制執行 pre-uninstall 命令 (如果 CLI 在非互動狀態)." -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "強制跳過安裝後指令檔 (如果 CLI 以互動方式運行)" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "強制跳過 pre-uninstall 命令 (如果 CLI 在互動狀態)." -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "找到 %d 平台有符合 \"%s\": %s" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "完全合格的開發板名,例如:arduino:avr:uno" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:188 msgid "GDB server '%s' is not supported" msgstr "不支援 GDB 伺服器 '%s'" @@ -1148,311 +1162,315 @@ msgstr "已生成指令檔" msgid "Generates completion scripts for various shells" msgstr "已為各種 shell 生成指令檔" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:333 msgid "Generating function prototypes..." msgstr "生成函式原型..." -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "取得設定的鍵值。" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "全域旗標:" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:164 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "全域變數使用 %[1]s 位元組 (%[3]s%%) 的動態記憶體, 保留 %[4]s 位元組給區域變數. 最大 %[2]s 位元組" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:170 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "全域變數使用 %[1]s 位元組的動態記憶體" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:297 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "標識屬性:" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:128 msgid "If set built binaries will be exported to the sketch folder." msgstr "一經設定,建構的二進位檔將導出到 sketch 檔案夾" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "一經設定,傳回所有可安裝和已安裝的核心,包括手動安裝的" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "列表內包含內建程式庫 (來自平台和 IDE)" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "存檔中包含 %s 目錄" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "安裝程式庫到 IDE-Builtin 目錄" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "已安裝" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:200 msgid "Installed %s" msgstr "已安裝 %s" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:333 msgid "Installing %s" msgstr "安裝 %s..." -#: commands/instances.go:459 +#: commands/instances.go:398 msgid "Installing library %s" msgstr "安裝程式庫 %s" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:119 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "安裝平台 %s " -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "安裝工具 %s" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "安裝一或多個核心和工具相依" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "安裝一或多個指定程式庫到系統中" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "快取的內部錯誤" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "無效的 '%[1]s' 屬性:%[2]s" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "無效呼叫: 應顯示求助,但只在文字模式下能用" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "無效的 FQBN" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "無效的 TCP 位址:缺少連接埠" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "無效的網址" -#: commands/instances.go:274 +#: commands/instances.go:186 msgid "Invalid additional URL: %v" msgstr "無效的額外網址: %v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" -msgstr "無效存檔: 檔案 %{1}s 不在存檔%{2}s 裏" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "無效的存檔:%[1]s 不在 %[2]s 存檔裏" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "傳送的參數無效: %v" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:270 msgid "Invalid build properties" msgstr "無效的建構屬性" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:250 msgid "Invalid data size regexp: %s" msgstr "無效的資料大小正規表示式: %s" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:256 msgid "Invalid eeprom size regexp: %s" msgstr "無效的 eeprom 大小正規表示式: %s" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "無效的索引網址: 1%s" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "無效的實例" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "無效的項目 %s" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "無效的程式庫" -#: configuration/network.go:63 +#: internal/cli/cli.go:262 +msgid "Invalid logging level: %s" +msgstr "無效的日誌層級: %s" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "網路設定無效: %s" + +#: internal/cli/configuration/network.go:66 msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "無效的 '%[1]s' 網路代理 network.proxy: %[2]s" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "--log-level: %s 選項無效" - -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:219 msgid "Invalid output format: %s" msgstr "無效的輸出格式: %s" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "%s 內的套件索引無效" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "無效 %s 參數: 版本不允許" -#: commands/board/list.go:79 +#: commands/service_board_list.go:81 msgid "Invalid pid value: '%s'" msgstr "無效的 pid 值: '%s'" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "無效的設定檔" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:269 msgid "Invalid recipe in platform.txt" msgstr "platform.txt 中的方法無效" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:240 msgid "Invalid size regexp: %s" msgstr "無效的大小正規表示式: %s" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "無效的超時: %s" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "無效的版本" -#: commands/board/list.go:76 +#: commands/service_board_list.go:78 msgid "Invalid vid value: '%s'" msgstr "無效的 vid 值: '%s'" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:125 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "只產生編譯資料庫,不實際編譯。跳過除 pre* 以外的所有建構指令" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "程式庫名" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "程式庫" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "程式庫_名" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "最新的" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:91 msgid "Library %[1]s has been declared precompiled:" msgstr "程式庫 %[1]s 已聲明為預編譯:" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:141 +#: internal/arduino/libraries/librariesmanager/install.go:131 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "程式庫 %[1]s 已經安裝, 但版本不同: %[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "程式庫 %s 已是最新版" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "程式庫 %s 未安裝" -#: commands/instances.go:445 +#: commands/instances.go:377 msgid "Library %s not found" msgstr "未找到程式庫 %s " -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "未找到程式庫 '%s'" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "程式庫不能同時用'%[1]s'和'%[2]s'檔案夾。再檢查 '%[3]s'" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "程式庫安裝失敗" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:234 +#: commands/service_library_install.go:274 msgid "Library installed" msgstr "程式庫已安裝" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "許可證: %s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:438 msgid "Linking everything together..." msgstr "將所有內容鏈接在一起..." -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "列出已安裝被支援平台的所有開發板。輸入開發板名,也可進行搜尋" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "列出所有已知開發板及其相應的 FQBN" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "列出已連接的開發板" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "列出開發板選項列表。可多選項多次使用" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:103 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "列出自定義屬性列表。可多屬性多次使用" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "列出可更新的程式庫" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "列出可更新的平台" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "列出所有連接的開發板" @@ -1460,115 +1478,121 @@ msgstr "列出所有連接的開發板" msgid "Lists cores and libraries that can be upgraded" msgstr "列出可升級的核心和程式庫" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:224 commands/instances.go:235 +#: commands/instances.go:345 msgid "Loading index file: %v" msgstr "載入索引檔: %v" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "位置" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:205 msgid "Low memory available, stability problems may occur." msgstr "記憶體低容量,可能影響穩定性" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "維護者: %s" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:133 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "平行編譯最大數. 如設為 0 將使用 CPU 的全部核心." + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "等待連接埠探尋的最長時間,例如:30s, 1m" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "記錄此等級含以上的訊息。有效等級為 %s" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "%[2]s 的程式庫缺少 '%[1]s'" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "缺少 FQBN (完全合格開發板名)" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "缺少連接埠" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "缺少連接埠地址" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "缺少連接埠協議" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "缺少燒錄器" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" -msgstr "" +msgstr "缺少必要的上傳欄位: %s" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:244 msgid "Missing size regexp" msgstr "缺少大小正規表示式" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "缺少 sketch 路徑" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "監視器 '%s' 找不到" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:200 msgid "Monitor port settings:" msgstr "監視連接埠設定:" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "找到了多個 “%[1]s” 程式庫" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "名" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "名: “%s”" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "新上傳連接埠: %[1]s (%[2]s)" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:130 msgid "No boards found." msgstr "沒找到開發板" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "未設定預設連接埠或 FQBN" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "未預設埠號, FQBN 或者燒錄器" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "沒找到程式庫" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "沒安裝程式庫" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "沒有你想找的程式庫" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1576,178 +1600,179 @@ msgstr "" "沒有符合你想找的程式庫\n" "你的意思是...\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "沒的程式庫更新檔" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "沒有可用於連接埠協議 %s 的監視器" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "沒找到已過時的平台或程式庫" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "沒安裝任何平台" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "沒有你想找的平台" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:522 msgid "No upload port found, using %s as fallback" msgstr "沒找到上傳連接埠,使用 %s 作為後援" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "找不到有效的相依解決方案" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:195 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "記憶體不足;有關減少用量的方法,請參見 %[1]s" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "未使用: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "作業系統:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "Arduino 官方開發板:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "省略程式庫中除最新版本以外的所有版本(產出更精簡的 JSON )" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:57 internal/cli/monitor/monitor.go:58 msgid "Open a communication port with a board." msgstr "開啟開發板的通信埠" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "選項:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:113 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "選項,可以是:%s。用來告訴 gcc 使用哪個警告級別 (-W 參數)" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:126 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "選項,清理建構用的檔案夾且不使用任何快取" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:123 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "選項,優化編譯用於除錯的輸出,還不到發佈用" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:115 msgid "Optional, suppresses almost every output." msgstr "選項,禁止全部輸出" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:114 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "選項,開啟詳細模式" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:129 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "選項, 包含一組替代 sketch 原始碼的 .json 檔的路徑" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:105 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "用自定義值替代建構屬性。可多次使用多個屬性" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "覆蓋現有的設定檔" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "覆蓋已存在的存檔" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "覆蓋現有的 .ino sketch 檔" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "套件管理員" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "套件網址:" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "套件維護者:" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "套件名" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "套件線上協助:" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "套件網站:" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "段落: %s" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 msgid "Path" msgstr "路徑" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:122 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "程式庫集合的路徑。可多次使用,或以逗號分隔" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:120 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "單一程式庫的根目錄路徑。可多次使用,或以逗號分隔" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "日誌檔的路徑" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:101 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "保存已編譯檔的路徑。如果省略,將在作業系統預設的臨時目錄中建立" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:503 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "在 %s 連接埠上執行 1200-bps TOUCH 重置" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:86 +#: commands/service_platform_install.go:93 msgid "Platform %s already installed" msgstr "平台 %s 已安裝過" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:194 msgid "Platform %s installed" msgstr "平台 %s 已安裝" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:398 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" @@ -1755,94 +1780,99 @@ msgstr "" "在已知索引中找不到平台 %s \n" "也許你需要加入第三方 3rd 位址?" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:318 msgid "Platform %s uninstalled" msgstr "%s 平台已卸載" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "平台 '%s' 已是最新版" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "平台 '%s' 沒找到" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "平台 ID" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:383 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "平台 ID 不正確" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "平台位址:" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "平台架構:" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "平台類別:" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "平台校驗碼:" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "平台檔案名:" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "平台名:" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "平台大小 (位元組):" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "請指定一個 FQBN。在 %[1]s 連接埠以協議 %[2]s 檢測到多個可能的開發板" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "請指定一個 FQBN。%[1]s 連接埠以協議 %[2]s 的開發板無法識別" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Port" msgstr "連接埠" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:253 internal/cli/monitor/monitor.go:262 msgid "Port closed: %v" msgstr "連接埠關閉: %v" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "連接埠監視器錯誤" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:101 +#: internal/arduino/builder/libraries.go:109 msgid "Precompiled library in \"%[1]s\" not found" msgstr "找不到在“%[1]s”的預編譯程式庫" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "列出開發板的詳細資訊" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:97 msgid "Print preprocessed code to stdout instead of compiling." msgstr "列出預處理的代碼到標準輸出,而不是編譯" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "列出日誌到標準輸出" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "輸出 JSON 格式。" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "列出目前設定" @@ -1851,192 +1881,263 @@ msgstr "列出目前設定" msgid "Prints the current configuration." msgstr "列出目前設定" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "設定集'%s' 找不到" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "燒錄器 '%s' 找不到" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "燒錄器名" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "要使用的燒錄器,例如:atmel_ice" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "燒錄器:" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "'%s' 屬性未定義" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:140 msgid "Protocol" msgstr "協議" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "提供的包括: %s" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "從設定中移除一或多個值" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:187 msgid "Replacing %[1]s with %[2]s" msgstr "將 %[1]s 替換成 %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:123 msgid "Replacing platform %[1]s with %[2]s" msgstr "以平台 %[2]s 替換 %[1]s " -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "需要的工具:" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "以背景程式身份在連接埠: %s 執行" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:75 msgid "Run in silent mode, show only monitor input and output." msgstr "以靜默模式執行,只顯示監視輸入和輸出" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." -msgstr "以背景程式身份執行時,只做一次核心和程式庫的初始化" +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "以 gRPC 精靈的形式執行 Arduino CLI。" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "以正常建構的核心執行..." -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:297 +#: internal/arduino/cores/packagemanager/install_uninstall.go:411 msgid "Running pre_uninstall script." msgstr "執行 pre_uninstall 命令." -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "搜尋_條件" + +#: internal/cli/debug/debug.go:226 msgid "SVD file path" msgstr "SVD 檔案路徑" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:99 msgid "Save build artifacts in this directory." msgstr "將建構成品存在這個目錄" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "以指定的關鍵字在開發板管理員尋找開發板" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "在開發板管理員尋找開發板" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "以指定的關鍵字在開發板管理員尋找核心" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "在開發板管理員尋找核心" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." -msgstr "尋找一或多個程式庫資料 (不分大小寫)" - #: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "尋找一或多個程式庫資料" - -#: internal/cli/lib/search.go:157 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" +"搜尋程式庫.\n" +"\n" +"所有的搜尋皆不分大小寫. 多詞搜尋只會尋找全部皆符合的程式庫.\n" +"\n" +"未符合 QV 語法的皆為基本搜尋, 將尋找在下列幾個欄位相符的程式庫:\n" +" - Author\n" +" - Name\n" +" - Paragraph \n" +" - Provides\n" +" - Sentence\n" +"\n" +"稱為限定值 qualifier-value (QV) 的特殊語法, 將只尋找限定欄位相符的程式庫. 以欄位 (不分大小寫), 加上等號 (=) 或分號 (:), 再接上一個值, 例如. 'name=ArduinoJson' 或 'provides:tinyusb.h'.\n" +"\n" +"QV 裏分號為多條件搜尋, 等號為單條件\n" +"\n" +"QV 裏可使用雙引號(\")來包含空白字元, 框起整個條件式或值都可以的, 例如. 'category=\"Data Processing\"' 和\n" +"'\"category=Data Processing\"' 是相同的. QV 語法也可使用倒斜線(\\)來加入雙引號 .\n" +"\n" +"注意: 如在命令列環境下使用 QV 語法, 請自行留意相關字串參數的跳脫語法.\n" +"\n" +"除了以上的欄位外, QV 也可使用下列限定欄位:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "尋找符合條件的一或多個程式庫" + +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "句子: %s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:234 msgid "Server path" msgstr "伺服器路徑" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "伺服器回應: %s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:233 msgid "Server type" msgstr "伺服器類型" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." -msgstr "" +msgstr "設定上傳所必要的欄位上的值" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:72 msgid "Set terminal in raw mode (unbuffered)." -msgstr "設定終端成粗糙模式 (無緩衝)" +msgstr "設定終端成原始模式 (無緩衝)" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "設定一個值" -#: internal/cli/board/attach.go:36 +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." -msgstr "設定連接埠和 FQBN 的預設值。如果沒指定連接埠或 FQBN,將顯示預設的" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "設定連接埠和 FQBN & 燒錄器的預設值. 如果沒指定, 將使用現有的設定值。" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "設定儲存設定檔的位置" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Setting" msgstr "設定" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "設定鍵值不存在" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "將顯示協助訊息,不過只有文字模式。" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "顯示全部可用的核心版本" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:73 msgid "Show all the settings of the communication port." msgstr "顯示通訊連接埠的全部設定" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "在平台上也顯示標記為'隱藏的'開發板" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "顯示建構屬性. 屬性是攤開的, 如只想看定義, 請用 \\\"--show-properties=unexpanded\\\"." -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "顯示完整的開發板細節" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "顯示開發板的資訊,特別是如果開發板在 FQBN 中有可指定的選項" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "只顯示程式庫名" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "顯示可用的燒錄器列表" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:68 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "顯示除錯作業的數據,而不是啟動除錯器" @@ -2045,11 +2146,11 @@ msgstr "顯示除錯作業的數據,而不是啟動除錯器" msgid "Show outdated cores and libraries after index update" msgstr "顯示在索引更新後過時的核心和程式庫" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "顯示已安裝的程式庫" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2060,125 +2161,137 @@ msgstr "" "顯示已安裝的程式庫。\\n如果指定了 LIBNAME 參數,則只列出該程式庫。\\n預設情況下,不會列出 '平台/核心' 內建的程式庫,\\n但可以通過" " --all 來顯示" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "顯示已安裝的平台" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "顯示程式庫範例" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "顯示程式庫的範例列表。可以指定程式庫" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "顯示安裝在系統上的 Arduino CLI 版本" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "顯示 Arduino CLI 版本" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "大小 (字元組) :" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:274 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "sketch 不能放在建構路徑上。請指定不同的建構路徑" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "Sketch 建立在: %s" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "採用的 Sketch 設定集" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:190 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "Sketch 太胖了;請參考 %[1]s 裏的減肥技巧" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:158 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "Sketch 使用 %[1]s 位元組(%[3]s%%)的程式儲存空間。最大為 %[2]s 位元組" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "Sketch 已棄用 .pde 副檔名 ,請將下列檔案的副檔名改成.ino" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:30 msgid "Skip linking of final executable." msgstr "跳過鏈結成執行檔" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:496 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "跳過 1200-bps 接觸重設:未選取序列埠!" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:27 msgid "Skipping archive creation of: %[1]s" msgstr "跳過建立壓縮檔: %[1]s" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:183 msgid "Skipping compile of: %[1]s" msgstr "跳過編譯: %[1]s" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "跳過預編譯程式庫 %[1]s 的相依偵測" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:190 msgid "Skipping platform configuration." msgstr "跳過平台設定" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:306 +#: internal/arduino/cores/packagemanager/install_uninstall.go:420 msgid "Skipping pre_uninstall script." msgstr "跳過 pre_uninstall 命令." -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:368 msgid "Skipping tool configuration." msgstr "跳過工具設定" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "跳過: %[1]s" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "有些索引無法更新" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "有些升級失敗了,細節請看輸出" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "TOUCH: 重設時出錯: %s" - -#: internal/cli/daemon/daemon.go:58 +#: internal/cli/daemon/daemon.go:76 msgid "The TCP port the daemon will listen to" msgstr "背景程式監聽的 TCP 埠" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "輸出格式,可以是: %s" + +#: internal/cli/cli.go:186 msgid "The custom config file (if not specified the default will be used)." msgstr "自定義設定檔 (如沒指定,將使用預設值)" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "參數 --debug-file 必須和 --debug 一起使用" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:89 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "指定的板子/燒錄器設置不支援除錯。" + +#: internal/cli/debug/debug_check.go:87 +msgid "The given board/programmer configuration supports debugging." +msgstr "指定的板子/燒錄器設置支援除錯。" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "實例已無效需重新初始化" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" @@ -2186,7 +2299,7 @@ msgstr "" "'%[1]v' 鍵不是項目列表,無法加入其中。\n" "還是用 '%[2]s'?" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" @@ -2194,37 +2307,37 @@ msgstr "" "'%[1]v' 鍵不是項目列表,無法移除。\n" "還是用 '%[2]s'?" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "程式庫 %s 有多個安裝" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:111 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "自定義加密密鑰的名稱,用在編譯過程中對二進位碼進行加密。只用在有支援的平台" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:109 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "自定義簽名密鑰的名稱,用在編譯過程中對二進位碼進行簽名。只用在有支援的平台" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "日誌的輸出格​​式,可以是: %s" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:107 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "尋找用來簽名和加密二進位碼的自定義密鑰檔的檔案夾路徑。只用在有支援的平台" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:151 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "本平台不支援預編譯程式庫的 '%[1]s'" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2238,105 +2351,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "此指令顯示可升級的已安裝核心和程式庫。如沒需要更新的,則輸出空白" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:76 msgid "Timestamp each incoming line." msgstr "記錄每一行時間" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:328 msgid "Tool %s already installed" msgstr "工具 %s 已安裝" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:432 msgid "Tool %s uninstalled" msgstr "工具 %s 已卸除" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:144 msgid "Toolchain '%s' is not supported" msgstr "不支援工具包 '%s' " -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:223 msgid "Toolchain path" msgstr "工具包路徑" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:224 msgid "Toolchain prefix" msgstr "工具包前綴字元" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:222 msgid "Toolchain type" msgstr "工具包類型" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:396 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "嘗試執行 %s" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "開啟囉嗦模式" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:102 internal/cli/board/list.go:140 msgid "Type" msgstr "類型" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "類型: %s" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "網址:" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:165 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "無法快取建構核心,請通知 %[1]s 維護者注意 %[2]s" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:86 msgid "Unable to get Documents Folder: %v" msgstr "無法取得文件夾: %v" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:61 msgid "Unable to get Local App Data Folder: %v" msgstr "無法取得本地應用程式的資料夾: %v" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:49 +#: internal/cli/configuration/configuration.go:74 msgid "Unable to get user home dir: %v" msgstr "無法取得用戶家目錄: %v" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:249 msgid "Unable to open file for logging: %s" msgstr "無法開啟檔案做日誌記錄: %s" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "無法解析網址" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 msgid "Uninstalling %s" msgstr "卸除 %s" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:166 msgid "Uninstalling %s, tool is no more required" msgstr "卸除 %s,不需要這工具了" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "如不再需用到, 卸除一或多個核心及相依" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "卸載一或多個程式庫" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:172 msgid "Unknown" msgstr "未知的" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "未知的 FQBN" @@ -2348,23 +2462,23 @@ msgstr "更新核心和程式庫的索引" msgid "Updates the index of cores and libraries to the latest versions." msgstr "更新核心和程式庫的索引到最新版" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "更新核心索引到最新" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "更新核心索引" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "更新程式庫索引到最新" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "更新程式庫索引" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:45 msgid "Upgrade doesn't accept parameters with version" msgstr "升級不接受版本參數" @@ -2376,53 +2490,53 @@ msgstr "升級已安裝的核心和程式庫到最新版" msgid "Upgrades installed cores and libraries." msgstr "升級已安裝的核心和程式庫" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "升級已安裝的程式庫" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "升級已安裝的平台到最新版本" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "上傳 Arduino sketch" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "上傳 Arduino sketch。不會在上傳前編譯它" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "上傳連接埠,例如:COM3 或 /dev/ttyACM2" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:520 msgid "Upload port found on %s" msgstr "找到上傳連接埠 %s " -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "上傳連接埠協議,例如:串列" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:116 msgid "Upload the binary after the compilation." msgstr "編譯完成就上傳二進位碼" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "使用燒錄器將 bootloader 上傳到開發板" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "上傳 bootloader" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:265 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "以 %s 協議上傳到開發板需要以下資訊:" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" @@ -2430,148 +2544,145 @@ msgstr "" "網址不能有逗號。用空格隔開多個位址, 例如 env var::\n" "%s" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "用法:" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "使用 %s 取得指令的更多資訊" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:448 msgid "Used library" msgstr "使用的程式庫" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:463 msgid "Used platform" msgstr "使用的平台" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "使用: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:349 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "使用檔案夾: %[2]s 裏面平台的開發板 '%[1]s' " -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "檔案: %[1]s 使用快取程式庫相依" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:350 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "使用檔案夾: %[2]s 裏面平台的核心 '%[1]s' " -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:312 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "使用檔案夾: %[3]s %[4]s 內的程式庫 %[1]s 版本 %[2]s " -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:306 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "使用檔案夾: %[2]s %[3]s 內的程式庫 %[1]s " -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:120 internal/arduino/builder/core.go:132 msgid "Using precompiled core: %[1]s" msgstr "使用預編譯核心: %[1]s" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:98 +#: internal/arduino/builder/libraries.go:106 msgid "Using precompiled library in %[1]s" msgstr "使用在%[1]s 裏預編譯的程式庫" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:50 +#: internal/arduino/builder/compilation.go:181 msgid "Using previously compiled file: %[1]s" msgstr "使用先前編譯的檔案: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "版本" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "版本_號" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:297 msgid "Values" msgstr "數值" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:118 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "上傳後驗證上傳的二進位碼" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:449 internal/cli/compile/compile.go:464 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "版本" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "版本: %s" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:185 msgid "WARNING cannot configure platform: %s" msgstr "警告! 無法設定平台: %s" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "WARNING cannot configure tool: %s" msgstr "警告!無法設定工具: %s" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:302 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "警告 ! 無法執行 pre_uninstall 命令: %s" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:326 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "警告! sketch 用了一或多個客製程式庫編譯" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:283 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "警告: %[1]s 程式庫是 (%[2]s 架構),可能與選擇的開發板 (%[3]s架構)不相容 " -#: commands/upload/upload.go:445 +#: commands/service_upload.go:509 msgid "Waiting for upload port..." msgstr "等待上傳連接埠..." -#: commands/compile/compile.go:286 +#: commands/service_compile.go:355 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "警告: 開發板 %[1]s 並沒定義 %[2]s 喜好。自動設定成:%[3]s" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "網站: %s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "將目前的設定寫入設定檔" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "將目前的設定寫入資料目錄裏面的設定檔" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "寫入設定檔: %v" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:146 internal/cli/compile/compile.go:149 msgid "You cannot use the %s flag while compiling with a profile." msgstr "使用設定集編譯時不能使用 %s 旗標參數" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:78 msgid "archive hash differs from hash in index" msgstr "保存與和索引不同的雜湊" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:188 msgid "archive is not valid: multiple files found in zip file top level" msgstr "存檔無效: 在 zip 檔頂層找到多個檔案" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:191 msgid "archive is not valid: no files found in zip file top level" msgstr "存檔無效: 在 zip 檔的頂層沒找到檔案" @@ -2579,370 +2690,341 @@ msgstr "存檔無效: 在 zip 檔的頂層沒找到檔案" msgid "archivePath" msgstr "存檔路徑" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "缺少 arduino 預處理器樣態" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "自動偵測建構成品: %s" - -#: internal/cli/feedback/stdio.go:35 +#: internal/cli/feedback/stdio.go:37 msgid "available only in text format" msgstr "只有本文格式" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "基本搜尋\"audio\" " + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "基本搜尋只限於官方維護者的 \"esp32\" 和 \"display\"" + +#: commands/service_upload.go:764 msgid "binary file not found in %s" msgstr "%s 裏找不到二進位檔" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:348 msgid "board %s not found" msgstr "找不到開發板 %s" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "開發板名" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "內建程式庫目錄未設定" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "呼叫 %[1]s: %[2]w" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "找不到最新版的 %s " -#: commands/instances.go:360 +#: commands/instances.go:275 msgid "can't find latest release of tool %s" msgstr "找不到最新版的工具 %s " -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "在 %s 找不到 sketch 主檔" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:712 msgid "can't find pattern for discovery with id %s" msgstr "找不到 id 為 %s 探索的樣態" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "無法取得標準錯誤流: %s" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "無法取得標準輸出流: %s" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "候選" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:721 commands/service_upload.go:728 msgid "cannot execute upload tool: %s" msgstr "無法執行上傳工具: %s" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:40 msgid "checking local archive integrity" msgstr "檢查本地端存檔的完整性" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "清理建構路徑" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "指令" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "指令 '%[1]s' 失敗: %[2]s" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "指令失敗: %s" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "通信不同步,預期 '%[1]s',卻收到 '%[2]s'" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:74 msgid "computing hash: %s" msgstr "計算雜湊: %s" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:81 +msgid "config key %s contains an invalid character" +msgstr "設定鍵 %s 含有無效字元" + +#: internal/arduino/cores/fqbn.go:86 +msgid "config value %s contains an invalid character" +msgstr "設定值%s 含有無效字元" + +#: internal/arduino/libraries/librariesmanager/install.go:141 msgid "copying library to destination directory:" msgstr "拷貝程式庫到目標目錄:" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:836 msgid "could not find a valid build artifact" msgstr "找不到正確的建構成品" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:94 msgid "could not overwrite" msgstr "無法覆寫" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:190 msgid "could not remove old library" msgstr "無法移除舊的程式庫" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "無法更新 sketch 專案檔" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:116 internal/arduino/builder/core.go:140 msgid "creating core cache folder: %s" msgstr "建立核心快取檔案夾: %s" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:219 msgid "creating installed.json in %[1]s: %[2]s" msgstr "在 %[1]s:%[2]s 建立 installed.json" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:45 +#: internal/arduino/resources/install.go:49 msgid "creating temp dir for extraction: %s" msgstr "建立解壓縮用的臨時目錄: %s" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:196 msgid "data section exceeds available space in board" msgstr "資料區已超出開發板的可用空間" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "沒有 '%s' 的相依" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "目的地已存在" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:94 msgid "destination dir %s already exists, cannot install" msgstr "目標目錄 %s 已存在,無法安裝" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:138 msgid "destination directory already exists" msgstr "目標目錄已存在" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:278 msgid "directory doesn't exist: %s" msgstr "目錄不存在: %s" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" -msgstr "探索 %[1]s 程序未啟動: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "探索%[1]s 程序沒啟動" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:644 msgid "discovery %s not found" msgstr "探索 %s找不到 " -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:648 msgid "discovery %s not installed" msgstr "探索 %s 未安裝" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:741 msgid "discovery release not found: %s" msgstr "找不到探索發行: %s" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "下載特定版本(在本例中為 1.6.9)" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "下載 Arduino SAMD 核心最新版" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "已下載" -#: commands/instances.go:138 +#: commands/instances.go:55 msgid "downloading %[1]s tool: %[2]s" msgstr "正在下載 %[1]s 工具: %[2]s" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:60 msgid "empty board identifier" msgstr "清空開發板識別" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "錯誤載入 sketch 專案:" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:615 msgid "error opening %s" msgstr "錯誤開啟 %s" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "錯誤解析數值: %v" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:214 msgid "error parsing version constraints" msgstr "錯誤解析版本限制" -#: commands/board/list.go:116 +#: commands/service_board_list.go:115 msgid "error processing response from server" msgstr "錯誤處理伺服器回應" -#: commands/board/list.go:96 +#: commands/service_board_list.go:95 msgid "error querying Arduino Cloud Api" msgstr "錯誤查詢 Arduino Cloud Api" -#: arduino/resources/install.go:67 +#: internal/arduino/libraries/librariesmanager/install.go:179 +msgid "extracting archive" +msgstr "解開存檔" + +#: internal/arduino/resources/install.go:68 msgid "extracting archive: %s" msgstr "解開存檔: %s" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" -msgstr "解開存檔: %w" - -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "計算 “%s” 檔的雜湊值失敗" -#: commands/board/list.go:91 +#: commands/service_board_list.go:90 msgid "failed to initialize http client" msgstr "初始化 http 客戶端失敗" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:95 msgid "fetched archive size differs from size specified in index" msgstr "抓取的存檔大小跟索引內指明的大小不同" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:123 msgid "files in archive must be placed in a subdirectory" msgstr "存檔內的檔案必須放在子目錄下" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "尋找 %s 的絕對路徑" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "旗標" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "跟隨符式鏈接 %s" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "針對特定版本" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "針對最新版本" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "針對特定版本" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" -msgstr "產出 installation.id: %w" +#: internal/arduino/cores/fqbn.go:66 +msgid "fqbn's field %s contains an invalid character" +msgstr "fqbn 欄 %s 含有無效字元" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "產出 installation.id" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" -msgstr "產出 installation.secret: %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "產出 installation.secret" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "取得存檔資訊: %s" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:92 msgid "getting archive info: %s" msgstr "取得存檔資訊: %s" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:65 +#: internal/arduino/resources/checksums.go:88 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:56 msgid "getting archive path: %s" msgstr "取得存檔路徑: %s" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:354 msgid "getting build properties for board %[1]s: %[2]s" msgstr "取得開發板 %[1]s: %[2]s 的建構屬性" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "取得平台 %[1]s: %[2]s 的探索相依" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "取得平台 %[1]s: %[2]s 的監視器相依" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "取得 %[1]s: %[2]s 的父目錄" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "取得平台 %[1]s: %[2]s 的工具相依" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:149 msgid "install directory not set" msgstr "未設定安裝目錄" -#: commands/instances.go:142 +#: commands/instances.go:59 msgid "installing %[1]s tool: %[2]s" msgstr "安裝 %[1]s 工具: %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:211 msgid "installing platform %[1]s: %[2]s" msgstr "安裝平台%[1]s: %[2]s" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "互動終端不支援 '%s' 輸出格式" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:212 msgid "invalid '%s' directive" msgstr "無效的 '%s' 指令" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "無效的 “加入” 訊息:找不到連接埠" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "無效的 “移除” 訊息:找不到連接埠" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:43 msgid "invalid checksum format: %s" msgstr "無效的校驗碼格式: %s" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:73 internal/arduino/cores/fqbn.go:78 msgid "invalid config option: %s" msgstr "無效的設定選項: %s" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "無效的空核心架構 '%s'" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "無效的空核心參數" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "無效的空核心名 '%s'" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "無效的空核心參照 '%s'" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "無效的空核心版本: '%s'" @@ -2954,635 +3036,623 @@ msgstr "無效的空程式庫名" msgid "invalid empty library version: %s" msgstr "無效的空程式庫版本: %s" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:143 msgid "invalid empty option found" msgstr "找到無效的空選項" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:268 msgid "invalid git url" msgstr "無效的 git 網址" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:47 msgid "invalid hash '%[1]s': %[2]s" msgstr "無效的雜湊 '%[1]s': %[2]s" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "無效的項目 %s" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid library directive:" msgstr "無效的程式庫指令:" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "無效的程式庫配置: %s" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "無效的程式庫位置: %s" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "無效的程式庫: 找不到 .h 標頭檔" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:146 msgid "invalid option '%s'" msgstr "無效的選項 '%s'" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "無效的選項 '%s'" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "無效的建定目錄路徑: %[1]s 錯誤: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "無效路徑難建立設定目錄: %[1]s 錯誤" -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" -msgstr "無效的庫存檔路徑: %[1]s 錯誤:%[2]w" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "無效路徑來寫入檔案: %[1]s 錯誤" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:277 msgid "invalid platform archive size: %s" msgstr "無效的平台存檔大小: %s" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:216 msgid "invalid platform identifier" msgstr "無效的平台識別" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:226 msgid "invalid platform index URL:" msgstr "無效的平台索引位址:" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "無效的插拔式監視器參照: %s" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:185 msgid "invalid port configuration value for %s: %s" msgstr "無效的連接埠設定值 %s : %s" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:193 msgid "invalid port configuration: %s" msgstr "無效的連接埠設定: %s" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:708 msgid "invalid recipe '%[1]s': %[2]s" msgstr "無效的作法'%[1]s': %[2]s" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "無效的 sketch 名 \\\"%[1]s\\\": 首字元必須是英數字或底線, 接著可以是減號和逗點, 但最後字元不可以是逗點" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:150 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "無效的 '%[2]s' 選項值 '%[1]s' " -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "無效的版本目錄 %s" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid version:" msgstr "無效的版本:" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "設定中找不到鍵值" - -#: internal/cli/core/search.go:45 +#: internal/cli/core/search.go:39 msgid "keywords" msgstr "關鍵字" -#: arduino/libraries/librariesmanager/install.go:130 +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "Daniel Garcia 發行的程式庫" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "限 Adafruit 發行, 名字上有 \"gfx\" 的程式庫" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "至少基於 \"IRremote\" 的程式庫" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "只基於 \"IRremote\" 的程式庫" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "名字有 \"buzzer\" 的程式庫" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "名字上有 \"pcf8523\" 的程式庫" + +#: internal/arduino/libraries/librariesmanager/install.go:126 msgid "library %s already installed" msgstr "程式庫 %s 已安裝" -#: arduino/libraries/librariesmanager/install.go:319 +#: internal/arduino/libraries/librariesmanager/install.go:315 msgid "library not valid" msgstr "程式庫無效" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" -msgstr "程式庫路徑不存在: %s" - -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "列出序列埠" - -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 msgid "loading %[1]s: %[2]s" msgstr "載入 %[1]s: %[2]s" -#: arduino/cores/packagemanager/loader.go:351 +#: internal/arduino/cores/packagemanager/loader.go:314 msgid "loading boards: %s" msgstr "載入開發板: %s" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" -msgstr "從 %s 載入整捆的工具" - -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:496 +#: internal/arduino/cores/packagemanager/package_manager.go:511 msgid "loading json index file %[1]s: %[2]s" msgstr "載入json 索引檔 %[1]s:%[2]s" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "從 %[1]s: %[2]s載入程式庫" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "載入 library.properties: %s" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "載入平台發行版 %s" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "載入 platform.txt" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "載入需要的平台 %s" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "載入需要的工具 %s" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:590 msgid "loading tool release in %s" msgstr "載入在 %s 的工具" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "在 %s 尋找 boards.txt" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:779 +msgid "looking for build artifacts" +msgstr "尋找建構成品" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "sketch 缺少主檔: %s" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:210 msgid "missing '%s' directive" msgstr "缺少 '%s' 指令" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:39 msgid "missing checksum for: %s" msgstr "缺少 %s 的校驗碼" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:457 msgid "missing package %[1]s referenced by board %[2]s" msgstr "缺少開發板 %[2]s 參照的套件 %[1]s" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "缺少 %s 的套件索引, 不保証未來更新與否" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:462 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "缺少被開發板 %[3]s 參照的平台 %[1]s : %[2]s" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:467 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "缺少開發板 %[3]s 參照的平台發行版 %[1]s : %[2]s" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "找不到簽名" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:752 msgid "monitor release not found: %s" msgstr "沒找到監視器發行版: %s" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:197 +#: internal/arduino/libraries/librariesmanager/install.go:246 +#: internal/arduino/resources/install.go:97 msgid "moving extracted archive to destination dir: %s" msgstr "移動解壓縮的存檔到目標資料夾: %s" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:831 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "找到多個建構成品: '%[1]s' 和 '%[2]s'" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "找到多個 sketch 檔 (%[1]v, %[2]v)" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:338 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "沒找到目前作業系統相容工具版本 %[1]s,請聯絡 %[2]s" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "未指定執行檔" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:273 msgid "no instance specified" msgstr "未指定實例" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:786 msgid "no sketch or build directory/file specified" msgstr "未指定 sketch 或建構目錄/檔" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "沒有這檔案/目錄" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:126 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "存檔中沒有單一的根目錄,找到了 '%[1]s' 和 '%[2]s'" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:703 msgid "no upload port provided" msgstr "未提供上傳連接埠" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "在 %[1]s 找不到有效的 sketch : 缺少 %[2]s" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "目前的作業系統沒可用的版本,請聯絡 %s" -#: internal/cli/feedback/terminal.go:39 +#: internal/arduino/cores/fqbn.go:50 +msgid "not an FQBN: %s" +msgstr "不是 FQBN: %s" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "沒在終端執行" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:70 +#: internal/arduino/resources/install.go:60 msgid "opening archive file: %s" msgstr "開啟存檔: %s" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "開啟 boards.txt" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "以 1200 bps 開啟連接埠" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:81 msgid "opening signature file: %s" msgstr "開啟簽名檔: %s" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:76 msgid "opening target file: %s" msgstr "開啟目標檔: %s" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "找不到套件 %s" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:525 msgid "package '%s' not found" msgstr "找不到套件 '%s'" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "解析 IDE 同捆的索引" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:166 +#: internal/arduino/cores/packagemanager/package_manager.go:295 msgid "parsing fqbn: %s" msgstr "解析 FQBN:%s" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "解析 library_index.json: %s" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "路徑不是平台目錄: %s" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "%[2]s 套件裏找不到 %[1]s 平台" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" -msgstr "平台 %s 沒有可用的發行版" - -#: arduino/cores/packagemanager/package_manager.go:298 +#: internal/arduino/cores/packagemanager/package_manager.go:341 msgid "platform %s is not installed" msgstr "平台 %s 未安裝" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "平台不支援使用中的作業系統" + +#: commands/service_compile.go:126 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +#: internal/arduino/cores/packagemanager/install_uninstall.go:283 +#: internal/arduino/cores/packagemanager/loader.go:420 msgid "platform not installed" msgstr "平台未安裝" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:135 msgid "please use --build-property instead." msgstr "請改用 --build-property" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "已加入可插拔探索: %s" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "連接埠" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:122 msgid "port not found: %[1]s %[2]s" msgstr "沒找到連接埠: %[1]s %[2]s" -#: arduino/monitor/monitor.go:236 +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "燒錄器" + +#: internal/arduino/monitor/monitor.go:235 msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "協議版本不被支援: 要 %[1]d,卻得到 %[2]d" -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" -msgstr "協議版本不被支援: 要 1,卻得到%d" - -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" -msgstr "讀取 %[1]s: %[2]s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "讀取目錄 %[1]s: %[2]s" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" -msgstr "讀取目錄 %[1]s 內容: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "讀取目錄 %[1]s 的內容" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:582 msgid "reading directory %s" msgstr "讀取目錄 %s" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" -msgstr "讀取目錄%s 內容: %w" +#: internal/arduino/libraries/librariesmanager/install.go:288 +msgid "reading directory %s content" +msgstr "讀取目錄 %s 的內容" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:81 msgid "reading file %[1]s: %[2]s" msgstr "讀取檔案%[1]s: %[2]s" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" -msgstr "讀取檔案: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "讀取檔案" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "讀取程式庫頭檔: %s" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" -msgstr "正在讀取 lib src 目錄: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "讀取程式庫標頭" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" -msgstr "讀取程式庫標頭檔:%w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "讀取程式庫來源目錄: %s" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "讀取 library_index.json: %s" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:116 msgid "reading package root dir: %s" msgstr "讀取套件根目錄: %s" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "讀取 sketch 檔" + +#: commands/service_upload.go:697 msgid "recipe not found '%s'" msgstr "作法未找到 %s" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:601 msgid "release %[1]s not found for tool %[2]s" msgstr "找不到工具 %[2]s 的發行版 %[1]s" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "發行版不能是無" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "刪除損壞的存檔 %s" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:152 msgid "removing library directory: %s" msgstr "刪除程式庫目錄: %s" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:310 msgid "removing platform files: %s" msgstr "刪除平台檔: %s" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "找不到平台 %[2]s 需要的版本 %[1]s" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:72 msgid "retrieving Arduino public keys: %s" msgstr "取得 Arduino 公鑰:%s" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "掃描範例: %s" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" -msgstr "在 %[1]s: %[2]s 尋找 builtin_tools_versions.txt" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "掃描 sketch 範例" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:74 msgid "searching package root dir: %s" msgstr "尋找套件根目錄: %s" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "將 DTR 設為 OFF" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "sketch 名字不能空白" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "sketch 名字不能使用保留名'%[1]s'" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "sketch 名字過長(%[1]d 字元)。 最大允許 %[2]d 字元" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "sketch 路徑無效" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "sketchPath" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "來源不是目錄" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "開始探索 %s" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "測試存檔校驗碼: %s" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:110 msgid "testing archive size: %s" msgstr "測試存檔大小: %s" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:104 msgid "testing if archive is cached: %s" msgstr "測試存檔是否被快取: %s" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:38 msgid "testing local archive integrity: %s" msgstr "測試本地存檔完整性: %s" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:191 msgid "text section exceeds available space in board" msgstr "本文區已超出開發板的可用空間" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "編譯資料庫可能不完整或不準確" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "該平台沒有發行版" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:102 msgid "the server responded with status %s" msgstr "伺服器回應狀態 %s" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "等待訊息超時" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "等待來自 %s 的訊息超時" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:404 msgid "tool %s is not managed by package manager" msgstr "工具 %s 不是由套件管理員管理的" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "找不到工具 %s" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:551 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "套件 '%[2]s' 裏找不到工具 '%[1]s'" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:399 msgid "tool not installed" msgstr "工具未安裝" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:730 +#: internal/arduino/cores/packagemanager/package_manager.go:836 msgid "tool release not found: %s" msgstr "工具發行未找到: %s" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "工具版本 %s 未找到" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:92 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "需要兩個不同版本的程式庫 %[1]s : %[2]s 和 %[3]s" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:74 +#: internal/arduino/builder/sketch.go:118 msgid "unable to compute relative path to the sketch for the item" msgstr "無法計算 sketch 的相對路徑" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:43 msgid "unable to create a folder to save the sketch" msgstr "無法建立保存 sketch 的資料夾" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:124 msgid "unable to create the folder containing the item" msgstr "無法建立含有項目的資料夾" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "無法將 config 轉成 YAML: %v" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:162 msgid "unable to read contents of the destination item" msgstr "無法讀取目標項目的內容" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:135 msgid "unable to read contents of the source item" msgstr "無法讀取來源項目的內容" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:145 msgid "unable to write to destination file" msgstr "無法寫入目標檔" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:329 msgid "unknown package %s" msgstr "未知的套件 %s" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:336 msgid "unknown platform %s:%s" msgstr "未知的平台 %s:%s" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "未知的 sketch 副檔名 %s" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:60 msgid "unsupported hash algorithm: %s" msgstr "未支援的雜湊演算法: %s" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "升級 arduino:samd 到最新版" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "升級全部內容到最新版" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:732 msgid "uploading error: %s" msgstr "上傳錯誤: %s" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "用戶目錄未設定" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "用戶輸入不支援 '%s' 輸出格式" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "在非互動模式下不支援用戶輸入" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "版本 %s 不適合本作業系統" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "沒找到版本 %s " -#: commands/board/list.go:121 +#: commands/service_board_list.go:120 msgid "wrong format in server response" msgstr "伺服器回應錯誤格式" diff --git a/i18n/detect.go b/internal/i18n/detect.go similarity index 100% rename from i18n/detect.go rename to internal/i18n/detect.go diff --git a/i18n/detect_cgo_darwin.go b/internal/i18n/detect_cgo_darwin.go similarity index 100% rename from i18n/detect_cgo_darwin.go rename to internal/i18n/detect_cgo_darwin.go diff --git a/i18n/detect_freebsd.go b/internal/i18n/detect_freebsd.go similarity index 100% rename from i18n/detect_freebsd.go rename to internal/i18n/detect_freebsd.go diff --git a/i18n/detect_linux.go b/internal/i18n/detect_linux.go similarity index 100% rename from i18n/detect_linux.go rename to internal/i18n/detect_linux.go diff --git a/i18n/detect_nocgo_darwin.go b/internal/i18n/detect_nocgo_darwin.go similarity index 100% rename from i18n/detect_nocgo_darwin.go rename to internal/i18n/detect_nocgo_darwin.go diff --git a/i18n/detect_windows.go b/internal/i18n/detect_windows.go similarity index 100% rename from i18n/detect_windows.go rename to internal/i18n/detect_windows.go diff --git a/i18n/i18n.go b/internal/i18n/i18n.go similarity index 100% rename from i18n/i18n.go rename to internal/i18n/i18n.go diff --git a/i18n/i18n_test.go b/internal/i18n/i18n_test.go similarity index 100% rename from i18n/i18n_test.go rename to internal/i18n/i18n_test.go diff --git a/i18n/locale.go b/internal/i18n/locale.go similarity index 100% rename from i18n/locale.go rename to internal/i18n/locale.go diff --git a/i18n/locale_test.go b/internal/i18n/locale_test.go similarity index 100% rename from i18n/locale_test.go rename to internal/i18n/locale_test.go diff --git a/internal/integrationtest/arduino-cli.go b/internal/integrationtest/arduino-cli.go index 45620ee4c71..62eaa27ee08 100644 --- a/internal/integrationtest/arduino-cli.go +++ b/internal/integrationtest/arduino-cli.go @@ -23,14 +23,13 @@ import ( "fmt" "io" "os" + "runtime" "strings" "sync" "testing" "time" - "github.com/arduino/arduino-cli/executils" "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" "github.com/arduino/go-paths-helper" "github.com/fatih/color" "github.com/stretchr/testify/require" @@ -69,20 +68,19 @@ func CreateArduinoCLIWithEnvironment(t *testing.T) (*Environment, *ArduinoCLI) { // ArduinoCLI is an Arduino CLI client. type ArduinoCLI struct { - path *paths.Path - t *require.Assertions - proc *executils.Process - stdIn io.WriteCloser - cliEnvVars map[string]string - cliConfigPath *paths.Path - stagingDir *paths.Path - dataDir *paths.Path - sketchbookDir *paths.Path - workingDir *paths.Path - daemonAddr string - daemonConn *grpc.ClientConn - daemonClient commands.ArduinoCoreServiceClient - daemonSettingsClient settings.SettingsServiceClient + path *paths.Path + t *require.Assertions + proc *paths.Process + stdIn io.WriteCloser + cliEnvVars map[string]string + cliConfigPath *paths.Path + stagingDir *paths.Path + dataDir *paths.Path + sketchbookDir *paths.Path + workingDir *paths.Path + daemonAddr string + daemonConn *grpc.ClientConn + daemonClient commands.ArduinoCoreServiceClient } // ArduinoCLIConfig is the configuration of the ArduinoCLI client @@ -111,16 +109,31 @@ func NewArduinoCliWithinEnvironment(env *Environment, config *ArduinoCLIConfig) } cli.cliEnvVars = map[string]string{ - "LANG": "en", - "ARDUINO_DATA_DIR": cli.dataDir.String(), - "ARDUINO_DOWNLOADS_DIR": cli.stagingDir.String(), - "ARDUINO_SKETCHBOOK_DIR": cli.sketchbookDir.String(), + "LANG": "en", + "ARDUINO_DIRECTORIES_DATA": cli.dataDir.String(), + "ARDUINO_DIRECTORIES_DOWNLOADS": cli.stagingDir.String(), + "ARDUINO_DIRECTORIES_USER": cli.sketchbookDir.String(), "ARDUINO_BUILD_CACHE_COMPILATIONS_BEFORE_PURGE": "0", } env.RegisterCleanUpCallback(cli.CleanUp) return cli } +// CreateEnvForDaemon performs the minimum required operations to start the arduino-cli daemon. +// It returns a testsuite.Environment and an ArduinoCLI client to perform the integration tests. +// The Environment must be disposed by calling the CleanUp method via defer. +func CreateEnvForDaemon(t *testing.T) (*Environment, *ArduinoCLI) { + env := NewEnvironment(t) + + cli := NewArduinoCliWithinEnvironment(env, &ArduinoCLIConfig{ + ArduinoCLIPath: FindRepositoryRootPath(t).Join("arduino-cli"), + UseSharedStagingFolder: true, + }) + + _ = cli.StartDaemon(false) + return env, cli +} + // CleanUp closes the Arduino CLI client. func (cli *ArduinoCLI) CleanUp() { if cli.proc != nil { @@ -201,59 +214,175 @@ func (cli *ArduinoCLI) convertEnvForExecutils(env map[string]string) []string { return envVars } +// InstallMockedSerialDiscovery will replace the already installed serial-discovery +// with a mocked one. +func (cli *ArduinoCLI) InstallMockedSerialDiscovery(t *testing.T) { + fmt.Println(color.BlueString("<<< Install mocked serial-discovery")) + + // Build mocked serial-discovery + mockDir := FindRepositoryRootPath(t).Join("internal", "mock_serial_discovery") + gobuild, err := paths.NewProcess(nil, "go", "build") + require.NoError(t, err) + gobuild.SetDirFromPath(mockDir) + require.NoError(t, gobuild.Run(), "Building mocked serial-discovery") + ext := "" + if runtime.GOOS == "windows" { + ext = ".exe" + } + mockBin := mockDir.Join("mock_serial_discovery" + ext) + require.True(t, mockBin.Exist()) + fmt.Println(color.HiBlackString(" Build of mocked serial-discovery succeeded.")) + + // Install it replacing the current serial discovery + dataDir := cli.DataDir() + require.NotNil(t, dataDir, "data dir missing") + serialDiscoveries, err := dataDir.Join("packages", "builtin", "tools", "serial-discovery").ReadDirRecursiveFiltered( + nil, paths.AndFilter( + paths.FilterNames("serial-discovery"+ext), + paths.FilterOutDirectories(), + ), + ) + require.NoError(t, err, "scanning data dir for serial-discoveries") + require.NotEmpty(t, serialDiscoveries, "no serial-discoveries found in data dir") + for _, serialDiscovery := range serialDiscoveries { + require.NoError(t, mockBin.CopyTo(serialDiscovery), "installing mocked serial discovery to %s", serialDiscovery) + fmt.Println(color.HiBlackString(" Discovery installed in " + serialDiscovery.String())) + } +} + +// InstallMockedSerialMonitor will replace the already installed serial-monitor +// with a mocked one. +func (cli *ArduinoCLI) InstallMockedSerialMonitor(t *testing.T) { + fmt.Println(color.BlueString("<<< Install mocked serial-monitor")) + + // Build mocked serial-monitor + mockDir := FindRepositoryRootPath(t).Join("internal", "mock_serial_monitor") + gobuild, err := paths.NewProcess(nil, "go", "build") + require.NoError(t, err) + gobuild.SetDirFromPath(mockDir) + require.NoError(t, gobuild.Run(), "Building mocked serial-monitor") + ext := "" + if runtime.GOOS == "windows" { + ext = ".exe" + } + mockBin := mockDir.Join("mock_serial_monitor" + ext) + require.True(t, mockBin.Exist()) + fmt.Println(color.HiBlackString(" Build of mocked serial-monitor succeeded.")) + + // Install it replacing the current serial monitor + dataDir := cli.DataDir() + require.NotNil(t, dataDir, "data dir missing") + serialMonitors, err := dataDir.Join("packages", "builtin", "tools", "serial-monitor").ReadDirRecursiveFiltered( + nil, paths.AndFilter( + paths.FilterNames("serial-monitor"+ext), + paths.FilterOutDirectories(), + ), + ) + require.NoError(t, err, "scanning data dir for serial-monitor") + require.NotEmpty(t, serialMonitors, "no serial-monitor found in data dir") + for _, serialMonitor := range serialMonitors { + require.NoError(t, mockBin.CopyTo(serialMonitor), "installing mocked serial monitor to %s", serialMonitor) + fmt.Println(color.HiBlackString(" Monitor installed in " + serialMonitor.String())) + } +} + // RunWithCustomEnv executes the given arduino-cli command with the given custom env and returns the output. func (cli *ArduinoCLI) RunWithCustomEnv(env map[string]string, args ...string) ([]byte, []byte, error) { + var stdoutBuf, stderrBuf bytes.Buffer + err := cli.run(&stdoutBuf, &stderrBuf, nil, env, args...) + + errBuf := stderrBuf.Bytes() + cli.t.NotContains(string(errBuf), "panic: runtime error:", "arduino-cli panicked") + + return stdoutBuf.Bytes(), errBuf, err +} + +// RunWithCustomInput executes the given arduino-cli command pushing the given input stream and returns the output. +func (cli *ArduinoCLI) RunWithCustomInput(in io.Reader, args ...string) ([]byte, []byte, error) { + var stdoutBuf, stderrBuf bytes.Buffer + err := cli.run(&stdoutBuf, &stderrBuf, in, cli.cliEnvVars, args...) + + errBuf := stderrBuf.Bytes() + cli.t.NotContains(string(errBuf), "panic: runtime error:", "arduino-cli panicked") + + return stdoutBuf.Bytes(), errBuf, err +} + +func (cli *ArduinoCLI) run(stdoutBuff, stderrBuff io.Writer, stdinBuff io.Reader, env map[string]string, args ...string) error { if cli.cliConfigPath != nil { args = append([]string{"--config-file", cli.cliConfigPath.String()}, args...) } - fmt.Println(color.HiBlackString(">>> Running: ") + color.HiYellowString("%s %s", cli.path, strings.Join(args, " "))) - cliProc, err := executils.NewProcessFromPath(cli.convertEnvForExecutils(env), cli.path, args...) + + // Accumulate all output to terminal and spit-out all at once at the end of the test + // This allows to correctly group test output when running t.Parallel() tests. + terminalOut := new(bytes.Buffer) + defer func() { + fmt.Print(terminalOut.String()) + }() + + // Github-actions workflow tags to fold log lines + if os.Getenv("GITHUB_ACTIONS") != "" { + fmt.Fprintf(terminalOut, "::group::Running %s\n", strings.Join(args, " ")) + defer fmt.Fprintln(terminalOut, "::endgroup::") + } + + fmt.Fprintln(terminalOut, color.HiBlackString(">>> Running: ")+color.HiYellowString("%s %s %s", cli.path, strings.Join(args, " "), env)) + cliProc, err := paths.NewProcessFromPath(cli.convertEnvForExecutils(env), cli.path, args...) cli.t.NoError(err) stdout, err := cliProc.StdoutPipe() cli.t.NoError(err) stderr, err := cliProc.StderrPipe() cli.t.NoError(err) - _, err = cliProc.StdinPipe() + stdin, err := cliProc.StdinPipe() cli.t.NoError(err) cliProc.SetDir(cli.WorkingDir().String()) cli.t.NoError(cliProc.Start()) - var stdoutBuf, stderrBuf bytes.Buffer var wg sync.WaitGroup wg.Add(2) go func() { defer wg.Done() - if _, err := io.Copy(&stdoutBuf, io.TeeReader(stdout, os.Stdout)); err != nil { - fmt.Println(color.HiBlackString("<<< stdout copy error:"), err) + if stdoutBuff == nil { + stdoutBuff = io.Discard + } + if _, err := io.Copy(stdoutBuff, io.TeeReader(stdout, terminalOut)); err != nil { + fmt.Fprintln(terminalOut, color.HiBlackString("<<< stdout copy error:"), err) } }() go func() { defer wg.Done() - if _, err := io.Copy(&stderrBuf, io.TeeReader(stderr, os.Stderr)); err != nil { - fmt.Println(color.HiBlackString("<<< stderr copy error:"), err) + if stderrBuff == nil { + stderrBuff = io.Discard + } + if _, err := io.Copy(stderrBuff, io.TeeReader(stderr, terminalOut)); err != nil { + fmt.Fprintln(terminalOut, color.HiBlackString("<<< stderr copy error:"), err) } }() + if stdinBuff != nil { + go func() { + if _, err := io.Copy(stdin, stdinBuff); err != nil { + fmt.Fprintln(terminalOut, color.HiBlackString("<<< stdin copy error:"), err) + } + }() + } wg.Wait() cliErr := cliProc.Wait() - fmt.Println(color.HiBlackString("<<< Run completed (err = %v)", cliErr)) + fmt.Fprintln(terminalOut, color.HiBlackString("<<< Run completed (err = %v)", cliErr)) - errBuf := stderrBuf.Bytes() - cli.t.NotContains(string(errBuf), "panic: runtime error:", "arduino-cli panicked") - - return stdoutBuf.Bytes(), errBuf, cliErr + return cliErr } // StartDaemon starts the Arduino CLI daemon. It returns the address of the daemon. func (cli *ArduinoCLI) StartDaemon(verbose bool) string { - args := []string{"daemon", "--format", "json"} + args := []string{"daemon", "--json"} if cli.cliConfigPath != nil { args = append([]string{"--config-file", cli.cliConfigPath.String()}, args...) } if verbose { args = append(args, "-v", "--log-level", "debug") } - cliProc, err := executils.NewProcessFromPath(cli.convertEnvForExecutils(cli.cliEnvVars), cli.path, args...) + cliProc, err := paths.NewProcessFromPath(cli.convertEnvForExecutils(cli.cliEnvVars), cli.path, args...) cli.t.NoError(err) stdout, err := cliProc.StdoutPipe() cli.t.NoError(err) @@ -279,11 +408,22 @@ func (cli *ArduinoCLI) StartDaemon(verbose bool) string { } go _copy(os.Stdout, stdout) go _copy(os.Stderr, stderr) - conn, err := grpc.Dial(cli.daemonAddr, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()) - cli.t.NoError(err) - cli.daemonConn = conn - cli.daemonClient = commands.NewArduinoCoreServiceClient(conn) - cli.daemonSettingsClient = settings.NewSettingsServiceClient(conn) + + // Await the CLI daemon to be ready + var connErr error + for retries := 5; retries > 0; retries-- { + time.Sleep(time.Second) + + conn, err := grpc.NewClient(cli.daemonAddr, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + connErr = err + continue + } + cli.daemonConn = conn + cli.daemonClient = commands.NewArduinoCoreServiceClient(conn) + break + } + cli.t.NoError(connErr) return cli.daemonAddr } @@ -309,18 +449,18 @@ func (cli *ArduinoCLI) Create() *ArduinoCLIInstance { logCallf(" -> %v\n", resp) return &ArduinoCLIInstance{ cli: cli, - instance: resp.Instance, + instance: resp.GetInstance(), } } // SetValue calls the "SetValue" gRPC method. func (cli *ArduinoCLI) SetValue(key, jsonData string) error { - req := &settings.SetValueRequest{ - Key: key, - JsonData: jsonData, + req := &commands.SettingsSetValueRequest{ + Key: key, + EncodedValue: jsonData, } logCallf(">>> SetValue(%+v)\n", req) - _, err := cli.daemonSettingsClient.SetValue(context.Background(), req) + _, err := cli.daemonClient.SettingsSetValue(context.Background(), req) return err } @@ -473,10 +613,32 @@ func (inst *ArduinoCLIInstance) PlatformUpgrade(ctx context.Context, packager, a return installCl, err } -// PlatformList calls the "PlatformList" gRPC method. -func (inst *ArduinoCLIInstance) PlatformList(ctx context.Context) (*commands.PlatformListResponse, error) { - req := &commands.PlatformListRequest{Instance: inst.instance} - logCallf(">>> PlatformList(%+v)\n", req) - resp, err := inst.cli.daemonClient.PlatformList(ctx, req) +// PlatformSearch calls the "PlatformSearch" gRPC method. +func (inst *ArduinoCLIInstance) PlatformSearch(ctx context.Context, args string, all bool) (*commands.PlatformSearchResponse, error) { + req := &commands.PlatformSearchRequest{ + Instance: inst.instance, + SearchArgs: args, + } + logCallf(">>> PlatformSearch(%+v)\n", req) + resp, err := inst.cli.daemonClient.PlatformSearch(ctx, req) return resp, err } + +// Monitor calls the "Monitor" gRPC method and sends the OpenRequest message. +func (inst *ArduinoCLIInstance) Monitor(ctx context.Context, port *commands.Port) (commands.ArduinoCoreService_MonitorClient, error) { + req := &commands.MonitorRequest{} + logCallf(">>> Monitor(%+v)\n", req) + monitorClient, err := inst.cli.daemonClient.Monitor(ctx) + if err != nil { + return nil, err + } + err = monitorClient.Send(&commands.MonitorRequest{ + Message: &commands.MonitorRequest_OpenRequest{ + OpenRequest: &commands.MonitorPortOpenRequest{ + Instance: inst.instance, + Port: port, + }, + }, + }) + return monitorClient, err +} diff --git a/internal/integrationtest/board/board_test.go b/internal/integrationtest/board/board_test.go index a74434c5d97..0541f1a5c0f 100644 --- a/internal/integrationtest/board/board_test.go +++ b/internal/integrationtest/board/board_test.go @@ -16,8 +16,7 @@ package board_test import ( - "encoding/json" - "os" + "runtime" "strings" "testing" @@ -25,7 +24,6 @@ import ( "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" "github.com/stretchr/testify/require" - semver "go.bug.st/relaxed-semver" "go.bug.st/testifyjson/requirejson" ) @@ -38,7 +36,7 @@ func TestCorrectBoardListOrdering(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("core", "install", "arduino:avr") require.NoError(t, err) - jsonOut, _, err := cli.Run("board", "listall", "--format", "json") + jsonOut, _, err := cli.Run("board", "listall", "--json") require.NoError(t, err) requirejson.Query(t, jsonOut, "[.boards[] | .fqbn]", `[ "arduino:avr:yun", @@ -74,52 +72,85 @@ func TestCorrectBoardListOrdering(t *testing.T) { } func TestBoardList(t *testing.T) { - if os.Getenv("CI") != "" { - t.Skip("VMs have no serial ports") - } - env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() _, _, err := cli.Run("core", "update-index") require.NoError(t, err) - stdout, _, err := cli.Run("board", "list", "--format", "json") + + cli.InstallMockedSerialDiscovery(t) + + stdout, _, err := cli.Run("board", "list", "--json") require.NoError(t, err) // check is a valid json and contains a list of ports requirejson.Parse(t, stdout). - Query(`[ .[].port | select(.protocol == null or .protocol_label == null) ]`). + Query(`[ .detected_ports | .[].port | select(.protocol == null or .protocol_label == null) ]`). MustBeEmpty() } -func TestBoardListWithFqbnFilter(t *testing.T) { - if os.Getenv("CI") != "" { - t.Skip("VMs have no serial ports") - } +func TestBoardListMock(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + cli.InstallMockedSerialDiscovery(t) + + stdout, _, err := cli.Run("board", "list", "--json") + require.NoError(t, err) + + // check is a valid json and contains a list of ports + requirejson.Contains(t, stdout, `{ + "detected_ports": [ + { + "matching_boards": [ + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + } + ], + "port": { + "address": "/dev/ttyCIAO", + "label": "Mocked Serial port", + "protocol": "serial", + "protocol_label": "Serial", + "properties": { + "pid": "0x0041", + "serial": "123456", + "vid": "0x2341" + }, + "hardware_id": "123456" + } + } + ] + }`) +} + +func TestBoardListWithFqbnFilter(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() _, _, err := cli.Run("core", "update-index") require.NoError(t, err) - stdout, _, err := cli.Run("board", "list", "-b", "foo:bar:baz", "--format", "json") + + cli.InstallMockedSerialDiscovery(t) + + stdout, _, err := cli.Run("board", "list", "-b", "foo:bar:baz", "--json") require.NoError(t, err) - // this is a bit of a passpartout test, it actually filters the "bluetooth boards" locally - // but it would succeed even if the filtering wasn't working properly - // TODO: find a way to simulate connected boards or create a unit test which - // mocks or initializes multiple components - requirejson.Parse(t, stdout). - MustBeEmpty() + requirejson.Query(t, stdout, `.detected_ports | length`, `0`) } func TestBoardListWithFqbnFilterInvalid(t *testing.T) { - if os.Getenv("CI") != "" { - t.Skip("VMs have no serial ports") - } - env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() - _, stderr, err := cli.Run("board", "list", "-b", "yadayada", "--format", "json") + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + cli.InstallMockedSerialDiscovery(t) + + _, stderr, err := cli.Run("board", "list", "-b", "yadayada", "--json") require.Error(t, err) requirejson.Query(t, stderr, ".error", `"Invalid FQBN: not an FQBN: yadayada"`) } @@ -133,7 +164,7 @@ func TestBoardListall(t *testing.T) { _, _, err = cli.Run("core", "install", "arduino:avr@1.8.3") require.NoError(t, err) - stdout, _, err := cli.Run("board", "listall", "--format", "json") + stdout, _, err := cli.Run("board", "listall", "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".boards | length", "26") @@ -144,26 +175,36 @@ func TestBoardListall(t *testing.T) { "name": "Arduino Yún", "fqbn": "arduino:avr:yun", "platform": { - "id": "arduino:avr", - "installed": "1.8.3", - "name": "Arduino AVR Boards" + "metadata": { + "id": "arduino:avr" + }, + "release": { + "name": "Arduino AVR Boards", + "version": "1.8.3", + "installed": true + } } }, { "name": "Arduino Uno", "fqbn": "arduino:avr:uno", "platform": { - "id": "arduino:avr", - "installed": "1.8.3", - "name": "Arduino AVR Boards" + "metadata": { + "id": "arduino:avr" + }, + "release": { + "name": "Arduino AVR Boards", + "version": "1.8.3", + "installed": true + } } } ] }`) - // Check if the boards' "latest" value is not empty + // Check if the boards' "version" value is not empty requirejson.Parse(t, stdout). - Query(`[ .boards | .[] | .platform | select(.latest == "") ]`). + Query(`[ .boards | .[] | .platform | select(.version == "") ]`). MustBeEmpty() } @@ -183,7 +224,7 @@ func TestBoardListallWithManuallyInstalledPlatform(t *testing.T) { }) require.NoError(t, err) - stdout, _, err := cli.Run("board", "listall", "--format", "json") + stdout, _, err := cli.Run("board", "listall", "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".boards | length", "17") @@ -194,20 +235,28 @@ func TestBoardListallWithManuallyInstalledPlatform(t *testing.T) { "name": "Arduino MKR1000", "fqbn": "arduino-beta-development:samd:mkr1000", "platform": { - "id": "arduino-beta-development:samd", - "installed": "1.8.11", - "latest": "1.8.11", - "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards", + "metadata": { + "id": "arduino-beta-development:samd", + }, + "release": { + "installed": true, + "version": "1.8.11", + "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards" + }, } }, { "name": "Arduino NANO 33 IoT", "fqbn": "arduino-beta-development:samd:nano_33_iot", "platform": { - "id": "arduino-beta-development:samd", - "installed": "1.8.11", - "latest": "1.8.11", - "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards" + "metadata": { + "id": "arduino-beta-development:samd", + }, + "release": { + "installed": true, + "version": "1.8.11", + "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards" + }, } } ] @@ -220,16 +269,16 @@ func TestBoardDetails(t *testing.T) { _, _, err := cli.Run("core", "update-index") require.NoError(t, err) - // Download samd core pinned to 1.8.6 - _, _, err = cli.Run("core", "install", "arduino:samd@1.8.6") + // Download samd core pinned to 1.8.13 + _, _, err = cli.Run("core", "install", "arduino:samd@1.8.13") require.NoError(t, err) // Test board listall with and without showing hidden elements - stdout, _, err := cli.Run("board", "listall", "MIPS", "--format", "json") + stdout, _, err := cli.Run("board", "listall", "MIPS", "--json") require.NoError(t, err) require.Equal(t, string(stdout), "{}\n") - stdout, _, err = cli.Run("board", "listall", "MIPS", "-a", "--format", "json") + stdout, _, err = cli.Run("board", "listall", "MIPS", "-a", "--json") require.NoError(t, err) requirejson.Contains(t, stdout, `{ "boards": [ @@ -239,74 +288,76 @@ func TestBoardDetails(t *testing.T) { ] }`) - stdout, _, err = cli.Run("board", "details", "-b", "arduino:samd:nano_33_iot", "--format", "json") + stdout, _, err = cli.Run("board", "details", "-b", "arduino:samd:nano_33_iot", "--json") require.NoError(t, err) requirejson.Contains(t, stdout, `{ - "fqbn": "arduino:samd:nano_33_iot", - "name": "Arduino NANO 33 IoT", - "version": "1.8.6", - "properties_id": "nano_33_iot", - "official": true, - "package": { - "maintainer": "Arduino", - "url": "https://downloads.arduino.cc/packages/package_index.tar.bz2", - "website_url": "http://www.arduino.cc/", - "email": "packages@arduino.cc", - "name": "arduino", - "help": { - "online": "http://www.arduino.cc/en/Reference/HomePage" - } - }, - "platform": { - "architecture": "samd", - "category": "Arduino", - "url": "http://downloads.arduino.cc/cores/samd-1.8.6.tar.bz2", - "archive_filename": "samd-1.8.6.tar.bz2", - "checksum": "SHA-256:68a4fffa6fe6aa7886aab2e69dff7d3f94c02935bbbeb42de37f692d7daf823b", - "size": 2980953, + "fqbn": "arduino:samd:nano_33_iot", + "name": "Arduino NANO 33 IoT", + "version": "1.8.13", + "properties_id": "nano_33_iot", + "official": true, + "package": { + "maintainer": "Arduino", + "url": "https://downloads.arduino.cc/packages/package_index.tar.bz2", + "website_url": "http://www.arduino.cc/", + "email": "packages@arduino.cc", + "name": "arduino", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + } + }, + "platform": { + "architecture": "samd", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/core-ArduinoCore-samd-1.8.13.tar.bz2", + "archive_filename": "core-ArduinoCore-samd-1.8.13.tar.bz2", + "checksum": "SHA-256:47d44c80a5fd4ea224eb64fd676169e896caa6856f338d78feb4a12d42b4ea67", + "size": 3074191, "name": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)" - }, - "identification_properties": [ + }, + "programmers": [ { - "properties": { - "vid": "0x2341", - "pid": "0x8057" - } + "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "id": "jlink", + "name": "Segger J-Link" }, { - "properties": { - "vid": "0x2341", - "pid": "0x0057" - } + "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "id": "edbg", + "name": "Atmel EDBG" + }, + { + "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "id": "atmel_ice", + "name": "Atmel-ICE" + }, + { + "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "id": "sam_ice", + "name": "Atmel SAM-ICE" } - ], - "programmers": [ - { - "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", - "id": "edbg", - "name": "Atmel EDBG" + ], + "identification_properties": [ + { + "properties": { + "pid": "0x8057", + "vid": "0x2341" + } }, { - "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", - "id": "atmel_ice", - "name": "Atmel-ICE" + "properties": { + "pid": "0x0057", + "vid": "0x2341" + } }, { - "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", - "id": "sam_ice", - "name": "Atmel SAM-ICE" + "properties": { + "board": "nano_33_iot" + } } - ] - }`) - - // Download samd core pinned to 1.8.8 - _, _, err = cli.Run("core", "install", "arduino:samd@1.8.8") - require.NoError(t, err) - - stdout, _, err = cli.Run("board", "details", "-b", "arduino:samd:nano_33_iot", "--format", "json") - require.NoError(t, err) - requirejson.Contains(t, stdout, `{"debugging_supported": true}`) + ] + }`) } func TestBoardDetailsNoFlags(t *testing.T) { @@ -374,61 +425,65 @@ func TestBoardSearch(t *testing.T) { _, _, err := cli.Run("update") require.NoError(t, err) - stdout, _, err := cli.Run("board", "search", "--format", "json") + stdout, _, err := cli.Run("board", "search", "--json") require.NoError(t, err) // Verifies boards are returned requirejson.NotEmpty(t, stdout) // Verifies no board has FQBN set since no platform is installed - requirejson.Query(t, stdout, "[ .[] | select(.fqbn) ] | length", "0") - requirejson.Contains(t, stdout, `[ - {"name": "Arduino UNO"}, - {"name": "Arduino Yún"}, - {"name": "Arduino Zero"}, - {"name": "Arduino Nano 33 BLE"}, - {"name": "Arduino Portenta H7"} - ]`) + requirejson.Query(t, stdout, "[ .boards[] | select(.fqbn) ] | length", "0") + requirejson.Contains(t, stdout, `{ + "boards": [ + {"name": "Arduino UNO"}, + {"name": "Arduino Yún"}, + {"name": "Arduino Zero"}, + {"name": "Arduino Nano 33 BLE"}, + {"name": "Arduino Portenta H7"} + ]}`) // Search in non installed boards - stdout, _, err = cli.Run("board", "search", "--format", "json", "nano", "33") + stdout, _, err = cli.Run("board", "search", "--json", "nano", "33") require.NoError(t, err) // Verifies boards are returned requirejson.NotEmpty(t, stdout) // Verifies no board has FQBN set since no platform is installed - requirejson.Query(t, stdout, "[ .[] | select(.fqbn) ] | length", "0") - requirejson.Contains(t, stdout, `[ - {"name": "Arduino Nano 33 BLE"}, - {"name": "Arduino Nano 33 IoT"} - ]`) + requirejson.Query(t, stdout, "[ .boards[] | select(.fqbn) ] | length", "0") + requirejson.Contains(t, stdout, `{ + "boards": [ + {"name": "Arduino Nano 33 BLE"}, + {"name": "Arduino Nano 33 IoT"} + ]}`) // Install a platform from index _, _, err = cli.Run("core", "install", "arduino:avr@1.8.3") require.NoError(t, err) - stdout, _, err = cli.Run("board", "search", "--format", "json") + stdout, _, err = cli.Run("board", "search", "--json") require.NoError(t, err) requirejson.NotEmpty(t, stdout) // Verifies some FQBNs are now returned after installing a platform - requirejson.Query(t, stdout, "[ .[] | select(.fqbn) ] | length", "26") - requirejson.Contains(t, stdout, `[ - { - "name": "Arduino Yún", - "fqbn": "arduino:avr:yun" - }, - { - "name": "Arduino Uno", - "fqbn": "arduino:avr:uno" - } - ]`) + requirejson.Query(t, stdout, "[ .boards[] | select(.fqbn) ] | length", "26") + requirejson.Contains(t, stdout, `{ + "boards": [ + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + }, + { + "name": "Arduino Uno", + "fqbn": "arduino:avr:uno" + } + ]}`) - stdout, _, err = cli.Run("board", "search", "--format", "json", "arduino", "yun") + stdout, _, err = cli.Run("board", "search", "--json", "arduino", "yun") require.NoError(t, err) requirejson.NotEmpty(t, stdout) - requirejson.Contains(t, stdout, `[ - { - "name": "Arduino Yún", - "fqbn": "arduino:avr:yun" - } - ]`) + requirejson.Contains(t, stdout, `{ + "boards": [ + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + } + ]}`) // Manually installs a core in sketchbooks hardware folder gitUrl := "https://github.com/arduino/ArduinoCore-samd.git" @@ -439,51 +494,54 @@ func TestBoardSearch(t *testing.T) { }) require.NoError(t, err) - stdout, _, err = cli.Run("board", "search", "--format", "json") + stdout, _, err = cli.Run("board", "search", "--json") require.NoError(t, err) requirejson.NotEmpty(t, stdout) // Verifies some FQBNs are now returned after installing a platform - requirejson.Query(t, stdout, "[ .[] | select(.fqbn) ] | length", "43") - requirejson.Contains(t, stdout, `[ - { - "name": "Arduino Uno", - "fqbn": "arduino:avr:uno" - }, - { - "name": "Arduino Yún", - "fqbn": "arduino:avr:yun" - }, - { - "name": "Arduino MKR WiFi 1010", - "fqbn": "arduino-beta-development:samd:mkrwifi1010" - }, - { - "name": "Arduino MKR1000", - "fqbn": "arduino-beta-development:samd:mkr1000" - }, - { - "name": "Arduino MKRZERO", - "fqbn": "arduino-beta-development:samd:mkrzero" - }, - { - "name": "Arduino NANO 33 IoT", - "fqbn": "arduino-beta-development:samd:nano_33_iot" - }, - { - "fqbn": "arduino-beta-development:samd:arduino_zero_native" - } - ]`) + requirejson.Query(t, stdout, "[ .boards[] | select(.fqbn) ] | length", "43") + requirejson.Contains(t, stdout, `{ + "boards": + [ + { + "name": "Arduino Uno", + "fqbn": "arduino:avr:uno" + }, + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + }, + { + "name": "Arduino MKR WiFi 1010", + "fqbn": "arduino-beta-development:samd:mkrwifi1010" + }, + { + "name": "Arduino MKR1000", + "fqbn": "arduino-beta-development:samd:mkr1000" + }, + { + "name": "Arduino MKRZERO", + "fqbn": "arduino-beta-development:samd:mkrzero" + }, + { + "name": "Arduino NANO 33 IoT", + "fqbn": "arduino-beta-development:samd:nano_33_iot" + }, + { + "fqbn": "arduino-beta-development:samd:arduino_zero_native" + } + ]}`) - stdout, _, err = cli.Run("board", "search", "--format", "json", "mkr1000") + stdout, _, err = cli.Run("board", "search", "--json", "mkr1000") require.NoError(t, err) requirejson.NotEmpty(t, stdout) // Verifies some FQBNs are now returned after installing a platform - requirejson.Contains(t, stdout, `[ - { - "name": "Arduino MKR1000", - "fqbn": "arduino-beta-development:samd:mkr1000" - } - ]`) + requirejson.Contains(t, stdout, `{ + "boards": [ + { + "name": "Arduino MKR1000", + "fqbn": "arduino-beta-development:samd:mkr1000" + } + ]}`) } func TestBoardAttach(t *testing.T) { @@ -492,79 +550,64 @@ func TestBoardAttach(t *testing.T) { sketchName := "BoardAttach" sketchPath := cli.SketchbookDir().Join(sketchName) - sketchProjectFlie := sketchPath.Join("sketch.yaml") + sketchProjectFile := sketchPath.Join("sketch.yaml") // Create a test sketch _, _, err := cli.Run("sketch", "new", sketchPath.String()) require.NoError(t, err) { - stdout, _, err := cli.Run("board", "attach", "-b", "arduino:avr:uno", sketchPath.String(), "--format", "json") + stdout, _, err := cli.Run("board", "attach", "-b", "arduino:avr:uno", sketchPath.String(), "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".fqbn", `"arduino:avr:uno"`) - yamlData, err := sketchProjectFlie.ReadFile() + yamlData, err := sketchProjectFile.ReadFile() require.NoError(t, err) require.Contains(t, string(yamlData), "default_fqbn: arduino:avr:uno") require.NotContains(t, string(yamlData), "default_port:") require.NotContains(t, string(yamlData), "default_protocol:") } { - stdout, _, err := cli.Run("board", "attach", "-p", "/dev/ttyACM0", "-l", "serial", sketchPath.String(), "--format", "json") + stdout, _, err := cli.Run("board", "attach", "-p", "/dev/ttyACM0", "-l", "serial", sketchPath.String(), "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".fqbn", `"arduino:avr:uno"`) requirejson.Query(t, stdout, ".port.address", `"/dev/ttyACM0"`) requirejson.Query(t, stdout, ".port.protocol", `"serial"`) - yamlData, err := sketchProjectFlie.ReadFile() + yamlData, err := sketchProjectFile.ReadFile() require.NoError(t, err) require.Contains(t, string(yamlData), "default_fqbn: arduino:avr:uno") require.Contains(t, string(yamlData), "default_port: /dev/ttyACM0") require.Contains(t, string(yamlData), "default_protocol: serial") } { - stdout, _, err := cli.Run("board", "attach", "-p", "/dev/ttyACM0", sketchPath.String(), "--format", "json") + stdout, _, err := cli.Run("board", "attach", "-p", "/dev/ttyACM0", sketchPath.String(), "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".fqbn", `"arduino:avr:uno"`) requirejson.Query(t, stdout, ".port.address", `"/dev/ttyACM0"`) requirejson.Query(t, stdout, ".port.protocol", `null`) - yamlData, err := sketchProjectFlie.ReadFile() + yamlData, err := sketchProjectFile.ReadFile() require.NoError(t, err) require.Contains(t, string(yamlData), "default_fqbn: arduino:avr:uno") require.Contains(t, string(yamlData), "default_port: /dev/ttyACM0") require.NotContains(t, string(yamlData), "default_protocol:") } -} - -func TestBoardSearchWithOutdatedCore(t *testing.T) { - env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) - defer env.CleanUp() - - _, _, err := cli.Run("update") - require.NoError(t, err) - - // Install an old core version - _, _, err = cli.Run("core", "install", "arduino:samd@1.8.6") - require.NoError(t, err) + { + stdout, _, err := cli.Run("board", "attach", "-b", "arduino:samd:mkr1000", "-P", "atmel_ice", sketchPath.String(), "--json") + require.NoError(t, err) + requirejson.Query(t, stdout, ".fqbn", `"arduino:samd:mkr1000"`) + requirejson.Query(t, stdout, ".programmer", `"atmel_ice"`) + requirejson.Query(t, stdout, ".port.address", `"/dev/ttyACM0"`) + requirejson.Query(t, stdout, ".port.protocol", `null`) - stdout, _, err := cli.Run("board", "search", "arduino:samd:mkrwifi1010", "--format", "json") - require.NoError(t, err) - requirejson.Len(t, stdout, 1) - var data []map[string]interface{} - err = json.Unmarshal(stdout, &data) - require.NoError(t, err) - board := data[0] - require.Equal(t, board["name"], "Arduino MKR WiFi 1010") - require.Equal(t, board["fqbn"], "arduino:samd:mkrwifi1010") - samdCore := board["platform"].(map[string]interface{}) - require.Equal(t, samdCore["id"], "arduino:samd") - installedVersion, err := semver.Parse(samdCore["installed"].(string)) - require.NoError(t, err) - latestVersion, err := semver.Parse(samdCore["latest"].(string)) - require.NoError(t, err) - // Installed version must be older than latest - require.True(t, installedVersion.LessThan(latestVersion)) + yamlData, err := sketchProjectFile.ReadFile() + require.NoError(t, err) + require.Contains(t, string(yamlData), "default_fqbn: arduino:samd:mkr1000") + require.Contains(t, string(yamlData), "default_programmer: atmel_ice") + require.Contains(t, string(yamlData), "default_port: /dev/ttyACM0") + require.NotContains(t, string(yamlData), "default_protocol:") + } } func TestBoardListWithFailedBuiltinInstallation(t *testing.T) { @@ -578,10 +621,14 @@ func TestBoardListWithFailedBuiltinInstallation(t *testing.T) { _, _, err = cli.Run("board", "list") require.NoError(t, err) + ext := "" + if runtime.GOOS == "windows" { + ext = ".exe" + } // remove files from serial-discovery directory to simulate a failed installation serialDiscovery, err := cli.DataDir().Join("packages", "builtin", "tools", "serial-discovery").ReadDir() require.NoError(t, err) - require.NoError(t, serialDiscovery[0].Join("serial-discovery.exe").Remove()) + require.NoError(t, serialDiscovery[0].Join("serial-discovery"+ext).Remove()) // board list should install serial-discovery again stdout, stderr, err := cli.Run("board", "list") @@ -601,9 +648,10 @@ func TestCLIStartupWithCorruptedInventory(t *testing.T) { require.NoError(t, err) _, err = f.WriteString(`data: '[{"name":"WCH;32?'","fqbn":"esp32:esp32:esp32s3camlcd"}]'`) require.NoError(t, err) + require.NoError(t, f.Close()) // the CLI should not be able to load inventory and report it to the logs - _, stderr, err := cli.Run("core", "update-index", "-v") + stdout, _, err := cli.Run("core", "update-index", "-v") require.NoError(t, err) - require.Contains(t, string(stderr), "Error loading inventory store") + require.Contains(t, string(stdout), "Error loading inventory store") } diff --git a/internal/integrationtest/board/hardware_loading_test.go b/internal/integrationtest/board/hardware_loading_test.go index 54bf8cffa14..758ce6a40d2 100644 --- a/internal/integrationtest/board/hardware_loading_test.go +++ b/internal/integrationtest/board/hardware_loading_test.go @@ -43,32 +43,37 @@ func TestHardwareLoading(t *testing.T) { t.Run("Simple", func(t *testing.T) { { - out, _, err := cli.Run("core", "list", "--format", "json") + out, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.LengthMustEqualTo(1) - jsonOut.MustContain(`[ - { - "id": "arduino:avr", - "installed": "1.8.6", - "name": "Arduino AVR Boards", - "boards": [ - { - "name": "Arduino Uno", - "fqbn": "arduino:avr:uno" - }, - { - "name": "Arduino Yún", - "fqbn": "arduino:avr:yun" + jsonOut.MustContain(`{ + "platforms": [ + { + "id": "arduino:avr", + "installed_version": "1.8.6", + "releases": { + "1.8.6": { + "name": "Arduino AVR Boards", + "boards": [ + { + "name": "Arduino Uno", + "fqbn": "arduino:avr:uno" + }, + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + } + ] + } } - ] - } - ]`) + } + ]}`) } { // Also test local platform.txt properties override - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:uno", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:uno", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ @@ -90,12 +95,12 @@ func TestHardwareLoading(t *testing.T) { "id": "avrispmkii", "name": "AVRISP mkII" } - ] + ] }`) } { - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:yun", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:yun", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ @@ -110,7 +115,7 @@ func TestHardwareLoading(t *testing.T) { { // Check un-expansion of board_properties - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:robotMotor", "--show-properties=unexpanded", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:robotMotor", "--show-properties=unexpanded", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ @@ -126,7 +131,7 @@ func TestHardwareLoading(t *testing.T) { { // Also test local boards.txt properties override - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:diecimila", "--show-properties=unexpanded", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:diecimila", "--show-properties=unexpanded", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ @@ -147,64 +152,72 @@ func TestHardwareLoading(t *testing.T) { require.NoError(t, customHwDir.CopyDirTo(cli.SketchbookDir().Join("hardware"))) { - out, _, err := cli.Run("core", "list", "--format", "json") + out, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) - if runtime.GOOS == "windows" { - // a package is a symlink, and windows does not support them - jsonOut.LengthMustEqualTo(2) - } else { - jsonOut.LengthMustEqualTo(3) - } - jsonOut.MustContain(`[ - { - "id": "arduino:avr", - "installed": "1.8.6", - "name": "Arduino AVR Boards", - "boards": [ - { - "name": "Arduino Uno", - "fqbn": "arduino:avr:uno" - }, - { - "name": "Arduino Yún", - "fqbn": "arduino:avr:yun" - } - ] - } - ]`) - jsonOut.MustContain(`[ - { - "id": "my_avr_platform:avr", - "installed": "9.9.9", - "name": "My AVR Boards", - "boards": [ - { - "name": "Arduino Yún", - "fqbn": "my_avr_platform:avr:custom_yun" + jsonOut.Query(`.platforms | length`).LengthMustEqualTo(3) + jsonOut.MustContain(`{ + "platforms": [ + { + "id": "arduino:avr", + "installed_version": "1.8.6", + "releases": { + "1.8.6": { + "name": "Arduino AVR Boards", + "boards": [ + { + "name": "Arduino Uno", + "fqbn": "arduino:avr:uno" + }, + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + } + ] + } } - ], - "manually_installed": true, - "missing_metadata": true - } - ]`) + } + ]}`) + jsonOut.MustContain(`{ + "platforms": [ + { + "id": "my_avr_platform:avr", + "installed_version": "9.9.9", + "releases": { + "9.9.9": { + "name": "My AVR Boards", + "boards": [ + { + "name": "Arduino Yún", + "fqbn": "my_avr_platform:avr:custom_yun" + } + ] + } + }, + "manually_installed": true + } + ]}`) // require.False(t, myAVRPlatformAvrArch.Properties.ContainsKey("preproc.includes.flags")) if runtime.GOOS != "windows" { - jsonOut.MustContain(`[ - { - "id": "my_symlinked_avr_platform:avr", - "manually_installed": true, - "missing_metadata": true - } - ]`) + jsonOut.MustContain(`{ + "platforms": [ + { + "id": "my_symlinked_avr_platform:avr", + "manually_installed": true, + "releases": { + "9.9.9": { + } + } + } + ]}`) } } { // Also test local platform.txt properties override - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:uno", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:uno", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ @@ -226,12 +239,12 @@ func TestHardwareLoading(t *testing.T) { "id": "avrispmkii", "name": "AVRISP mkII" } - ] + ] }`) } { - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:yun", "--show-properties=unexpanded", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:yun", "--show-properties=unexpanded", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ diff --git a/internal/integrationtest/compile_1/compile_test.go b/internal/integrationtest/compile_1/compile_test.go index 78ceb5ca63c..27b31cb82c1 100644 --- a/internal/integrationtest/compile_1/compile_test.go +++ b/internal/integrationtest/compile_1/compile_test.go @@ -21,12 +21,13 @@ import ( "encoding/json" "fmt" "os" + "regexp" "sort" "strings" "testing" "time" - "github.com/arduino/arduino-cli/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" "github.com/arduino/arduino-cli/internal/integrationtest" "github.com/arduino/go-paths-helper" "github.com/go-git/go-git/v5" @@ -163,7 +164,7 @@ func compileWithSimpleSketchCustomEnv(t *testing.T, env *integrationtest.Environ require.NoError(t, err) // Build sketch for arduino:avr:uno with json output - stdout, _, err = cli.RunWithCustomEnv(customEnv, "compile", "-b", fqbn, sketchPath.String(), "--format", "json") + stdout, _, err = cli.RunWithCustomEnv(customEnv, "compile", "-b", fqbn, sketchPath.String(), "--json") require.NoError(t, err) // check is a valid json and contains requested data var compileOutput map[string]interface{} @@ -219,16 +220,36 @@ func compileWithSketchWithSymlinkSelfloop(t *testing.T, env *integrationtest.Env require.NoError(t, err) require.Contains(t, string(stdout), "Sketch created in: "+sketchPath.String()) - // create a symlink that loops on himself + // Create a symlink that loops on himself + // + // /tmp/cli2843369229/Arduino/CompileIntegrationTestSymlinkSelfLoop + // ├── CompileIntegrationTestSymlinkSelfLoop.ino + // └── loop -> /tmp/cli2843369229/Arduino/CompileIntegrationTestSymlinkSelfLoop/loop + // + // in this case the link is "broken", and it will be ignored by the compiler loopFilePath := sketchPath.Join("loop") err = os.Symlink(loopFilePath.String(), loopFilePath.String()) require.NoError(t, err) - // Build sketch for arduino:avr:uno + _, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String()) + require.NoError(t, err) + + // Add a symlink that loops on himself named as a .ino file + // + // /tmp/cli2843369229/Arduino/CompileIntegrationTestSymlinkSelfLoop + // ├── CompileIntegrationTestSymlinkSelfLoop.ino + // ├── loop -> /tmp/cli2843369229/Arduino/CompileIntegrationTestSymlinkSelfLoop/loop + // └── loop.ino -> /tmp/cli2843369229/Arduino/CompileIntegrationTestSymlinkSelfLoop/loop.ino + // + // in this case the new link is "broken" as before, but being part of the sketch will trigger an error. + loopInoFilePath := sketchPath.Join("loop.ino") + err = os.Symlink(loopFilePath.String(), loopInoFilePath.String()) + require.NoError(t, err) + _, stderr, err := cli.Run("compile", "-b", fqbn, sketchPath.String()) // The assertion is a bit relaxed in this case because win behaves differently from macOs and linux // returning a different error detailed message - require.Contains(t, string(stderr), "Can't open sketch:") + require.Contains(t, string(stderr), "Error during build:") require.Error(t, err) } { @@ -495,13 +516,15 @@ func compileWithExportBinariesConfig(t *testing.T, env *integrationtest.Environm defer cli.WorkingDir().Join("arduino-cli.yaml").Remove() // Test if arduino-cli config file written in the previous run has the `always_export_binaries` flag set. - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) requirejson.Contains(t, stdout, ` { - "sketch": { - "always_export_binaries": "true" - } + "config": { + "sketch": { + "always_export_binaries": true + } + } }`) // Test compilation with export binaries env var set @@ -822,16 +845,23 @@ func TestCompileWithArchivesAndLongPaths(t *testing.T) { _, _, err = cli.Run("lib", "install", "ArduinoIoTCloud", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "examples", "ArduinoIoTCloud", "--format", "json", "--config-file", "arduino-cli.yaml") - require.NoError(t, err) - var libOutput []map[string]interface{} - err = json.Unmarshal(stdout, &libOutput) + stdout, _, err := cli.Run("lib", "examples", "ArduinoIoTCloud", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - sketchPath := paths.New(libOutput[0]["library"].(map[string]interface{})["install_dir"].(string)) + libOutput := strings.Trim(requirejson.Parse(t, stdout).Query(`.examples.[0].library.install_dir`).String(), `"`) + sketchPath := paths.New(libOutput) sketchPath = sketchPath.Join("examples", "ArduinoIoTCloud-Advanced") - _, _, err = cli.Run("compile", "-b", "esp8266:esp8266:huzzah", sketchPath.String(), "--config-file", "arduino-cli.yaml") - require.NoError(t, err) + t.Run("Compile", func(t *testing.T) { + _, _, err = cli.Run("compile", "-b", "esp8266:esp8266:huzzah", sketchPath.String(), "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + }) + + t.Run("CheckCachingOfFolderArchives", func(t *testing.T) { + // Run compile again and check if the archive is re-used (cached) + out, _, err := cli.Run("compile", "-b", "esp8266:esp8266:huzzah", sketchPath.String(), "--config-file", "arduino-cli.yaml", "-v") + require.NoError(t, err) + require.True(t, regexp.MustCompile(`(?m)^Using previously compiled file:.*libraries.ArduinoIoTCloud.objs\.a$`).Match(out)) + }) } func TestCompileWithPrecompileLibrary(t *testing.T) { @@ -1159,7 +1189,7 @@ void loop() { ` expected = strings.ReplaceAll(expected, "%SKETCH_PATH%", cpp.QuoteString(sketchPath.Join("SketchSimple.ino").String())) - jsonOut, _, err := cli.Run("compile", "-b", fqbn, "--preprocess", sketchPath.String(), "--format", "json") + jsonOut, _, err := cli.Run("compile", "-b", fqbn, "--preprocess", sketchPath.String(), "--json") require.NoError(t, err) var ex struct { CompilerOut string `json:"compiler_out"` diff --git a/internal/integrationtest/compile_3/compile_commands_test.go b/internal/integrationtest/compile_3/compile_commands_test.go new file mode 100644 index 00000000000..1abdfc9a056 --- /dev/null +++ b/internal/integrationtest/compile_3/compile_commands_test.go @@ -0,0 +1,89 @@ +// This file is part of arduino-cli. +// +// Copyright 2022 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile_test + +import ( + "encoding/json" + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" + "go.bug.st/testifyjson/requirejson" +) + +func TestCompileCommandsJSONGeneration(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2401 + + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Run update-index with our test index + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.5") + require.NoError(t, err) + + // Create a test sketch + out, _, err := cli.Run("sketch", "new", "Test", "--json") + require.NoError(t, err) + var s struct { + Path string `json:"sketch_path"` + } + require.NoError(t, json.Unmarshal(out, &s)) + sketchPath := paths.New(s.Path) + buildPath := sketchPath.Join("build") + + { + // Normal build + _, _, err = cli.Run( + "compile", + "-b", "arduino:avr:uno", + "--build-path", buildPath.String(), + sketchPath.String()) + require.NoError(t, err) + + compileCommandsPath := buildPath.Join("compile_commands.json") + require.True(t, compileCommandsPath.Exist()) + compileCommandJson, err := compileCommandsPath.ReadFile() + require.NoError(t, err) + compileCommands := requirejson.Parse(t, compileCommandJson) + // Check that the variant include path is present, one of the arguments must be + // something like: + // "-I/home/user/.arduino15/packages/arduino/hardware/avr/1.8.6/variants/standard" + compileCommands.Query(`[ .[0].arguments[] | contains("standard") ] | any`).MustEqual(`true`) + } + + { + // Build with skip-library-check + _, _, err = cli.Run( + "compile", + "-b", "arduino:avr:uno", + "--only-compilation-database", + "--skip-libraries-discovery", + "--build-path", buildPath.String(), + sketchPath.String()) + require.NoError(t, err) + + compileCommandsPath := buildPath.Join("compile_commands.json") + require.True(t, compileCommandsPath.Exist()) + compileCommandJson, err := compileCommandsPath.ReadFile() + require.NoError(t, err) + compileCommands := requirejson.Parse(t, compileCommandJson) + // Check that the variant include path is present, one of the arguments must be + // something like: + // "-I/home/user/.arduino15/packages/arduino/hardware/avr/1.8.6/variants/standard" + compileCommands.Query(`[ .[0].arguments[] | contains("standard") ] | any`).MustEqual(`true`) + } +} diff --git a/internal/integrationtest/compile_3/compile_env_var_test.go b/internal/integrationtest/compile_3/compile_env_var_test.go new file mode 100644 index 00000000000..ee786c2d881 --- /dev/null +++ b/internal/integrationtest/compile_3/compile_env_var_test.go @@ -0,0 +1,60 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile_test + +import ( + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestCompileEnvVarOnNewProcess(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2499 + + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Run update-index with our test index + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + // Prepare sketchbook and sketch + sketch, err := paths.New("testdata", "bare_minimum").Abs() + require.NoError(t, err) + + // Build "printenv" helper insider testdata/printenv + printenvDir, err := paths.New("testdata", "printenv").Abs() + require.NoError(t, err) + builder, err := paths.NewProcess(nil, "go", "build") + require.NoError(t, err) + builder.SetDir(printenvDir.String()) + require.NoError(t, builder.Run()) + printenv := printenvDir.Join("printenv") + + // Patch avr core to run printenv instead of size + plTxt, err := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6", "platform.txt").Append() + require.NoError(t, err) + _, err = plTxt.WriteString("recipe.size.pattern=" + printenv.String() + "\n") + require.NoError(t, err) + require.NoError(t, plTxt.Close()) + + // Run compile and get ENV + _, stderr, err := cli.Run("compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(stderr), "ENV> ARDUINO_USER_AGENT=") +} diff --git a/internal/integrationtest/compile_3/compile_show_properties_test.go b/internal/integrationtest/compile_3/compile_show_properties_test.go index 1c17ef63d47..c7b400167fc 100644 --- a/internal/integrationtest/compile_3/compile_show_properties_test.go +++ b/internal/integrationtest/compile_3/compile_show_properties_test.go @@ -20,13 +20,13 @@ import ( "testing" "github.com/arduino/arduino-cli/internal/integrationtest" - "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-properties-orderedmap" "github.com/stretchr/testify/require" ) type cliCompileResponse struct { - BuilderResult *commands.CompileResponse `json:"builder_result"` + BuilderResult *rpc.BuilderResult `json:"builder_result"` } func TestCompileShowProperties(t *testing.T) { @@ -51,9 +51,9 @@ func TestCompileShowProperties(t *testing.T) { require.True(t, props.ContainsKey("sketch_path")) require.NotContains(t, props.Get("archive_file_path"), "{build.path}") - // Test --show-properties --format JSON output is clean + // Test --show-properties --json JSON output is clean // properties are expanded - stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties", "--format", "json", bareMinimum.String()) + stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties", "--json", bareMinimum.String()) require.NoError(t, err) require.Empty(t, stderr) props, err = properties.LoadFromSlice( @@ -69,8 +69,8 @@ func TestCompileShowProperties(t *testing.T) { require.NoError(t, err, "Output must be a clean property list") require.NotEmpty(t, stderr) - // Test --show-properties --format JSON output is clean, with a wrong FQBN - stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:unoa", "-v", "--show-properties", "--format", "json", bareMinimum.String()) + // Test --show-properties --json JSON output is clean, with a wrong FQBN + stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:unoa", "-v", "--show-properties", "--json", bareMinimum.String()) require.Error(t, err) require.Empty(t, stderr) requireCompileResponseJson(t, stdout) @@ -87,7 +87,7 @@ func TestCompileShowProperties(t *testing.T) { // Test --show-properties=unexpanded output is clean // properties are not expanded - stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties=unexpanded", "--format", "json", bareMinimum.String()) + stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties=unexpanded", "--json", bareMinimum.String()) require.NoError(t, err) require.Empty(t, stderr) props, err = properties.LoadFromSlice( @@ -106,9 +106,9 @@ func TestCompileShowProperties(t *testing.T) { require.True(t, props.ContainsKey("archive_file_path")) require.NotContains(t, props.Get("archive_file_path"), "{build.path}") - // Test --show-properties=expanded --format JSON output is clean + // Test --show-properties=expanded --json JSON output is clean // properties are expanded - stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties=expanded", "--format", "json", bareMinimum.String()) + stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties=expanded", "--json", bareMinimum.String()) require.NoError(t, err) require.Empty(t, stderr) props, err = properties.LoadFromSlice( diff --git a/internal/integrationtest/compile_3/compile_test.go b/internal/integrationtest/compile_3/compile_test.go index 2df3d59f40d..aabd30445d0 100644 --- a/internal/integrationtest/compile_3/compile_test.go +++ b/internal/integrationtest/compile_3/compile_test.go @@ -113,10 +113,68 @@ func TestCompilerErrOutput(t *testing.T) { require.NoError(t, err) // Run compile and catch err stream - out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "--format", "json", sketch.String()) + out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--json", sketch.String()) require.Error(t, err) - compilerErr := requirejson.Parse(t, out).Query(".compiler_err") - compilerErr.MustContain(`"error"`) + outJson := requirejson.Parse(t, out) + outJson.Query(`.compiler_err`).MustContain(`"error"`) + outJson.Query(`.builder_result.diagnostics`).MustContain(` + [ + { + "severity": "ERROR", + "line": 1, + "column": 14, + "context": [ { "message": "In function 'void wrong()':" } ] + } + ]`) + } + + // Test the preprocessor errors are present in the diagnostics + { + // prepare sketch + sketch, err := paths.New("testdata", "blink_with_wrong_include").Abs() + require.NoError(t, err) + + // Run compile and catch err stream + out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--json", sketch.String()) + require.Error(t, err) + outJson := requirejson.Parse(t, out) + outJson.Query(`.success`).MustContain(`false`) + outJson.Query(`.builder_result.diagnostics`).MustContain(` + [ + { + "severity": "ERROR", + "line": 1, + "column": 2, + "message": "invalid preprocessing directive #wrong\n #wrong\n ^~~~~", + } + ]`) + } + + // Test the preprocessor errors are present in the diagnostics. + // In case we have 2 libraries: + // 1. one is missing + // 2. the other one is missing only from the first GCC run + // The diagnostics should report only 1 missing library. + { + // prepare sketch + sketch, err := paths.New("testdata", "using_Wire_with_missing_lib").Abs() + require.NoError(t, err) + + // Run compile and catch err stream + out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--json", sketch.String()) + require.Error(t, err) + outJson := requirejson.Parse(t, out) + outJson.Query(`.success`).MustContain(`false`) + outJson.Query(`.builder_result.diagnostics | length`).MustEqual("1") + outJson.Query(`.builder_result.diagnostics`).MustContain(` + [ + { + "severity": "FATAL", + "message": "MissingWire.h: No such file or directory\n #include \u003cMissingWire.h\u003e\n ^~~~~~~~~~~~~~~", + "line": 2, + "column": 10, + } + ]`) } // Check that library discover do not generate false errors @@ -127,11 +185,12 @@ func TestCompilerErrOutput(t *testing.T) { require.NoError(t, err) // Run compile and catch err stream - out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--format", "json", sketch.String()) + out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--json", sketch.String()) require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.Query(".compiler_out").MustNotContain(`"fatal error"`) jsonOut.Query(".compiler_err").MustNotContain(`"fatal error"`) + jsonOut.MustNotContain(`{ "diagnostics" : [] }`) } } diff --git a/internal/integrationtest/compile_3/lib_selection_test.go b/internal/integrationtest/compile_3/lib_selection_test.go index a999384d583..93c58acd529 100644 --- a/internal/integrationtest/compile_3/lib_selection_test.go +++ b/internal/integrationtest/compile_3/lib_selection_test.go @@ -45,7 +45,7 @@ func TestCompileLibrarySelection(t *testing.T) { // Perform two compile: // - the first should use LibraryA - stdout, _, err := cli.RunWithCustomEnv(vars, "compile", "-b", "arduino:avr:mega", "--format", "json", sketch.String()) + stdout, _, err := cli.RunWithCustomEnv(vars, "compile", "-b", "arduino:avr:mega", "--json", sketch.String()) require.NoError(t, err) requirejson.Contains(t, stdout, `{ "builder_result" : { @@ -56,7 +56,7 @@ func TestCompileLibrarySelection(t *testing.T) { }`) // - the second should use AnotherLibrary (because it was forced by --library) - stdout, _, err = cli.RunWithCustomEnv(vars, "compile", "-b", "arduino:avr:mega", "--library", anotherLib.String(), "--format", "json", sketch.String()) + stdout, _, err = cli.RunWithCustomEnv(vars, "compile", "-b", "arduino:avr:mega", "--library", anotherLib.String(), "--json", sketch.String()) require.NoError(t, err) requirejson.Contains(t, stdout, `{ "builder_result" : { diff --git a/internal/integrationtest/compile_3/testdata/blink_with_wrong_include/blink_with_wrong_include.ino b/internal/integrationtest/compile_3/testdata/blink_with_wrong_include/blink_with_wrong_include.ino new file mode 100644 index 00000000000..35887d391c9 --- /dev/null +++ b/internal/integrationtest/compile_3/testdata/blink_with_wrong_include/blink_with_wrong_include.ino @@ -0,0 +1,3 @@ +#wrong +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_3/testdata/printenv/.gitignore b/internal/integrationtest/compile_3/testdata/printenv/.gitignore new file mode 100644 index 00000000000..8094186ae54 --- /dev/null +++ b/internal/integrationtest/compile_3/testdata/printenv/.gitignore @@ -0,0 +1 @@ +printenv diff --git a/executils/testdata/delay/main.go b/internal/integrationtest/compile_3/testdata/printenv/main.go similarity index 83% rename from executils/testdata/delay/main.go rename to internal/integrationtest/compile_3/testdata/printenv/main.go index 883bb698f4e..fc132a150eb 100644 --- a/executils/testdata/delay/main.go +++ b/internal/integrationtest/compile_3/testdata/printenv/main.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -17,10 +17,11 @@ package main import ( "fmt" - "time" + "os" ) func main() { - time.Sleep(3 * time.Second) - fmt.Println("Elapsed!") + for _, env := range os.Environ() { + fmt.Fprintln(os.Stderr, "ENV>", env) + } } diff --git a/internal/integrationtest/compile_3/testdata/using_Wire_with_missing_lib/using_Wire_with_missing_lib.ino b/internal/integrationtest/compile_3/testdata/using_Wire_with_missing_lib/using_Wire_with_missing_lib.ino new file mode 100644 index 00000000000..a461189885d --- /dev/null +++ b/internal/integrationtest/compile_3/testdata/using_Wire_with_missing_lib/using_Wire_with_missing_lib.ino @@ -0,0 +1,5 @@ +#include <Wire.h> +#include <MissingWire.h> + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_4/broken_symlink_test.go b/internal/integrationtest/compile_4/broken_symlink_test.go new file mode 100644 index 00000000000..42d948269c6 --- /dev/null +++ b/internal/integrationtest/compile_4/broken_symlink_test.go @@ -0,0 +1,54 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile_test + +import ( + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestCompileWithBrokenSymLinks(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + t.Cleanup(env.CleanUp) + + // Install Arduino AVR Boards + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + t.Run("NonSketchFileBroken", func(t *testing.T) { + sketch, err := paths.New("testdata", "ValidSketchWithBrokenSymlink").Abs() + require.NoError(t, err) + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + }) + + t.Run("SketchFileBroken", func(t *testing.T) { + sketch, err := paths.New("testdata", "ValidSketchWithBrokenSketchFileSymlink").Abs() + require.NoError(t, err) + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", sketch.String()) + require.Error(t, err) + }) + + t.Run("NonInoSketchFileBroken", func(t *testing.T) { + sketch, err := paths.New("testdata", "ValidSketchWithNonInoBrokenSketchFileSymlink").Abs() + require.NoError(t, err) + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", sketch.String()) + require.Error(t, err) + }) +} diff --git a/internal/integrationtest/compile_4/compile_test.go b/internal/integrationtest/compile_4/compile_test.go index a61d68563a5..a909cab3ab8 100644 --- a/internal/integrationtest/compile_4/compile_test.go +++ b/internal/integrationtest/compile_4/compile_test.go @@ -20,13 +20,14 @@ import ( "cmp" "encoding/json" "os/exec" + "regexp" "slices" "strings" "testing" "text/template" "time" - "github.com/arduino/arduino-cli/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" "github.com/arduino/arduino-cli/internal/integrationtest" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" @@ -844,7 +845,7 @@ func tryBuild(t *testing.T, env *integrationtest.Environment, cli *integrationte args := []string{ "compile", "-b", fqbn, - "--format", "json", + "--json", options.Sketch.String()} if !options.NoTestLibraries { libsPath, err := paths.New("testdata", "libraries").Abs() @@ -904,56 +905,75 @@ func comparePreprocessGoldenFile(t *testing.T, sketchDir *paths.Path, preprocess require.Equal(t, buf.String(), strings.ReplaceAll(preprocessedSketch, "\r\n", "\n")) } -func TestCoreCaching(t *testing.T) { +func TestBuildCaching(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() - sketchPath, err := paths.New("..", "testdata", "bare_minimum").Abs() - require.NoError(t, err) - // Install Arduino AVR Boards - _, _, err = cli.Run("core", "install", "arduino:avr@1.8.6") + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") require.NoError(t, err) - // Create temporary cache dir - buildCachePath, err := paths.MkTempDir("", "test_build_cache") - require.NoError(t, err) - defer buildCachePath.RemoveAll() + t.Run("CoreCaching", func(t *testing.T) { + sketchPath, err := paths.New("..", "testdata", "bare_minimum").Abs() + require.NoError(t, err) - // Build first time - _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) - require.NoError(t, err) + // Create temporary cache dir + buildCachePath, err := paths.MkTempDir("", "test_build_cache") + require.NoError(t, err) + defer buildCachePath.RemoveAll() - // Find cached core and save timestamp - pathList, err := buildCachePath.ReadDirRecursiveFiltered(nil, paths.FilterPrefixes("core.a")) - require.NoError(t, err) - require.Len(t, pathList, 1) - cachedCoreFile := pathList[0] - lastUsedPath := cachedCoreFile.Parent().Join(".last-used") - require.True(t, lastUsedPath.Exist()) - coreStatBefore, err := cachedCoreFile.Stat() - require.NoError(t, err) + // Build first time + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) + require.NoError(t, err) - // Run build again and check timestamp is unchanged - _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) - require.NoError(t, err) - coreStatAfterRebuild, err := cachedCoreFile.Stat() - require.NoError(t, err) - require.Equal(t, coreStatBefore.ModTime(), coreStatAfterRebuild.ModTime()) + // Find cached core and save timestamp + pathList, err := buildCachePath.ReadDirRecursiveFiltered(nil, paths.FilterPrefixes("core.a")) + require.NoError(t, err) + require.Len(t, pathList, 1) + cachedCoreFile := pathList[0] + lastUsedPath := cachedCoreFile.Parent().Join(".last-used") + require.True(t, lastUsedPath.Exist()) + coreStatBefore, err := cachedCoreFile.Stat() + require.NoError(t, err) - // Touch a file of the core and check if the builder invalidate the cache - time.Sleep(time.Second) - now := time.Now().Local() - coreFolder := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6") - err = coreFolder.Join("cores", "arduino", "Arduino.h").Chtimes(now, now) - require.NoError(t, err) + // Run build again and check timestamp is unchanged + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) + require.NoError(t, err) + coreStatAfterRebuild, err := cachedCoreFile.Stat() + require.NoError(t, err) + require.Equal(t, coreStatBefore.ModTime(), coreStatAfterRebuild.ModTime()) - // Run build again, to verify that the builder rebuilds core.a - _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) - require.NoError(t, err) - coreStatAfterTouch, err := cachedCoreFile.Stat() - require.NoError(t, err) - require.NotEqual(t, coreStatBefore.ModTime(), coreStatAfterTouch.ModTime()) + // Touch a file of the core and check if the builder invalidate the cache + time.Sleep(time.Second) + now := time.Now().Local() + coreFolder := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6") + err = coreFolder.Join("cores", "arduino", "Arduino.h").Chtimes(now, now) + require.NoError(t, err) + + // Run build again, to verify that the builder rebuilds core.a + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) + require.NoError(t, err) + coreStatAfterTouch, err := cachedCoreFile.Stat() + require.NoError(t, err) + require.NotEqual(t, coreStatBefore.ModTime(), coreStatAfterTouch.ModTime()) + }) + + t.Run("LibraryCacheWithDifferentDirname", func(t *testing.T) { + _, _, err = cli.Run("lib", "install", "Robot IR Remote") + require.NoError(t, err) + + // Run first compile + sketchPath, err := paths.New("testdata", "SketchUsingRobotIRRemote").Abs() + require.NoError(t, err) + _, _, err = cli.Run("compile", "-b", "arduino:avr:robotControl", "-v", sketchPath.String()) + require.NoError(t, err) + + // Run second compile and check that previous build is re-used + out, _, err := cli.Run("compile", "-b", "arduino:avr:robotControl", "-v", sketchPath.String()) + require.NoError(t, err) + check := regexp.MustCompile(`(?m)^Using previously compiled file:.*IRremoteTools\.cpp\.o$`) + require.True(t, check.Match(out)) + }) } func TestMergeSketchWithBootloader(t *testing.T) { @@ -1010,7 +1030,6 @@ func TestBuildOptionsFile(t *testing.T) { requirejson.Query(t, buildOptionsBytes, "keys", `[ "additionalFiles", - "builtInToolsFolders", "compiler.optimization_flags", "customBuildProperties", "fqbn", diff --git a/internal/integrationtest/compile_4/core_caching_test.go b/internal/integrationtest/compile_4/core_caching_test.go new file mode 100644 index 00000000000..582a2e29ec7 --- /dev/null +++ b/internal/integrationtest/compile_4/core_caching_test.go @@ -0,0 +1,124 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile_test + +import ( + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestBuildCacheCoreWithExtraDirs(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + t.Cleanup(env.CleanUp) + + // Install Arduino AVR Boards + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + // Main core cache + defaultCache := paths.TempDir().Join("arduino") + cache1, err := paths.MkTempDir("", "core_cache") + require.NoError(t, err) + t.Cleanup(func() { cache1.RemoveAll() }) + cache2, err := paths.MkTempDir("", "extra_core_cache") + require.NoError(t, err) + t.Cleanup(func() { cache2.RemoveAll() }) + + sketch, err := paths.New("testdata", "BareMinimum").Abs() + require.NoError(t, err) + + { + // Clean cache + require.NoError(t, defaultCache.RemoveAll()) + + // Compile sketch with empty cache + out, _, err := cli.Run("compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Archiving built core (caching) in: "+defaultCache.String()) + + // Check that the core cache is re-used + out, _, err = cli.Run("compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+defaultCache.String()) + } + + { + env := cli.GetDefaultEnv() + env["ARDUINO_BUILD_CACHE_PATH"] = cache1.String() + + // Compile sketch with empty cache user-defined core cache + out, _, err := cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Archiving built core (caching) in: "+cache1.String()) + + // Check that the core cache is re-used with user-defined core cache + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+cache1.String()) + + // Clean run should rebuild and save in user-defined core cache + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", "--clean", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Archiving built core (caching) in: "+cache1.String()) + } + + { + env := cli.GetDefaultEnv() + env["ARDUINO_BUILD_CACHE_EXTRA_PATHS"] = cache1.String() + + // Both extra and default cache are full, should use the default one + out, _, err := cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+defaultCache.String()) + + // Clean run, should rebuild and save in default cache + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", "--clean", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Archiving built core (caching) in: "+defaultCache.String()) + + // Clean default cache + require.NoError(t, defaultCache.RemoveAll()) + + // Now, extra is full and default is empty, should use extra + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+cache1.String()) + } + + { + env := cli.GetDefaultEnv() + env["ARDUINO_BUILD_CACHE_EXTRA_PATHS"] = cache1.String() // Populated + env["ARDUINO_BUILD_CACHE_PATH"] = cache2.String() // Empty + + // Extra cache is full, should use the cache1 (extra) + out, _, err := cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+cache1.String()) + + // Clean run, should rebuild and save in cache2 (user defined default cache) + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", "--clean", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Archiving built core (caching) in: "+cache2.String()) + + // Both caches are full, should use the cache2 (user defined default) + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+cache2.String()) + } +} diff --git a/internal/integrationtest/compile_4/testdata/BareMinimum/BareMinimum.ino b/internal/integrationtest/compile_4/testdata/BareMinimum/BareMinimum.ino new file mode 100644 index 00000000000..660bdbccfdb --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/BareMinimum/BareMinimum.ino @@ -0,0 +1,2 @@ +void setup() {} +void loop() {} diff --git a/mysketchbook/newsketch/newsketch.ino b/internal/integrationtest/compile_4/testdata/SketchUsingRobotIRRemote/SketchUsingRobotIRRemote.ino similarity index 56% rename from mysketchbook/newsketch/newsketch.ino rename to internal/integrationtest/compile_4/testdata/SketchUsingRobotIRRemote/SketchUsingRobotIRRemote.ino index 74f966a4e2f..4eedf4e2675 100644 --- a/mysketchbook/newsketch/newsketch.ino +++ b/internal/integrationtest/compile_4/testdata/SketchUsingRobotIRRemote/SketchUsingRobotIRRemote.ino @@ -1,3 +1,4 @@ +#include <RobotIRremote.h> void setup() { } diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/ValidSketchWithBrokenSketchFileSymlink.ino b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/ValidSketchWithBrokenSketchFileSymlink.ino new file mode 100644 index 00000000000..660bdbccfdb --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/ValidSketchWithBrokenSketchFileSymlink.ino @@ -0,0 +1,2 @@ +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/other_file.ino b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/other_file.ino new file mode 120000 index 00000000000..86a410dd1d3 --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/other_file.ino @@ -0,0 +1 @@ +broken \ No newline at end of file diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/ValidSketchWithBrokenSymlink.ino b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/ValidSketchWithBrokenSymlink.ino new file mode 100644 index 00000000000..660bdbccfdb --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/ValidSketchWithBrokenSymlink.ino @@ -0,0 +1,2 @@ +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/other_file b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/other_file new file mode 120000 index 00000000000..86a410dd1d3 --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/other_file @@ -0,0 +1 @@ +broken \ No newline at end of file diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/ValidSketchWithNonInoBrokenSketchFileSymlink.ino b/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/ValidSketchWithNonInoBrokenSketchFileSymlink.ino new file mode 100644 index 00000000000..660bdbccfdb --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/ValidSketchWithNonInoBrokenSketchFileSymlink.ino @@ -0,0 +1,2 @@ +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/other_file.c b/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/other_file.c new file mode 120000 index 00000000000..86a410dd1d3 --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/other_file.c @@ -0,0 +1 @@ +broken \ No newline at end of file diff --git a/internal/integrationtest/completion/completion_test.go b/internal/integrationtest/completion/completion_test.go index 75da997a357..678f2f0139e 100644 --- a/internal/integrationtest/completion/completion_test.go +++ b/internal/integrationtest/completion/completion_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" ) @@ -229,3 +230,30 @@ func TestCoreCompletion(t *testing.T) { stdout, _, _ = cli.Run("__complete", "upload", "-P", "") require.Contains(t, string(stdout), "atmel_ice") } + +func TestProfileCompletion(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Create test sketches + sketchWithProfilesPath, err := paths.New("testdata", "SketchWithProfiles").Abs() + require.NoError(t, err) + require.True(t, sketchWithProfilesPath.IsDir()) + + stdout, _, _ := cli.Run("__complete", "compile", sketchWithProfilesPath.String(), "--profile", "") + require.Contains(t, string(stdout), "profile1") + stdout, _, _ = cli.Run("__complete", "monitor", sketchWithProfilesPath.String(), "--profile", "") + require.Contains(t, string(stdout), "profile1") + stdout, _, _ = cli.Run("__complete", "upload", sketchWithProfilesPath.String(), "--profile", "") + require.Contains(t, string(stdout), "profile1") + + // The cli is running in the sketch folder, so need the explicitly specify the path in the cli + cli.SetWorkingDir(sketchWithProfilesPath) + stdout, _, _ = cli.Run("__complete", "compile", "--profile", "") + require.Contains(t, string(stdout), "profile1") + stdout, _, _ = cli.Run("__complete", "monitor", "--profile", "") + require.Contains(t, string(stdout), "profile1") + stdout, _, _ = cli.Run("__complete", "upload", "--profile", "") + require.Contains(t, string(stdout), "profile1") + +} diff --git a/internal/integrationtest/completion/testdata/SketchWithProfiles/SketchWithProfiles.ino b/internal/integrationtest/completion/testdata/SketchWithProfiles/SketchWithProfiles.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/completion/testdata/SketchWithProfiles/SketchWithProfiles.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/completion/testdata/SketchWithProfiles/sketch.yaml b/internal/integrationtest/completion/testdata/SketchWithProfiles/sketch.yaml new file mode 100644 index 00000000000..7143ea94b9a --- /dev/null +++ b/internal/integrationtest/completion/testdata/SketchWithProfiles/sketch.yaml @@ -0,0 +1,5 @@ +default_port: /dev/ttyDEF +default_fqbn: arduino:avr:yun +profiles: + profile1: + fqbn: "arduino:avr:uno" diff --git a/internal/integrationtest/config/config_test.go b/internal/integrationtest/config/config_test.go index e21d6db55dc..5ed5145dd62 100644 --- a/internal/integrationtest/config/config_test.go +++ b/internal/integrationtest/config/config_test.go @@ -16,9 +16,12 @@ package config_test import ( + "path/filepath" + "strings" "testing" "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" "go.bug.st/testifyjson/requirejson" "gopkg.in/yaml.v3" @@ -48,15 +51,6 @@ func TestInitWithExistingCustomConfig(t *testing.T) { err = yaml.Unmarshal(configFile, config) require.NoError(t, err) require.Equal(t, config["board_manager"]["additional_urls"].([]interface{})[0].(string), "https://example.com") - require.Equal(t, config["daemon"]["port"].(string), "50051") - require.Equal(t, config["directories"]["data"].(string), cli.DataDir().String()) - require.Equal(t, config["directories"]["downloads"].(string), cli.DownloadDir().String()) - require.Equal(t, config["directories"]["user"].(string), cli.SketchbookDir().String()) - require.Empty(t, config["logging"]["file"]) - require.Equal(t, config["logging"]["format"].(string), "text") - require.Equal(t, config["logging"]["level"].(string), "info") - require.Equal(t, config["metrics"]["addr"].(string), ":9090") - require.True(t, config["metrics"]["enabled"].(bool)) configFilePath := cli.WorkingDir().Join("config", "test", "config.yaml") require.NoFileExists(t, configFilePath.String()) @@ -69,15 +63,6 @@ func TestInitWithExistingCustomConfig(t *testing.T) { err = yaml.Unmarshal(configFile, config) require.NoError(t, err) require.Empty(t, config["board_manager"]["additional_urls"]) - require.Equal(t, config["daemon"]["port"].(string), "50051") - require.Equal(t, config["directories"]["data"].(string), cli.DataDir().String()) - require.Equal(t, config["directories"]["downloads"].(string), cli.DownloadDir().String()) - require.Equal(t, config["directories"]["user"].(string), cli.SketchbookDir().String()) - require.Empty(t, config["logging"]["file"]) - require.Equal(t, config["logging"]["format"].(string), "text") - require.Equal(t, config["logging"]["level"].(string), "info") - require.Equal(t, config["metrics"]["addr"].(string), ":9090") - require.True(t, config["metrics"]["enabled"].(bool)) } func TestInitOverwriteExistingCustomFile(t *testing.T) { @@ -94,15 +79,6 @@ func TestInitOverwriteExistingCustomFile(t *testing.T) { err = yaml.Unmarshal(configFile, config) require.NoError(t, err) require.Equal(t, config["board_manager"]["additional_urls"].([]interface{})[0].(string), "https://example.com") - require.Equal(t, config["daemon"]["port"].(string), "50051") - require.Equal(t, config["directories"]["data"].(string), cli.DataDir().String()) - require.Equal(t, config["directories"]["downloads"].(string), cli.DownloadDir().String()) - require.Equal(t, config["directories"]["user"].(string), cli.SketchbookDir().String()) - require.Empty(t, config["logging"]["file"]) - require.Equal(t, config["logging"]["format"].(string), "text") - require.Equal(t, config["logging"]["level"].(string), "info") - require.Equal(t, config["metrics"]["addr"].(string), ":9090") - require.True(t, config["metrics"]["enabled"].(bool)) stdout, _, err = cli.Run("config", "init", "--overwrite") require.NoError(t, err) @@ -113,15 +89,6 @@ func TestInitOverwriteExistingCustomFile(t *testing.T) { err = yaml.Unmarshal(configFile, config) require.NoError(t, err) require.Empty(t, config["board_manager"]["additional_urls"]) - require.Equal(t, config["daemon"]["port"].(string), "50051") - require.Equal(t, config["directories"]["data"].(string), cli.DataDir().String()) - require.Equal(t, config["directories"]["downloads"].(string), cli.DownloadDir().String()) - require.Equal(t, config["directories"]["user"].(string), cli.SketchbookDir().String()) - require.Empty(t, config["logging"]["file"]) - require.Equal(t, config["logging"]["format"].(string), "text") - require.Equal(t, config["logging"]["level"].(string), "info") - require.Equal(t, config["metrics"]["addr"].(string), ":9090") - require.True(t, config["metrics"]["enabled"].(bool)) } func TestInitDestAbsolutePath(t *testing.T) { @@ -237,9 +204,9 @@ func TestDump(t *testing.T) { require.NoError(t, err) require.FileExists(t, configFile.String()) - stdout, _, err := cli.Run("config", "dump", "--config-file", configFile.String(), "--format", "json") + stdout, _, err := cli.Run("config", "dump", "--config-file", configFile.String(), "--json") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") stdout, _, err = cli.Run("config", "init", "--additional-urls", "https://example.com") require.NoError(t, err) @@ -247,9 +214,9 @@ func TestDump(t *testing.T) { require.Contains(t, string(stdout), configFile.String()) require.FileExists(t, configFile.String()) - stdout, _, err = cli.Run("config", "dump", "--format", "json") + stdout, _, err = cli.Run("config", "dump", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com\"]") } func TestDumpWithConfigFileFlag(t *testing.T) { @@ -263,9 +230,9 @@ func TestDumpWithConfigFileFlag(t *testing.T) { require.NoError(t, err) require.FileExists(t, configFile.String()) - stdout, _, err := cli.Run("config", "dump", "--config-file", configFile.String(), "--format", "json") + stdout, _, err := cli.Run("config", "dump", "--config-file", configFile.String(), "--json") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com\"]") stdout, _, err = cli.Run( "config", @@ -273,11 +240,10 @@ func TestDumpWithConfigFileFlag(t *testing.T) { "--config-file", configFile.String(), "--additional-urls=https://another-url.com", - "--format", - "json", + "--json", ) require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://another-url.com\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://another-url.com\"]") } func TestAddRemoveSetDeleteOnUnexistingKey(t *testing.T) { @@ -288,21 +254,37 @@ func TestAddRemoveSetDeleteOnUnexistingKey(t *testing.T) { _, _, err := cli.Run("config", "init", "--dest-dir", ".") require.NoError(t, err) - _, stderr, err := cli.Run("config", "add", "some.key", "some_value", "--config-file", "arduino-cli.yaml") - require.Error(t, err) - require.Contains(t, string(stderr), "Settings key doesn't exist") + j, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Contains(t, j, `{"config":{ "board_manager": {"additional_urls":[]} } }`) - _, stderr, err = cli.Run("config", "remove", "some.key", "some_value", "--config-file", "arduino-cli.yaml") - require.Error(t, err) - require.Contains(t, string(stderr), "Settings key doesn't exist") + // Delete array key + _, _, err = cli.Run("config", "delete", "board_manager.additional_urls", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + j, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.NotContains(t, j, `{"config":{ "board_manager": {"additional_urls":[]} } }`) - _, stderr, err = cli.Run("config", "set", "some.key", "some_value", "--config-file", "arduino-cli.yaml") - require.Error(t, err) - require.Contains(t, string(stderr), "Settings key doesn't exist") + // Add to non-existing array key + _, _, err = cli.Run("config", "add", "board_manager.additional_urls", "some_value", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + j, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Contains(t, j, `{"config":{ "board_manager": {"additional_urls":["some_value"]} } }`) - _, stderr, err = cli.Run("config", "delete", "some.key", "--config-file", "arduino-cli.yaml") - require.Error(t, err) - require.Contains(t, string(stderr), "Cannot delete the key some.key: key not found in settings\n") + // Remove from non-existing array key + _, _, err = cli.Run("config", "remove", "board_manager.additional_urls", "some_value", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + j, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.NotContains(t, j, `{"config":{ "board_manager": {"additional_urls":["some_value"]} } }`) + + // Set on non-existing key + _, _, err = cli.Run("config", "set", "board_manager.additional_urls", "some_value", "other_value", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + j, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Contains(t, j, `{"config":{ "board_manager": {"additional_urls":["some_value","other_value"]} } }`) } func TestAddSingleArgument(t *testing.T) { @@ -314,9 +296,9 @@ func TestAddSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies no additional urls are present - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") // Adds one URL url := "https://example.com" @@ -324,9 +306,9 @@ func TestAddSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies URL has been saved - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com\"]") // Adds the same URL (should not error) _, _, err = cli.Run("config", "add", @@ -335,9 +317,9 @@ func TestAddSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies a second copy has NOT been added - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com\"]") } func TestAddMultipleArguments(t *testing.T) { @@ -349,9 +331,9 @@ func TestAddMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies no additional urls are present - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") // Adds multiple URLs at the same time urls := [3]string{ @@ -364,16 +346,18 @@ func TestAddMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies URL has been saved - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/package_example_index.json", - "https://example.com/yet_another_package_example_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/package_example_index.json", + "https://example.com/yet_another_package_example_index.json" + ] + } } }`) @@ -382,16 +366,18 @@ func TestAddMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies no change in result array - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/package_example_index.json", - "https://example.com/yet_another_package_example_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/package_example_index.json", + "https://example.com/yet_another_package_example_index.json" + ] + } } }`) @@ -405,17 +391,19 @@ func TestAddMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies URL has been saved - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "3") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "3") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/package_example_index.json", - "https://example.com/a_third_package_example_index.json", - "https://example.com/yet_another_package_example_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/package_example_index.json", + "https://example.com/a_third_package_example_index.json", + "https://example.com/yet_another_package_example_index.json" + ] + } } }`) } @@ -427,11 +415,13 @@ func TestAddOnUnsupportedKey(t *testing.T) { // Create a config file _, _, err := cli.Run("config", "init", "--dest-dir", ".") require.NoError(t, err) + _, _, err = cli.Run("config", "set", "daemon.port", "50051", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) // Verifies default value - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".daemon | .port", "\"50051\"") + requirejson.Query(t, stdout, ".config | .daemon | .port", "\"50051\"") // Tries and fails to add a new item _, stderr, err := cli.Run("config", "add", "daemon.port", "50000", "--config-file", "arduino-cli.yaml") @@ -439,9 +429,9 @@ func TestAddOnUnsupportedKey(t *testing.T) { require.Contains(t, string(stderr), "The key 'daemon.port' is not a list of items, can't add to it.\nMaybe use 'config set'?") // Verifies value is not changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".daemon | .port", "\"50051\"") + requirejson.Query(t, stdout, ".config | .daemon | .port", "\"50051\"") } func TestRemoveSingleArgument(t *testing.T) { @@ -461,16 +451,18 @@ func TestRemoveSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/package_example_index.json", - "https://example.com/yet_another_package_example_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/package_example_index.json", + "https://example.com/yet_another_package_example_index.json" + ] + } } }`) @@ -479,9 +471,9 @@ func TestRemoveSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies URLs has been removed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com/yet_another_package_example_index.json\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com/yet_another_package_example_index.json\"]") } func TestRemoveMultipleArguments(t *testing.T) { @@ -501,16 +493,18 @@ func TestRemoveMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/package_example_index.json", - "https://example.com/yet_another_package_example_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/package_example_index.json", + "https://example.com/yet_another_package_example_index.json" + ] + } } }`) @@ -519,9 +513,9 @@ func TestRemoveMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies all URLs have been removed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") } func TestRemoveOnUnsupportedKey(t *testing.T) { @@ -531,11 +525,13 @@ func TestRemoveOnUnsupportedKey(t *testing.T) { // Create a config file _, _, err := cli.Run("config", "init", "--dest-dir", ".") require.NoError(t, err) + _, _, err = cli.Run("config", "set", "daemon.port", "50051", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) // Verifies default value - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".daemon | .port", "\"50051\"") + requirejson.Query(t, stdout, ".config | .daemon | .port", "\"50051\"") // Tries and fails to remove an item _, stderr, err := cli.Run("config", "remove", "daemon.port", "50051", "--config-file", "arduino-cli.yaml") @@ -543,9 +539,9 @@ func TestRemoveOnUnsupportedKey(t *testing.T) { require.Contains(t, string(stderr), "The key 'daemon.port' is not a list of items, can't remove from it.\nMaybe use 'config delete'?") // Verifies value is not changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".daemon | .port", "\"50051\"") + requirejson.Query(t, stdout, ".config | .daemon | .port", "\"50051\"") } func TestSetSliceWithSingleArgument(t *testing.T) { @@ -557,9 +553,9 @@ func TestSetSliceWithSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") // Set an URL in the list url := "https://example.com/package_example_index.json" @@ -567,9 +563,9 @@ func TestSetSliceWithSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies value is changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com/package_example_index.json\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com/package_example_index.json\"]") // Set an URL in the list url = "https://example.com/yet_another_package_example_index.json" @@ -577,9 +573,9 @@ func TestSetSliceWithSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies value is changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com/yet_another_package_example_index.json\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com/yet_another_package_example_index.json\"]") } func TestSetSliceWithMultipleArguments(t *testing.T) { @@ -591,9 +587,9 @@ func TestSetSliceWithMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") // Set some URLs in the list urls := [7]string{ @@ -604,16 +600,18 @@ func TestSetSliceWithMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies value is changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/first_package_index.json", - "https://example.com/second_package_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/first_package_index.json", + "https://example.com/second_package_index.json" + ] + } } }`) @@ -626,16 +624,18 @@ func TestSetSliceWithMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies previous value is overwritten - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/third_package_index.json", - "https://example.com/fourth_package_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/third_package_index.json", + "https://example.com/fourth_package_index.json" + ] + } } }`) @@ -656,18 +656,20 @@ func TestSetSliceWithMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies all unique values exist in config - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "4") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "4") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/first_package_index.json", - "https://example.com/second_package_index.json", - "https://example.com/fifth_package_index.json", - "https://example.com/sixth_package_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/first_package_index.json", + "https://example.com/second_package_index.json", + "https://example.com/fifth_package_index.json", + "https://example.com/sixth_package_index.json" + ] + } } }`) } @@ -681,18 +683,18 @@ func TestSetStringWithSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".logging | .level", "\"info\"") + requirejson.NotContains(t, stdout, `{"config":{"logging":{"level"}}}`) // Changes value _, _, err = cli.Run("config", "set", "logging.level", "trace", "--config-file", "arduino-cli.yaml") require.NoError(t, err) // Verifies value is changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".logging | .level", "\"trace\"") + requirejson.Query(t, stdout, ".config | .logging | .level", "\"trace\"") } func TestSetStringWithMultipleArguments(t *testing.T) { @@ -704,14 +706,14 @@ func TestSetStringWithMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".logging | .level", "\"info\"") + requirejson.NotContains(t, stdout, `{"config":{"logging":{"level"}}}`) // Tries to change value _, stderr, err := cli.Run("config", "set", "logging.level", "trace", "debug") require.Error(t, err) - require.Contains(t, string(stderr), "Can't set multiple values in key logging.level") + require.Contains(t, string(stderr), "Error setting value: invalid type for key 'logging.level': invalid conversion, got array but want string") } func TestSetBoolWithSingleArgument(t *testing.T) { @@ -723,18 +725,18 @@ func TestSetBoolWithSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".library | .enable_unsafe_install", "false") + requirejson.NotContains(t, stdout, `{"config": {"library": {"enable_unsafe_install"}}}`) // Changes value _, _, err = cli.Run("config", "set", "library.enable_unsafe_install", "true", "--config-file", "arduino-cli.yaml") require.NoError(t, err) // Verifies value is changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".library | .enable_unsafe_install", "true") + requirejson.Query(t, stdout, ".config | .library | .enable_unsafe_install", "true") } func TestSetBoolWithMultipleArguments(t *testing.T) { @@ -744,16 +746,18 @@ func TestSetBoolWithMultipleArguments(t *testing.T) { // Create a config file _, _, err := cli.Run("config", "init", "--dest-dir", ".") require.NoError(t, err) + _, _, err = cli.Run("config", "set", "library.enable_unsafe_install", "false", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".library | .enable_unsafe_install", "false") + requirejson.Query(t, stdout, ".config | .library | .enable_unsafe_install", "false") // Changes value _, stderr, err := cli.Run("config", "set", "library.enable_unsafe_install", "true", "foo", "--config-file", "arduino-cli.yaml") require.Error(t, err) - require.Contains(t, string(stderr), "Can't set multiple values in key library.enable_unsafe_install") + require.Contains(t, string(stderr), "Error setting value: invalid type for key 'library.enable_unsafe_install': invalid conversion, got array but want bool") } func TestDelete(t *testing.T) { @@ -763,11 +767,13 @@ func TestDelete(t *testing.T) { // Create a config file _, _, err := cli.Run("config", "init", "--dest-dir", ".") require.NoError(t, err) + _, _, err = cli.Run("config", "set", "library.enable_unsafe_install", "false", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".library | .enable_unsafe_install", "false") + requirejson.Query(t, stdout, ".config | .library | .enable_unsafe_install", "false") // Delete config key _, _, err = cli.Run("config", "delete", "library.enable_unsafe_install", "--config-file", "arduino-cli.yaml") @@ -782,9 +788,9 @@ func TestDelete(t *testing.T) { require.NotContains(t, configLines, "enable_unsafe_install") // Verifies default state - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") // Delete config key and sub keys _, _, err = cli.Run("config", "delete", "board_manager", "--config-file", "arduino-cli.yaml") @@ -799,3 +805,100 @@ func TestDelete(t *testing.T) { require.NotContains(t, configLines, "additional_urls") require.NotContains(t, configLines, "board_manager") } + +func TestGet(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Create a config file + _, _, err := cli.Run("config", "init", "--dest-dir", ".") + require.NoError(t, err) + _, _, err = cli.Run("config", "set", "daemon.port", "50051", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + + // Verifies default state + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Query(t, stdout, ".config | .daemon | .port", `"50051"`) + + // Get simple key value + stdout, _, err = cli.Run("config", "get", "daemon.port", "--json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Contains(t, stdout, `"50051"`) + + // Get structured key value + stdout, _, err = cli.Run("config", "get", "daemon", "--json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Contains(t, stdout, `{"port":"50051"}`) + + // Get undefined key + _, stderr, err := cli.Run("config", "get", "foo", "--json", "--config-file", "arduino-cli.yaml") + require.Error(t, err) + requirejson.Contains(t, stderr, `{"error":"Cannot get the configuration key foo: key foo not found"}`) +} + +func TestInitializationOrderOfConfigThroughFlagAndEnv(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + tmp := t.TempDir() + cliConfig := paths.New(filepath.Join(tmp, "cli.yaml")) + cliConfig.WriteFile([]byte(`locale: "test"`)) + envConfig := paths.New(filepath.Join(tmp, "env.yaml")) + envConfig.WriteFile([]byte(`locale: "test2"`)) + + // No flag nor env specified. + stdout, _, err := cli.Run("config", "dump", "--json") + require.NoError(t, err) + requirejson.NotEmpty(t, stdout) + + // Flag specified + stdout, _, err = cli.Run("config", "dump", "--config-file", cliConfig.String(), "--json") + require.NoError(t, err) + requirejson.Contains(t, stdout, `{"config":{ "locale": "test" }}`) + + // Env specified + customEnv := map[string]string{"ARDUINO_CONFIG_FILE": envConfig.String()} + stdout, _, err = cli.RunWithCustomEnv(customEnv, "config", "dump", "--json") + require.NoError(t, err) + requirejson.Contains(t, stdout, `{"config":{ "locale": "test2" }}`) + + // Flag and env specified, flag takes precedence + stdout, _, err = cli.RunWithCustomEnv(customEnv, "config", "dump", "--config-file", cliConfig.String(), "--json") + require.NoError(t, err) + requirejson.Contains(t, stdout, `{"config":{ "locale": "test" }}`) +} + +func TestConfigLoadWithUnknownOrInvalidKeys(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + tmp := t.TempDir() + unkwnownConfig := paths.New(filepath.Join(tmp, "unknown.yaml")) + unkwnownConfig.WriteFile([]byte(` +unk: "test" +build.unk: 123 +`)) + t.Cleanup(func() { unkwnownConfig.Remove() }) + + // Run "config get" with a configuration containing an unknown key + out, _, err := cli.Run("config", "get", "locale", "--config-file", unkwnownConfig.String()) + require.NoError(t, err) + require.Equal(t, "en", strings.TrimSpace(string(out))) + + // Run "config get" with a configuration containing an invalid key + invalidConfig := paths.New(filepath.Join(tmp, "invalid.yaml")) + invalidConfig.WriteFile([]byte(`locale: 123`)) + t.Cleanup(func() { invalidConfig.Remove() }) + out, _, err = cli.Run("config", "get", "locale", "--config-file", invalidConfig.String()) + require.NoError(t, err) + require.Equal(t, "en", strings.TrimSpace(string(out))) + + // Run "config get" with a configuration containing a null array + nullArrayConfig := paths.New(filepath.Join(tmp, "null_array.yaml")) + nullArrayConfig.WriteFile([]byte(`board_manager.additional_urls:`)) + t.Cleanup(func() { nullArrayConfig.Remove() }) + out, _, err = cli.Run("config", "get", "locale", "--config-file", invalidConfig.String()) + require.NoError(t, err) + require.Equal(t, "en", strings.TrimSpace(string(out))) +} diff --git a/internal/integrationtest/core/core_test.go b/internal/integrationtest/core/core_test.go index 89e8ecc2a87..fbda8da1c0c 100644 --- a/internal/integrationtest/core/core_test.go +++ b/internal/integrationtest/core/core_test.go @@ -20,6 +20,7 @@ import ( "encoding/hex" "fmt" "os" + "path/filepath" "runtime" "sort" "strconv" @@ -46,9 +47,21 @@ func TestCorrectHandlingOfPlatformVersionProperty(t *testing.T) { require.NoError(t, testPlatform.CopyDirTo(cli.SketchbookDir().Join("hardware", "DxCore-dev"))) // Trigger problematic call - out, _, err := cli.Run("core", "list", "--format", "json") - require.NoError(t, err) - requirejson.Contains(t, out, `[{"id":"DxCore-dev:megaavr","installed":"1.4.10","name":"DxCore"}]`) + out, _, err := cli.Run("core", "list", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ + "platforms": [ + { + "id":"DxCore-dev:megaavr", + "installed_version":"1.4.10", + "releases": { + "1.4.10": { + "name":"DxCore" + } + } + } + ] + }`) } func TestCoreSearch(t *testing.T) { @@ -70,58 +83,58 @@ func TestCoreSearch(t *testing.T) { _, _, err = cli.Run("core", "install", "arduino:avr@1.8.6") require.NoError(t, err) - out, _, err = cli.Run("core", "search", "avr", "--format", "json") + out, _, err = cli.Run("core", "search", "avr", "--json") require.NoError(t, err) requirejson.NotEmpty(t, out) - // Verify that "installed" is set - requirejson.Contains(t, out, `[{installed: "1.8.6"}]`) + // Verify that "installed_version" is set + requirejson.Contains(t, out, `{"platforms":[{installed_version: "1.8.6"}]}`) // additional URL - out, _, err = cli.Run("core", "search", "test_core", "--format", "json", "--additional-urls="+url.String()) + out, _, err = cli.Run("core", "search", "test_core", "--json", "--additional-urls="+url.String()) require.NoError(t, err) - requirejson.Len(t, out, 1) + requirejson.Query(t, out, `.platforms | length`, `1`) // show all versions - out, _, err = cli.Run("core", "search", "test_core", "--all", "--format", "json", "--additional-urls="+url.String()) + out, _, err = cli.Run("core", "search", "test_core", "--all", "--json", "--additional-urls="+url.String()) require.NoError(t, err) - requirejson.Len(t, out, 3) + requirejson.Query(t, out, `.platforms.[].releases | length`, "3") checkPlatformIsInJSONOutput := func(stdout []byte, id, version string) { - jqquery := fmt.Sprintf(`[{id:"%s", latest:"%s"}]`, id, version) - requirejson.Contains(t, out, jqquery, "platform %s@%s is missing from the output", id, version) + jqquery := fmt.Sprintf(`{"platforms":[{id:"%s", releases:{"%s":{}}}]}`, id, version) + requirejson.Contains(t, stdout, jqquery, "platform %s@%s is missing from the output", id, version) } // Search all Retrokit platforms - out, _, err = cli.Run("core", "search", "retrokit", "--all", "--additional-urls="+url.String(), "--format", "json") + out, _, err = cli.Run("core", "search", "retrokit", "--all", "--additional-urls="+url.String(), "--json") require.NoError(t, err) checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.5") checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.6") // Search using Retrokit Package Maintainer - out, _, err = cli.Run("core", "search", "Retrokits-RK002", "--all", "--additional-urls="+url.String(), "--format", "json") + out, _, err = cli.Run("core", "search", "Retrokits-RK002", "--all", "--additional-urls="+url.String(), "--json") require.NoError(t, err) checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.5") checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.6") // Search using the Retrokit Platform name - out, _, err = cli.Run("core", "search", "rk002", "--all", "--additional-urls="+url.String(), "--format", "json") + out, _, err = cli.Run("core", "search", "rk002", "--all", "--additional-urls="+url.String(), "--json") require.NoError(t, err) checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.5") checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.6") // Search using board names - out, _, err = cli.Run("core", "search", "myboard", "--all", "--additional-urls="+url.String(), "--format", "json") + out, _, err = cli.Run("core", "search", "myboard", "--all", "--additional-urls="+url.String(), "--json") require.NoError(t, err) checkPlatformIsInJSONOutput(out, "Package:x86", "1.2.3") runSearch := func(searchArgs string, expectedIDs ...string) { - args := []string{"core", "search", "--format", "json"} + args := []string{"core", "search", "--json"} args = append(args, strings.Split(searchArgs, " ")...) out, _, err := cli.Run(args...) require.NoError(t, err) for _, id := range expectedIDs { - jqquery := fmt.Sprintf(`[{id:"%s"}]`, id) + jqquery := fmt.Sprintf(`{"platforms":[{id:"%s"}]}`, id) requirejson.Contains(t, out, jqquery, "platform %s is missing from the output", id) } } @@ -168,11 +181,11 @@ func TestCoreSearchNoArgs(t *testing.T) { require.Contains(t, lines, []string{"test:x86", "2.0.0", "test_core"}) numPlatforms := len(lines) - 1 - // same thing in JSON format, also check the number of platforms found is the same - stdout, _, err = cli.Run("core", "search", "--format", "json") + // Same thing in JSON format, also check the number of platforms found is the same + stdout, _, err = cli.Run("core", "search", "--json") require.NoError(t, err) - requirejson.Contains(t, stdout, `[ { "name":"test_core" } ]`) - requirejson.Query(t, stdout, "length", fmt.Sprint(numPlatforms)) + requirejson.Contains(t, stdout, `{"platforms":[{"id": "test:x86", "releases": { "2.0.0": {"name":"test_core"}}}]}`) + requirejson.Query(t, stdout, ".platforms | length", fmt.Sprint(numPlatforms)) // list all with additional urls, check the test core is there stdout, _, err = cli.Run("core", "search", "--additional-urls="+url.String()) @@ -181,15 +194,28 @@ func TestCoreSearchNoArgs(t *testing.T) { for _, v := range strings.Split(strings.TrimSpace(string(stdout)), "\n") { lines = append(lines, strings.Fields(strings.TrimSpace(v))) } - // Check the presence of test:x86@3.0.0 - require.Contains(t, lines, []string{"test:x86", "3.0.0", "test_core"}) + // Check the absence of test:x86@3.0.0 because it contains incompatible deps. The latest available should be the 2.0.0 + require.NotContains(t, lines, []string{"test:x86", "3.0.0", "test_core"}) + require.Contains(t, lines, []string{"test:x86", "2.0.0", "test_core"}) numPlatforms = len(lines) - 1 // same thing in JSON format, also check the number of platforms found is the same - stdout, _, err = cli.Run("core", "search", "--format", "json", "--additional-urls="+url.String()) - require.NoError(t, err) - requirejson.Contains(t, stdout, `[ { "name":"test_core" } ]`) - requirejson.Query(t, stdout, "length", fmt.Sprint(numPlatforms)) + stdout, _, err = cli.Run("core", "search", "--json", "--additional-urls="+url.String()) + require.NoError(t, err) + requirejson.Contains(t, stdout, `{ + "platforms": [ + { + "id": "test:x86", + "installed_version": "2.0.0", + "latest_version": "2.0.0", + "releases": { + "1.0.0": {"name":"test_core", "compatible": true}, + "2.0.0": {"name":"test_core", "compatible": true}, + "3.0.0": {"name":"test_core", "compatible": false} + } + } + ]}`) + requirejson.Query(t, stdout, `.platforms | length`, fmt.Sprint(numPlatforms)) } func TestCoreUpdateIndexUrlNotFound(t *testing.T) { @@ -301,9 +327,9 @@ func TestCoreInstall(t *testing.T) { // Install a specific core version _, _, err = cli.Run("core", "install", "arduino:avr@1.6.16") require.NoError(t, err) - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, `.[] | select(.id == "arduino:avr") | .installed`, `"1.6.16"`) + requirejson.Query(t, stdout, `.platforms.[] | select(.id == "arduino:avr") | .installed_version`, `"1.6.16"`) // Replace it with the same with --no-overwrite (should NOT fail) _, _, err = cli.Run("core", "install", "arduino:avr@1.6.16", "--no-overwrite") @@ -316,29 +342,29 @@ func TestCoreInstall(t *testing.T) { // Replace it with a more recent one without --no-overwrite (should succeed) _, _, err = cli.Run("core", "install", "arduino:avr@1.6.17") require.NoError(t, err) - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, `.[] | select(.id == "arduino:avr") | .installed`, `"1.6.17"`) + requirejson.Query(t, stdout, `.platforms.[] | select(.id == "arduino:avr") | .installed_version`, `"1.6.17"`) // Confirm core is listed as "updatable" - stdout, _, err = cli.Run("core", "list", "--updatable", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--updatable", "--json") require.NoError(t, err) jsonout := requirejson.Parse(t, stdout) - q := jsonout.Query(`.[] | select(.id == "arduino:avr")`) - q.Query(".installed").MustEqual(`"1.6.17"`) - latest := q.Query(".latest") + q := jsonout.Query(`.platforms.[] | select(.id == "arduino:avr")`) + q.Query(".installed_version").MustEqual(`"1.6.17"`) + latest := q.Query(".latest_version") // Upgrade the core to latest version _, _, err = cli.Run("core", "upgrade", "arduino:avr") require.NoError(t, err) - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, `.[] | select(.id == "arduino:avr") | .installed`, latest.String()) + requirejson.Query(t, stdout, `.platforms.[] | select(.id == "arduino:avr") | .installed_version`, latest.String()) // double check the core isn't updatable anymore - stdout, _, err = cli.Run("core", "list", "--updatable", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--updatable", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.platforms | length`, `0`) } func TestCoreUninstall(t *testing.T) { @@ -349,14 +375,14 @@ func TestCoreUninstall(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("core", "install", "arduino:avr") require.NoError(t, err) - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Contains(t, stdout, `[ { "id": "arduino:avr" } ]`) + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "arduino:avr" } ]}`) _, _, err = cli.Run("core", "uninstall", "arduino:avr") require.NoError(t, err) - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.platforms | length`, `0`) } func TestCoreUninstallToolDependencyRemoval(t *testing.T) { @@ -419,9 +445,9 @@ func TestCoreUpdateWithLocalUrl(t *testing.T) { testIndex = "/" + strings.ReplaceAll(testIndex, "\\", "/") } - stdout, _, err := cli.Run("core", "update-index", "--additional-urls=file://"+testIndex) + stdout, _, err := cli.Run("core", "update-index", "--additional-urls=file://"+testIndex, "--json") require.NoError(t, err) - require.Contains(t, string(stdout), "Downloading index: test_index.json downloaded") + requirejson.Parse(t, stdout).MustContain(`{"updated_indexes":[{"index_url":"file://` + testIndex + `","status":"skipped"}]}`) } func TestCoreSearchManuallyInstalledCoresNotPrinted(t *testing.T) { @@ -432,9 +458,9 @@ func TestCoreSearchManuallyInstalledCoresNotPrinted(t *testing.T) { require.NoError(t, err) // Verifies only cores in board manager are shown - stdout, _, err := cli.Run("core", "search", "--format", "json") + stdout, _, err := cli.Run("core", "search", "--json") require.NoError(t, err) - requirejson.NotEmpty(t, stdout) + requirejson.Query(t, stdout, `.platforms | length > 0`, `true`) oldJson := stdout // Manually installs a core in sketchbooks hardware folder @@ -447,9 +473,9 @@ func TestCoreSearchManuallyInstalledCoresNotPrinted(t *testing.T) { require.NoError(t, err) // Verifies manually installed core is not shown - stdout, _, err = cli.Run("core", "search", "--format", "json") + stdout, _, err = cli.Run("core", "search", "--json") require.NoError(t, err) - requirejson.NotContains(t, stdout, `[{"id": "arduino-beta-development:avr"}]`) + requirejson.NotContains(t, stdout, `{"platforms":[{"id": "arduino-beta-development:avr"}]}`) require.Equal(t, oldJson, stdout) } @@ -461,10 +487,10 @@ func TestCoreListAllManuallyInstalledCore(t *testing.T) { require.NoError(t, err) // Verifies only cores in board manager are shown - stdout, _, err := cli.Run("core", "list", "--all", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--all", "--json") require.NoError(t, err) - requirejson.NotEmpty(t, stdout) - length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query("length").String()) + requirejson.Query(t, stdout, `.platforms | length > 0`, `true`) + length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query(".platforms | length").String()) require.NoError(t, err) // Manually installs a core in sketchbooks hardware folder @@ -477,16 +503,74 @@ func TestCoreListAllManuallyInstalledCore(t *testing.T) { require.NoError(t, err) // Verifies manually installed core is shown - stdout, _, err = cli.Run("core", "list", "--all", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--all", "--json") + require.NoError(t, err) + requirejson.Query(t, stdout, `.platforms | length`, fmt.Sprint(length+1)) + requirejson.Contains(t, stdout, `{"platforms":[ + { + "id": "arduino-beta-development:avr", + "latest_version": "1.8.3", + "releases": { + "1.8.3": { + "name": "Arduino AVR Boards" + } + } + } + ]}`) +} + +func TestCoreListShowsLatestVersionWhenMultipleReleasesOfAManuallyInstalledCoreArePresent(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + // Verifies only cores in board manager are shown + stdout, _, err := cli.Run("core", "list", "--all", "--json") + require.NoError(t, err) + requirejson.Query(t, stdout, `.platforms | length > 0`, `true`) + length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query(".platforms | length").String()) + require.NoError(t, err) + + // Manually installs a core in sketchbooks hardware folder + gitUrl := "https://github.com/arduino/ArduinoCore-avr.git" + repoDir := cli.SketchbookDir().Join("hardware", "arduino-beta-development", "avr") + _, err = git.PlainClone(filepath.Join(repoDir.String(), "1.8.3"), false, &git.CloneOptions{ + URL: gitUrl, + ReferenceName: plumbing.NewTagReferenceName("1.8.3"), + }) + require.NoError(t, err) + + tmp := paths.New(t.TempDir(), "1.8.4") + _, err = git.PlainClone(tmp.String(), false, &git.CloneOptions{ + URL: gitUrl, + ReferenceName: plumbing.NewTagReferenceName("1.8.4"), + }) + require.NoError(t, err) + + err = tmp.Rename(repoDir.Join("1.8.4")) require.NoError(t, err) - requirejson.Len(t, stdout, length+1) - requirejson.Contains(t, stdout, `[ + + // When manually installing 2 releases of the same core, the newest one takes precedence + stdout, _, err = cli.Run("core", "list", "--all", "--json") + require.NoError(t, err) + requirejson.Query(t, stdout, `.platforms | length`, fmt.Sprint(length+1)) + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "arduino-beta-development:avr", - "latest": "1.8.3", - "name": "Arduino AVR Boards" + "latest_version": "1.8.4", + "installed_version": "1.8.4", + "releases": { + "1.8.3": { + "name": "Arduino AVR Boards" + }, + "1.8.3": { + "name": "Arduino AVR Boards" + } } - ]`) + } + ]}`) } func TestCoreListUpdatableAllFlags(t *testing.T) { @@ -497,10 +581,10 @@ func TestCoreListUpdatableAllFlags(t *testing.T) { require.NoError(t, err) // Verifies only cores in board manager are shown - stdout, _, err := cli.Run("core", "list", "--all", "--updatable", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--all", "--updatable", "--json") require.NoError(t, err) - requirejson.NotEmpty(t, stdout) - length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query("length").String()) + requirejson.Query(t, stdout, `.platforms | length > 0`, `true`) + length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query(".platforms | length").String()) require.NoError(t, err) // Manually installs a core in sketchbooks hardware folder @@ -513,16 +597,20 @@ func TestCoreListUpdatableAllFlags(t *testing.T) { require.NoError(t, err) // Verifies using both --updatable and --all flags --all takes precedence - stdout, _, err = cli.Run("core", "list", "--all", "--updatable", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--all", "--updatable", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, length+1) - requirejson.Contains(t, stdout, `[ + requirejson.Query(t, stdout, `.platforms | length`, fmt.Sprint(length+1)) + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "arduino-beta-development:avr", - "latest": "1.8.3", - "name": "Arduino AVR Boards" + "latest_version": "1.8.3", + "releases": { + "1.8.3": { + "name": "Arduino AVR Boards" + } } - ]`) + } + ]}`) } func TestCoreUpgradeRemovesUnusedTools(t *testing.T) { @@ -586,15 +674,19 @@ func TestCoreListWithInstalledJson(t *testing.T) { require.NoError(t, err) // Verifies installed core is correctly found and name is set - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Contains(t, stdout, `[ + requirejson.Query(t, stdout, `.platforms | length`, `1`) + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "adafruit:avr", - "name": "Adafruit AVR Boards" + "releases": { + "1.4.13": { + "name": "Adafruit AVR Boards" + } + } } - ]`) + ]}`) // Deletes installed.json file, this file stores information about the core, // that is used mostly when removing package indexes and their cores are still installed; @@ -605,18 +697,22 @@ func TestCoreListWithInstalledJson(t *testing.T) { require.NoError(t, installedJson.Remove()) // Verifies installed core is still found and name is set - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.platforms | length`, `1`) // Name for this core changes since if there's installed.json file we read it from // platform.txt, turns out that this core has different names used in different files // thus the change. - requirejson.Contains(t, stdout, `[ + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "adafruit:avr", - "name": "Adafruit Boards" + "releases": { + "1.4.13": { + "name": "Adafruit Boards" + } + } } - ]`) + ]}`) } func TestCoreSearchUpdateIndexDelay(t *testing.T) { @@ -677,42 +773,42 @@ func TestCoreSearchSortedResults(t *testing.T) { for _, v := range lines { if strings.HasPrefix(v[2], "[DEPRECATED]") { deprecated = append(deprecated, v) - } else { - notDeprecated = append(notDeprecated, v) + continue } + notDeprecated = append(notDeprecated, v) } // verify that results are already sorted correctly require.True(t, sort.SliceIsSorted(deprecated, func(i, j int) bool { - return strings.ToLower(deprecated[i][2]) < strings.ToLower(deprecated[j][2]) + return strings.ToLower(deprecated[i][0]) < strings.ToLower(deprecated[j][0]) })) require.True(t, sort.SliceIsSorted(notDeprecated, func(i, j int) bool { - return strings.ToLower(notDeprecated[i][2]) < strings.ToLower(notDeprecated[j][2]) + return strings.ToLower(notDeprecated[i][0]) < strings.ToLower(notDeprecated[j][0]) })) // verify that deprecated platforms are the last ones require.Equal(t, lines, append(notDeprecated, deprecated...)) // test same behaviour with json output - stdout, _, err = cli.Run("core", "search", "--additional-urls="+url.String(), "--format=json") + stdout, _, err = cli.Run("core", "search", "--additional-urls="+url.String(), "--json") require.NoError(t, err) // verify that results are already sorted correctly sortedDeprecated := requirejson.Parse(t, stdout).Query( - "[ .[] | select(.deprecated == true) | .name |=ascii_downcase | .name ] | sort").String() + "[ .platforms.[] | select(.deprecated == true) | .id |=ascii_downcase | .id] | sort").String() notSortedDeprecated := requirejson.Parse(t, stdout).Query( - "[.[] | select(.deprecated == true) | .name |=ascii_downcase | .name]").String() + "[ .platforms.[] | select(.deprecated == true) | .id |=ascii_downcase | .id]").String() require.Equal(t, sortedDeprecated, notSortedDeprecated) sortedNotDeprecated := requirejson.Parse(t, stdout).Query( - "[ .[] | select(.deprecated != true) | .name |=ascii_downcase | .name ] | sort").String() + "[ .platforms.[] | select(.deprecated != true) | .id |=ascii_downcase | .id] | sort").String() notSortedNotDeprecated := requirejson.Parse(t, stdout).Query( - "[.[] | select(.deprecated != true) | .name |=ascii_downcase | .name]").String() + "[ .platforms.[] | select(.deprecated != true) | .id |=ascii_downcase | .id]").String() require.Equal(t, sortedNotDeprecated, notSortedNotDeprecated) // verify that deprecated platforms are the last ones platform := requirejson.Parse(t, stdout).Query( - "[.[] | .name |=ascii_downcase | .name]").String() + "[ .platforms.[] | .id |=ascii_downcase | .id]").String() require.Equal(t, platform, strings.TrimRight(notSortedNotDeprecated, "]")+","+strings.TrimLeft(notSortedDeprecated, "[")) } @@ -755,36 +851,35 @@ func TestCoreListSortedResults(t *testing.T) { // verify that results are already sorted correctly require.True(t, sort.SliceIsSorted(deprecated, func(i, j int) bool { - return strings.ToLower(deprecated[i][3]) < strings.ToLower(deprecated[j][3]) + return strings.ToLower(deprecated[i][0]) < strings.ToLower(deprecated[j][0]) })) require.True(t, sort.SliceIsSorted(notDeprecated, func(i, j int) bool { - return strings.ToLower(notDeprecated[i][3]) < strings.ToLower(notDeprecated[j][3]) + return strings.ToLower(notDeprecated[i][0]) < strings.ToLower(notDeprecated[j][0]) })) // verify that deprecated platforms are the last ones require.Equal(t, lines, append(notDeprecated, deprecated...)) // test same behaviour with json output - stdout, _, err = cli.Run("core", "list", "--additional-urls="+url.String(), "--format=json") + stdout, _, err = cli.Run("core", "list", "--additional-urls="+url.String(), "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 3) + requirejson.Query(t, stdout, `.platforms | length`, `3`) // verify that results are already sorted correctly sortedDeprecated := requirejson.Parse(t, stdout).Query( - "[ .[] | select(.deprecated == true) | .name |=ascii_downcase | .name ] | sort").String() + "[ .platforms.[] | select(.deprecated == true) | .id |=ascii_downcase | .id] | sort").String() notSortedDeprecated := requirejson.Parse(t, stdout).Query( - "[.[] | select(.deprecated == true) | .name |=ascii_downcase | .name]").String() + "[ .platforms.[] | select(.deprecated == true) | .id |=ascii_downcase | .id]").String() require.Equal(t, sortedDeprecated, notSortedDeprecated) sortedNotDeprecated := requirejson.Parse(t, stdout).Query( - "[ .[] | select(.deprecated != true) | .name |=ascii_downcase | .name ] | sort").String() + "[ .platforms.[] | select(.deprecated != true) | .id |=ascii_downcase | .id] | sort").String() notSortedNotDeprecated := requirejson.Parse(t, stdout).Query( - "[.[] | select(.deprecated != true) | .name |=ascii_downcase | .name]").String() + "[ .platforms.[] | select(.deprecated != true) | .id |=ascii_downcase | .id]").String() require.Equal(t, sortedNotDeprecated, notSortedNotDeprecated) // verify that deprecated platforms are the last ones - platform := requirejson.Parse(t, stdout).Query( - "[.[] | .name |=ascii_downcase | .name]").String() + platform := requirejson.Parse(t, stdout).Query("[ .platforms.[] | .id |=ascii_downcase | .id]").String() require.Equal(t, platform, strings.TrimRight(notSortedNotDeprecated, "]")+","+strings.TrimLeft(notSortedDeprecated, "[")) } @@ -813,11 +908,11 @@ func TestCoreListDeprecatedPlatformWithInstalledJson(t *testing.T) { require.NoError(t, installedJsonFile.WriteFile([]byte(updatedInstalledJsonData))) // test same behaviour with json output - stdout, _, err := cli.Run("core", "list", "--additional-urls="+url.String(), "--format=json") + stdout, _, err := cli.Run("core", "list", "--additional-urls="+url.String(), "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[] | .deprecated", "true") + requirejson.Query(t, stdout, `.platforms | length`, `1`) + requirejson.Query(t, stdout, ".platforms.[] | .deprecated", "true") } func TestCoreListPlatformWithoutPlatformTxt(t *testing.T) { @@ -827,9 +922,9 @@ func TestCoreListPlatformWithoutPlatformTxt(t *testing.T) { _, _, err := cli.Run("update") require.NoError(t, err) - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 0) + requirejson.Query(t, stdout, `.platforms | length`, `0`) // Simulates creation of a new core in the sketchbook hardware folder // without a platforms.txt @@ -839,11 +934,11 @@ func TestCoreListPlatformWithoutPlatformTxt(t *testing.T) { require.NoError(t, testBoardsTxt.CopyTo(boardsTxt)) // Verifies no core is installed - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[] | .id", "\"some-packager:some-arch\"") - requirejson.Query(t, stdout, ".[] | .name", "\"some-packager-some-arch\"") + requirejson.Query(t, stdout, `.platforms | length`, `1`) + requirejson.Query(t, stdout, ".platforms.[] | .id", `"some-packager:some-arch"`) + requirejson.Query(t, stdout, ".platforms.[] | .releases[.installed_version].name", `"some-packager-some-arch"`) } func TestCoreDownloadMultiplePlatforms(t *testing.T) { @@ -859,9 +954,9 @@ func TestCoreDownloadMultiplePlatforms(t *testing.T) { require.NoError(t, err) // Verifies no core is installed - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 0) + requirejson.Query(t, stdout, `.platforms | length`, `0`) // Simulates creation of two new cores in the sketchbook hardware folder wd, _ := paths.Getwd() @@ -875,9 +970,9 @@ func TestCoreDownloadMultiplePlatforms(t *testing.T) { require.NoError(t, testBoardsTxt.CopyTo(boardsTxt1)) // Verifies the two cores are detected - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 2) + requirejson.Query(t, stdout, `.platforms | length`, `2`) // Try to do an operation on the fake cores. // The cli should not allow it since optimizing the casing results in finding two cores @@ -899,31 +994,31 @@ func TestCoreWithMissingCustomBoardOptionsIsLoaded(t *testing.T) { _, _, err := cli.Run("update") require.NoError(t, err) - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.platforms | length`, `1`) // Verifies platform is loaded except excluding board with missing options - requirejson.Contains(t, stdout, `[ - { - "id": "arduino-beta-dev:platform_with_missing_custom_board_options" - } - ]`) - requirejson.Query(t, stdout, ".[] | select(.id == \"arduino-beta-dev:platform_with_missing_custom_board_options\") | .boards | length", "2") + requirejson.Contains(t, stdout, `{"platforms":[{"id": "arduino-beta-dev:platform_with_missing_custom_board_options"}]}`) + requirejson.Query(t, stdout, ".platforms.[] | select(.id == \"arduino-beta-dev:platform_with_missing_custom_board_options\") | .releases[.installed_version].boards | length", "2") // Verify board with malformed options is not loaded // while other board is loaded - requirejson.Contains(t, stdout, `[ + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "arduino-beta-dev:platform_with_missing_custom_board_options", - "boards": [ - { - "fqbn": "arduino-beta-dev:platform_with_missing_custom_board_options:nessuno" - }, - { - "fqbn": "arduino-beta-dev:platform_with_missing_custom_board_options:altra" + "releases": { + "4.2.0": { + "boards": [ + { + "fqbn": "arduino-beta-dev:platform_with_missing_custom_board_options:nessuno" + }, + { + "fqbn": "arduino-beta-dev:platform_with_missing_custom_board_options:altra" + } + ] } - ] + } } - ]`) + ]}`) } func TestCoreListOutdatedCore(t *testing.T) { @@ -937,13 +1032,13 @@ func TestCoreListOutdatedCore(t *testing.T) { _, _, err = cli.Run("core", "install", "arduino:samd@1.8.6") require.NoError(t, err) - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[0] | .installed", "\"1.8.6\"") - installedVersion, err := semver.Parse(strings.Trim(requirejson.Parse(t, stdout).Query(".[0] | .installed").String(), "\"")) + requirejson.Query(t, stdout, `.platforms | length`, `1`) + requirejson.Query(t, stdout, ".platforms.[0] | .installed_version", "\"1.8.6\"") + installedVersion, err := semver.Parse(strings.Trim(requirejson.Parse(t, stdout).Query(".platforms.[0] | .installed_version").String(), "\"")) require.NoError(t, err) - latestVersion, err := semver.Parse(strings.Trim(requirejson.Parse(t, stdout).Query(".[0] | .latest").String(), "\"")) + latestVersion, err := semver.Parse(strings.Trim(requirejson.Parse(t, stdout).Query(".platforms.[0] | .latest_version").String(), "\"")) require.NoError(t, err) // Installed version must be older than latest require.True(t, installedVersion.LessThan(latestVersion)) @@ -956,7 +1051,7 @@ func TestCoreLoadingPackageManager(t *testing.T) { // Create empty architecture folder (this condition is normally produced by `core uninstall`) require.NoError(t, cli.DataDir().Join("packages", "foovendor", "hardware", "fooarch").MkdirAll()) - _, _, err := cli.Run("core", "list", "--all", "--format", "json") + _, _, err := cli.Run("core", "list", "--all", "--json") require.NoError(t, err) // this should not make the cli crash } @@ -1057,7 +1152,7 @@ func TestCoreUpgradeWarningWithPackageInstalledButNotIndexed(t *testing.T) { _, _, err = cli.Run("core", "install", "test:x86@1.0.0", "--additional-urls="+url) require.NoError(t, err) // upgrade without index fires a warning - jsonStdout, _, _ := cli.Run("core", "upgrade", "test:x86", "--format", "json") + jsonStdout, _, _ := cli.Run("core", "upgrade", "test:x86", "--json") requirejson.Query(t, jsonStdout, ".warnings[]", `"missing package index for test:x86, future updates cannot be guaranteed"`) }) @@ -1066,7 +1161,7 @@ func TestCoreUpgradeWarningWithPackageInstalledButNotIndexed(t *testing.T) { require.NoError(t, os.Remove(installedJson.String())) t.Run("missing both installed.json and additional-urls", func(t *testing.T) { - jsonStdout, _, _ := cli.Run("core", "upgrade", "test:x86", "--format", "json") + jsonStdout, _, _ := cli.Run("core", "upgrade", "test:x86", "--json") requirejson.Query(t, jsonStdout, ".warnings[]", `"missing package index for test:x86, future updates cannot be guaranteed"`) }) } @@ -1075,11 +1170,136 @@ func TestCoreListWhenNoPlatformAreInstalled(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.platforms | length`, `0`) stdout, _, err = cli.Run("core", "list") require.NoError(t, err) require.Equal(t, "No platforms installed.\n", string(stdout)) } + +func TestCoreHavingIncompatibleDepTools(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + url := env.HTTPServeFile(8000, paths.New("..", "testdata", "test_index.json")).String() + additionalURLs := "--additional-urls=" + url + + _, _, err := cli.Run("core", "update-index", additionalURLs) + require.NoError(t, err) + + // the `latest_version` must point to an installable release. In the releases field the latest entry, points to an incompatible version. + stdout, _, err := cli.Run("core", "list", "--all", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{ + "installed_version": "", + "latest_version": "1.0.1", + "releases": { + "1.0.0": {"compatible": true}, + "1.0.1": {"compatible": true}, + "1.0.2": {"compatible": false} + } + }`) + + // install latest compatible version + _, _, err = cli.Run("core", "install", "foo_vendor:avr", additionalURLs) + require.NoError(t, err) + stdout, _, err = cli.Run("core", "list", "--all", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{ + "latest_version": "1.0.1", + "installed_version": "1.0.1", + "releases": {"1.0.1": {"compatible": true}} + }`) + + // install a specific incompatible version + _, stderr, err := cli.Run("core", "install", "foo_vendor:avr@1.0.2", additionalURLs) + require.Error(t, err) + require.Contains(t, string(stderr), "no versions available for the current OS") + + // install a specific compatible version + _, _, err = cli.Run("core", "install", "foo_vendor:avr@1.0.0", additionalURLs) + require.NoError(t, err) + stdout, _, err = cli.Run("core", "list", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{"installed_version": "1.0.0", "releases": {"1.0.0": {"compatible": true}}}`) + + // Lists all updatable cores + stdout, _, err = cli.Run("core", "list", "--updatable", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{"latest_version": "1.0.1", "releases": {"1.0.1": {"compatible": true}}}`) + + // Show outdated cores, must show latest compatible + stdout, _, err = cli.Run("outdated", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{"latest_version": "1.0.1", "releases":{"1.0.1": {"compatible": true}}}`) + + // upgrade to latest compatible (1.0.0 -> 1.0.1) + _, _, err = cli.Run("core", "upgrade", "foo_vendor:avr", "--json", additionalURLs) + require.NoError(t, err) + stdout, _, err = cli.Run("core", "list", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr") | .releases[.installed_version]`). + MustContain(`{"version": "1.0.1", "compatible": true}`) + + // upgrade to latest incompatible not possible (1.0.1 -> 1.0.2) + _, _, err = cli.Run("core", "upgrade", "foo_vendor:avr", "--json", additionalURLs) + require.NoError(t, err) + stdout, _, err = cli.Run("core", "list", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Query(t, stdout, `.platforms | .[] | select(.id == "foo_vendor:avr") | .installed_version`, `"1.0.1"`) + + // When no compatible version are found return error + // When trying to install a platform with no compatible version fails + _, stderr, err = cli.Run("core", "install", "incompatible_vendor:avr", additionalURLs) + require.Error(t, err) + require.Contains(t, string(stderr), "is not available for your OS") + + // Core search + { + // core search with and without --all produces the same results. + stdoutSearchAll, _, err := cli.Run("core", "search", "--all", "--json", additionalURLs) + require.NoError(t, err) + stdoutSearch, _, err := cli.Run("core", "search", "--json", additionalURLs) + require.NoError(t, err) + require.Equal(t, stdoutSearchAll, stdoutSearch) + for _, stdout := range [][]byte{stdoutSearchAll, stdoutSearch} { + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{ + "latest_version": "1.0.1", + "releases": { + "1.0.0": {"compatible": true}, + "1.0.1": {"compatible": true}, + "1.0.2": {"compatible": false} + } + }`) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "incompatible_vendor:avr")`). + MustContain(`{"latest_version": "", "releases": { "1.0.0": {"compatible": false}}}`) + } + // In text mode, core search shows `n/a` for core that doesn't have any compatible version + stdout, _, err := cli.Run("core", "search", additionalURLs) + require.NoError(t, err) + var lines [][]string + for _, v := range strings.Split(strings.TrimSpace(string(stdout)), "\n") { + lines = append(lines, strings.Fields(strings.TrimSpace(v))) + if strings.Contains(v, "incompatible_vendor:avr") { + t.Log(strings.Fields(strings.TrimSpace(v))) + } + } + require.Contains(t, lines, []string{"incompatible_vendor:avr", "n/a", "Incompatible", "Boards"}) + } +} diff --git a/internal/integrationtest/daemon/daemon_concurrency_test.go b/internal/integrationtest/daemon/daemon_concurrency_test.go index 02e9f2501b6..733fe54504a 100644 --- a/internal/integrationtest/daemon/daemon_concurrency_test.go +++ b/internal/integrationtest/daemon/daemon_concurrency_test.go @@ -23,6 +23,7 @@ import ( "testing" "time" + "github.com/arduino/arduino-cli/internal/integrationtest" "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" @@ -31,7 +32,7 @@ import ( func TestArduinoCliDaemonCompileWithLotOfOutput(t *testing.T) { // See: https://github.com/arduino/arduino-cli/issues/2169 - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() _, _, err := cli.Run("core", "install", "arduino:avr") diff --git a/internal/integrationtest/daemon/daemon_test.go b/internal/integrationtest/daemon/daemon_test.go index 7e49db88111..366fec20497 100644 --- a/internal/integrationtest/daemon/daemon_test.go +++ b/internal/integrationtest/daemon/daemon_test.go @@ -23,7 +23,7 @@ import ( "testing" "time" - "github.com/arduino/arduino-cli/arduino" + "github.com/arduino/arduino-cli/commands/cmderrors" f "github.com/arduino/arduino-cli/internal/algorithms" "github.com/arduino/arduino-cli/internal/integrationtest" "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" @@ -37,7 +37,7 @@ import ( func TestArduinoCliDaemon(t *testing.T) { // See: https://github.com/arduino/arduino-cli/pull/1804 - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -63,19 +63,19 @@ func TestArduinoCliDaemon(t *testing.T) { require.NoError(t, err) watcherCanceldCh := make(chan struct{}) go func() { + defer close(watcherCanceldCh) for { msg, err := watcher.Recv() if errors.Is(err, io.EOF) { - fmt.Println("Watcher EOF") + fmt.Println("Got EOF from watcher") return } if s, ok := status.FromError(err); ok && s.Code() == codes.Canceled { - fmt.Println("Watcher canceled") - watcherCanceldCh <- struct{}{} + fmt.Println("Got Canceled error from watcher") return } require.NoError(t, err, "BoardListWatch grpc call returned an error") - require.Empty(t, msg.Error, "Board list watcher returned an error") + require.Empty(t, msg.GetError(), "Board list watcher returned an error") fmt.Printf("WATCH> %v %v\n", msg, err) } }() @@ -96,7 +96,7 @@ func TestArduinoCliDaemon(t *testing.T) { func TestDaemonAutoUpdateIndexOnFirstInit(t *testing.T) { // https://github.com/arduino/arduino-cli/issues/1529 - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -104,32 +104,17 @@ func TestDaemonAutoUpdateIndexOnFirstInit(t *testing.T) { fmt.Printf("INIT> %v\n", ir.GetMessage()) })) - _, err := grpcInst.PlatformList(context.Background()) + _, err := grpcInst.PlatformSearch(context.Background(), "", true) require.NoError(t, err) require.FileExists(t, cli.DataDir().Join("package_index.json").String()) } -// createEnvForDaemon performs the minimum required operations to start the arduino-cli daemon. -// It returns a testsuite.Environment and an ArduinoCLI client to perform the integration tests. -// The Environment must be disposed by calling the CleanUp method via defer. -func createEnvForDaemon(t *testing.T) (*integrationtest.Environment, *integrationtest.ArduinoCLI) { - env := integrationtest.NewEnvironment(t) - - cli := integrationtest.NewArduinoCliWithinEnvironment(env, &integrationtest.ArduinoCLIConfig{ - ArduinoCLIPath: integrationtest.FindRepositoryRootPath(t).Join("arduino-cli"), - UseSharedStagingFolder: true, - }) - - _ = cli.StartDaemon(false) - return env, cli -} - func TestDaemonCompileOptions(t *testing.T) { // See: https://github.com/arduino/arduino-cli/issues/1614 // See: https://github.com/arduino/arduino-cli/pull/1820 - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -173,7 +158,7 @@ func TestDaemonCompileOptions(t *testing.T) { fmt.Println("COMPILE ERROR>", err) break } - if msg.ErrStream != nil { + if msg.GetErrStream() != nil { fmt.Printf("COMPILE> %v\n", string(msg.GetErrStream())) } } @@ -188,7 +173,7 @@ func TestDaemonCompileOptions(t *testing.T) { break } require.NoError(t, err) - if msg.ErrStream != nil { + if msg.GetErrStream() != nil { fmt.Printf("COMPILE> %v\n", string(msg.GetErrStream())) } analyzer.Process(msg.GetProgress()) @@ -196,14 +181,14 @@ func TestDaemonCompileOptions(t *testing.T) { // https://github.com/arduino/arduino-cli/issues/2016 // assert that the task progress is increasing and doesn't contain multiple 100% values results := analyzer.Results[""] - require.True(t, results[len(results)-1].Completed, fmt.Sprintf("latest percent value: %v", results[len(results)-1].Percent)) + require.True(t, results[len(results)-1].GetCompleted(), fmt.Sprintf("latest percent value: %v", results[len(results)-1].GetPercent())) require.IsNonDecreasing(t, f.Map(results, (*commands.TaskProgress).GetPercent)) } func TestDaemonCompileAfterFailedLibInstall(t *testing.T) { // See: https://github.com/arduino/arduino-cli/issues/1812 - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -226,14 +211,14 @@ func TestDaemonCompileAfterFailedLibInstall(t *testing.T) { require.Contains(t, err.Error(), "Missing FQBN") break } - if msg.ErrStream != nil { + if msg.GetErrStream() != nil { fmt.Printf("COMPILE> %v\n", string(msg.GetErrStream())) } } } func TestDaemonCoreUpdateIndex(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -254,7 +239,7 @@ func TestDaemonCoreUpdateIndex(t *testing.T) { res, err := analyzeUpdateIndexClient(t, cl) require.NoError(t, err) require.Len(t, res, 1) - require.True(t, res["https://downloads.arduino.cc/packages/package_index.tar.bz2"].Success) + require.True(t, res["https://downloads.arduino.cc/packages/package_index.tar.bz2"].GetSuccess()) } { cl, err := grpcInst.UpdateIndex(context.Background(), false) @@ -262,14 +247,14 @@ func TestDaemonCoreUpdateIndex(t *testing.T) { res, err := analyzeUpdateIndexClient(t, cl) require.Error(t, err) require.Len(t, res, 3) - require.True(t, res["https://downloads.arduino.cc/packages/package_index.tar.bz2"].Success) - require.True(t, res["http://arduino.esp8266.com/stable/package_esp8266com_index.json"].Success) - require.False(t, res["http://downloads.arduino.cc/package_inexistent_index.json"].Success) + require.True(t, res["https://downloads.arduino.cc/packages/package_index.tar.bz2"].GetSuccess()) + require.True(t, res["http://arduino.esp8266.com/stable/package_esp8266com_index.json"].GetSuccess()) + require.False(t, res["http://downloads.arduino.cc/package_inexistent_index.json"].GetSuccess()) } } func TestDaemonBundleLibInstall(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -297,7 +282,7 @@ func TestDaemonBundleLibInstall(t *testing.T) { require.NoError(t, err) libsAndLocation := map[string]commands.LibraryLocation{} for _, lib := range resp.GetInstalledLibraries() { - libsAndLocation[lib.Library.Name] = lib.Library.Location + libsAndLocation[lib.GetLibrary().GetName()] = lib.GetLibrary().GetLocation() } require.Contains(t, libsAndLocation, "Ethernet") require.Contains(t, libsAndLocation, "SD") @@ -328,9 +313,9 @@ func TestDaemonBundleLibInstall(t *testing.T) { require.NoError(t, err) libsAndLocation := map[string]commands.LibraryLocation{} for _, lib := range resp.GetInstalledLibraries() { - libsAndLocation[lib.Library.Name] = lib.Library.Location - if lib.Library.Name == "Ethernet" { - installedEthernetVersion = lib.Library.Version + libsAndLocation[lib.GetLibrary().GetName()] = lib.GetLibrary().GetLocation() + if lib.GetLibrary().GetName() == "Ethernet" { + installedEthernetVersion = lib.GetLibrary().GetVersion() } } require.Contains(t, libsAndLocation, "Ethernet") @@ -361,7 +346,7 @@ func TestDaemonBundleLibInstall(t *testing.T) { require.NoError(t, err) libsAndLocation := map[string]commands.LibraryLocation{} for _, lib := range resp.GetInstalledLibraries() { - libsAndLocation[lib.Library.Name] = lib.Library.Location + libsAndLocation[lib.GetLibrary().GetName()] = lib.GetLibrary().GetLocation() } require.Contains(t, libsAndLocation, "Ethernet") require.Contains(t, libsAndLocation, "SD") @@ -372,7 +357,7 @@ func TestDaemonBundleLibInstall(t *testing.T) { } // Un-Set builtin libraries dir - err := cli.SetValue("directories.builtin.libraries", `""`) + err := cli.SetValue("directories.builtin.libraries", "") require.NoError(t, err) // Re-init @@ -409,7 +394,7 @@ func TestDaemonLibrariesRescanOnInstall(t *testing.T) { with the gprc instance The last attempt is expected to not raise an error */ - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -447,7 +432,7 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { res, err := analyzeUpdateIndexClient(t, cl) require.NoError(t, err) require.Len(t, res, 2) - require.True(t, res["https://arduino.esp8266.com/stable/package_esp8266com_index.json"].Success) + require.True(t, res["https://arduino.esp8266.com/stable/package_esp8266com_index.json"].GetSuccess()) refreshInstance(t, grpcInst) @@ -465,7 +450,7 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { t.Run("upgraded successfully with additional urls", func(t *testing.T) { t.Run("and install.json is present", func(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -477,11 +462,11 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { platform, upgradeError := analyzePlatformUpgradeClient(plUpgrade) require.NoError(t, upgradeError) require.NotNil(t, platform) - require.True(t, platform.Indexed) // the esp866 is present in the additional-urls - require.False(t, platform.MissingMetadata) // install.json is present + require.True(t, platform.GetMetadata().GetIndexed()) // the esp866 is present in the additional-urls + require.False(t, platform.GetRelease().GetMissingMetadata()) // install.json is present }) t.Run("and install.json is missing", func(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -497,15 +482,14 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { platform, upgradeError := analyzePlatformUpgradeClient(plUpgrade) require.NoError(t, upgradeError) require.NotNil(t, platform) - require.True(t, platform.Indexed) // the esp866 is not present in the additional-urls - require.False(t, platform.MissingMetadata) // install.json is present because the old version got upgraded - + require.True(t, platform.GetMetadata().GetIndexed()) // the esp866 is not present in the additional-urls + require.False(t, platform.GetRelease().GetMissingMetadata()) // install.json is present because the old version got upgraded }) }) t.Run("upgrade failed", func(t *testing.T) { t.Run("without additional URLs", func(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -519,13 +503,13 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { require.NoError(t, err) platform, upgradeError := analyzePlatformUpgradeClient(plUpgrade) - require.ErrorIs(t, upgradeError, (&arduino.PlatformAlreadyAtTheLatestVersionError{Platform: "esp8266:esp8266"}).ToRPCStatus().Err()) + require.ErrorIs(t, upgradeError, (&cmderrors.PlatformAlreadyAtTheLatestVersionError{Platform: "esp8266:esp8266"}).GRPCStatus().Err()) require.NotNil(t, platform) - require.False(t, platform.Indexed) // the esp866 is not present in the additional-urls - require.False(t, platform.MissingMetadata) // install.json is present + require.False(t, platform.GetMetadata().GetIndexed()) // the esp866 is not present in the additional-urls + require.False(t, platform.GetRelease().GetMissingMetadata()) // install.json is present }) t.Run("missing both additional URLs and install.json", func(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -544,10 +528,10 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { require.NoError(t, err) platform, upgradeError := analyzePlatformUpgradeClient(plUpgrade) - require.ErrorIs(t, upgradeError, (&arduino.PlatformAlreadyAtTheLatestVersionError{Platform: "esp8266:esp8266"}).ToRPCStatus().Err()) + require.ErrorIs(t, upgradeError, (&cmderrors.PlatformAlreadyAtTheLatestVersionError{Platform: "esp8266:esp8266"}).GRPCStatus().Err()) require.NotNil(t, platform) - require.False(t, platform.Indexed) // the esp866 is not present in the additional-urls - require.True(t, platform.MissingMetadata) // install.json is present + require.False(t, platform.GetMetadata().GetIndexed()) // the esp866 is not present in the additional-urls + require.True(t, platform.GetRelease().GetMissingMetadata()) // install.json is present }) }) } @@ -575,8 +559,8 @@ func analyzePlatformUpgradeClient(cl commands.ArduinoCoreService_PlatformUpgrade if errors.Is(err, io.EOF) { break } - if msg.GetPlatform() != nil { - platform = msg.GetPlatform() + if res := msg.GetResult(); res != nil { + platform = res.GetPlatform() } if err != nil { upgradeError = err diff --git a/internal/integrationtest/daemon/detect_core_changes_test.go b/internal/integrationtest/daemon/detect_core_changes_test.go new file mode 100644 index 00000000000..d7159240b78 --- /dev/null +++ b/internal/integrationtest/daemon/detect_core_changes_test.go @@ -0,0 +1,136 @@ +// This file is part of arduino-cli. +// +// Copyright 2022 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package daemon_test + +import ( + "context" + "errors" + "fmt" + "io" + "testing" + "time" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + + "github.com/stretchr/testify/require" +) + +func TestDetectionOfChangesInCoreBeforeCompile(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2523 + + env, cli := integrationtest.CreateEnvForDaemon(t) + defer env.CleanUp() + + // Create a new instance of the daemon + grpcInst := cli.Create() + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + // Install avr core + installCl, err := grpcInst.PlatformInstall(context.Background(), "arduino", "avr", "", true) + require.NoError(t, err) + for { + installResp, err := installCl.Recv() + if errors.Is(err, io.EOF) { + break + } + require.NoError(t, err) + fmt.Printf("INSTALL> %v\n", installResp) + } + installCl.CloseSend() + + // Utility functions: tryCompile + sketchPath, err := paths.New("testdata", "bare_minimum").Abs() + require.NoError(t, err) + tryCompile := func() error { + compileCl, err := grpcInst.Compile(context.Background(), "arduino:avr:uno", sketchPath.String(), "") + require.NoError(t, err) + defer compileCl.CloseSend() + for { + if compileResp, err := compileCl.Recv(); errors.Is(err, io.EOF) { + return nil + } else if err != nil { + return err + } else { + fmt.Printf("COMPILE> %v\n", compileResp) + } + } + } + + // Utility functions: tryTouch will touch a file and see if the compile detects the change + tryTouch := func(fileToTouch *paths.Path) { + time.Sleep(time.Second) // await at least one second so the timestamp of the file is different + + // touch the file + f, err := fileToTouch.Append() + require.NoError(t, err) + _, err = f.WriteString("\n") + require.NoError(t, err) + require.NoError(t, f.Close()) + + // try compile: should fail + err = tryCompile() + require.Error(t, err) + require.Contains(t, err.Error(), "The instance is no longer valid and needs to be reinitialized") + + // re-init instance + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + // try compile: should succeed + require.NoError(t, tryCompile()) + } + + avrCorePath := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6") + tryTouch(avrCorePath.Join("installed.json")) + tryTouch(avrCorePath.Join("platform.txt")) + tryTouch(avrCorePath.Join("platform.local.txt")) + tryTouch(avrCorePath.Join("programmers.txt")) + tryTouch(avrCorePath.Join("boards.txt")) + tryTouch(avrCorePath.Join("boards.local.txt")) + + // Delete a file and check if the change is detected + require.NoError(t, avrCorePath.Join("programmers.txt").Remove()) + err = tryCompile() + require.Error(t, err) + require.Contains(t, err.Error(), "The instance is no longer valid and needs to be reinitialized") + + // Re-init instance and check again + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + require.NoError(t, tryCompile()) + + // Create a file and check if the change is detected + { + f, err := avrCorePath.Join("programmers.txt").Create() + require.NoError(t, err) + require.NoError(t, f.Close()) + } + err = tryCompile() + require.Error(t, err) + require.Contains(t, err.Error(), "The instance is no longer valid and needs to be reinitialized") + + // Re-init instance and check again + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + require.NoError(t, tryCompile()) +} diff --git a/internal/integrationtest/daemon/download_progress_test.go b/internal/integrationtest/daemon/download_progress_test.go index a232abec033..b67bde71ab8 100644 --- a/internal/integrationtest/daemon/download_progress_test.go +++ b/internal/integrationtest/daemon/download_progress_test.go @@ -45,7 +45,7 @@ func (a *DownloadProgressAnalyzer) Process(progress *commands.DownloadProgress) } if start := progress.GetStart(); start != nil { require.Empty(a.t, a.ongoingDownload, "DownloadProgressStart: started a download without 'completing' the previous one") - a.ongoingDownload = start.Url + a.ongoingDownload = start.GetUrl() } else if update := progress.GetUpdate(); update != nil { require.NotEmpty(a.t, a.ongoingDownload, "DownloadProgressUpdate: received update, but the download is not yet started...") } else if end := progress.GetEnd(); end != nil { diff --git a/internal/integrationtest/debug/debug_test.go b/internal/integrationtest/debug/debug_test.go index 6f7dd422737..e298d8e2fbf 100644 --- a/internal/integrationtest/debug/debug_test.go +++ b/internal/integrationtest/debug/debug_test.go @@ -33,13 +33,22 @@ func TestDebug(t *testing.T) { require.NoError(t, err) // Install cores + _, _, err = cli.Run("core", "install", "arduino:avr") + require.NoError(t, err) _, _, err = cli.Run("core", "install", "arduino:samd") require.NoError(t, err) + // Install custom core + customHw, err := paths.New("testdata", "hardware").Abs() + require.NoError(t, err) + err = customHw.CopyDirTo(cli.SketchbookDir().Join("hardware")) + require.NoError(t, err) + integrationtest.CLISubtests{ {"Start", testDebuggerStarts}, {"WithPdeSketchStarts", testDebuggerWithPdeSketchStarts}, {"DebugInformation", testAllDebugInformation}, + {"DebugCheck", testDebugCheck}, }.Run(t, env, cli) } @@ -99,19 +108,13 @@ func testAllDebugInformation(t *testing.T, env *integrationtest.Environment, cli _, _, err := cli.Run("sketch", "new", sketchPath.String()) require.NoError(t, err) - // Install custom core - customHw, err := paths.New("testdata", "hardware").Abs() - require.NoError(t, err) - err = customHw.CopyDirTo(cli.SketchbookDir().Join("hardware")) - require.NoError(t, err) - // Build sketch - _, _, err = cli.Run("compile", "-b", "my:samd:my", sketchPath.String(), "--format", "json") + _, _, err = cli.Run("compile", "-b", "my:samd:my", sketchPath.String(), "--json") require.NoError(t, err) { // Starts debugger - jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my", "-P", "atmel_ice", sketchPath.String(), "--info", "--format", "json") + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my", "-P", "atmel_ice", sketchPath.String(), "--info", "--json") require.NoError(t, err) debugOut := requirejson.Parse(t, jsonDebugOut) debugOut.MustContain(` @@ -132,28 +135,44 @@ func testAllDebugInformation(t *testing.T, env *integrationtest.Environment, cli ] }, "svd_file": "svd-file", - "cortex-debug_custom_configuration": { - "anotherStringParamer": "hellooo", - "overrideRestartCommands": [ - "monitor reset halt", - "monitor gdb_sync", - "thb setup", - "c" - ], - "postAttachCommands": [ - "set remote hardware-watchpoint-limit 2", - "monitor reset halt", - "monitor gdb_sync", - "thb setup", - "c" - ] - } + "custom_configs": { + "cortex-debug": { + "aBoolean": true, + "aStringBoolean": "true", + "aStringNumber": "10", + "aNumber": 10, + "anotherNumber": 10.2, + "anObject": { + "boolean": true, + "key": "value" + }, + "anotherObject": { + "boolean": true, + "key": "value" + }, + "anotherStringParamer": "hellooo", + "overrideRestartCommands": [ + "monitor reset halt", + "monitor gdb_sync", + "thb setup", + "c" + ], + "postAttachCommands": [ + "set remote hardware-watchpoint-limit 2", + "monitor reset halt", + "monitor gdb_sync", + "thb setup", + "c" + ] + }, + }, + "programmer": "atmel_ice" }`) } // Starts debugger with another programmer { - jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my", "-P", "my_cold_ice", sketchPath.String(), "--info", "--format", "json") + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my", "-P", "my_cold_ice", sketchPath.String(), "--info", "--json") require.NoError(t, err) debugOut := requirejson.Parse(t, jsonDebugOut) debugOut.MustContain(` @@ -174,27 +193,43 @@ func testAllDebugInformation(t *testing.T, env *integrationtest.Environment, cli ] }, "svd_file": "svd-file", - "cortex-debug_custom_configuration": { - "anotherStringParamer": "hellooo", - "overrideRestartCommands": [ - "monitor reset halt", - "monitor gdb_sync", - "thb setup", - "c" - ], - "postAttachCommands": [ - "set remote hardware-watchpoint-limit 2", - "monitor reset halt", - "monitor gdb_sync", - "thb setup", - "c" - ] - } + "custom_configs": { + "cortex-debug": { + "aBoolean": true, + "aStringBoolean": "true", + "aStringNumber": "10", + "aNumber": 10, + "anotherNumber": 10.2, + "anObject": { + "boolean": true, + "key": "value" + }, + "anotherObject": { + "boolean": true, + "key": "value" + }, + "anotherStringParamer": "hellooo", + "overrideRestartCommands": [ + "monitor reset halt", + "monitor gdb_sync", + "thb setup", + "c" + ], + "postAttachCommands": [ + "set remote hardware-watchpoint-limit 2", + "monitor reset halt", + "monitor gdb_sync", + "thb setup", + "c" + ] + }, + }, + "programmer": "my_cold_ice" }`) { // Starts debugger with an old-style openocd script definition - jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my2", "-P", "atmel_ice", sketchPath.String(), "--info", "--format", "json") + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my2", "-P", "atmel_ice", sketchPath.String(), "--info", "--json") require.NoError(t, err) debugOut := requirejson.Parse(t, jsonDebugOut) debugOut.MustContain(` @@ -211,13 +246,14 @@ func testAllDebugInformation(t *testing.T, env *integrationtest.Environment, cli "single-script" ] }, - "svd_file": "svd-file" + "svd_file": "svd-file", + "programmer": "atmel_ice" }`) } { // Starts debugger with mixed old and new-style openocd script definition - jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my2", "-P", "my_cold_ice", sketchPath.String(), "--info", "--format", "json") + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my2", "-P", "my_cold_ice", sketchPath.String(), "--info", "--json") require.NoError(t, err) debugOut := requirejson.Parse(t, jsonDebugOut) debugOut.MustContain(` @@ -234,9 +270,125 @@ func testAllDebugInformation(t *testing.T, env *integrationtest.Environment, cli "cold_ice_script" ] }, - "svd_file": "svd-file" + "svd_file": "svd-file", + "programmer": "my_cold_ice" }`) } + { + // Mixing programmer and additional_config + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my3", "-P", "my_cold_ice", sketchPath.String(), "--info", "--json") + require.NoError(t, err) + debugOut := requirejson.Parse(t, jsonDebugOut) + debugOut.MustContain(` + { + "toolchain": "gcc", + "toolchain_path": "gcc-path", + "toolchain_prefix": "gcc-prefix", + "server": "openocd", + "server_path": "openocd-path", + "server_configuration": { + "path": "openocd-path", + "scripts_dir": "openocd-scripts-dir", + "scripts": [ + "cold_ice_script" + ] + }, + "custom_configs": { + "cortex-debug": { + "test1": "true" + } + }, + "svd_file": "test1.svd", + "programmer": "my_cold_ice" + }`) + } + + { + // Mixing programmer and additional_config selected by another variable + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my4", "-P", "my_cold_ice", sketchPath.String(), "--info", "--json") + require.NoError(t, err) + debugOut := requirejson.Parse(t, jsonDebugOut) + debugOut.MustContain(` + { + "toolchain": "gcc", + "toolchain_path": "gcc-path", + "toolchain_prefix": "gcc-prefix", + "server": "openocd", + "server_path": "openocd-path", + "server_configuration": { + "path": "openocd-path", + "scripts_dir": "openocd-scripts-dir", + "scripts": [ + "cold_ice_script" + ] + }, + "custom_configs": { + "cortex-debug": { + "test2": "true" + } + }, + "svd_file": "test2.svd", + "programmer": "my_cold_ice" + }`) + } } } + +func testDebugCheck(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) { + out, _, err := cli.Run("debug", "check", "-b", "arduino:samd:mkr1000", "-P", "atmel_ice") + require.NoError(t, err) + require.Contains(t, string(out), "The given board/programmer configuration supports debugging.") + + out, _, err = cli.Run("debug", "check", "-b", "arduino:samd:mkr1000", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Query(t, out, `.debugging_supported`, `true`) + + out, _, err = cli.Run("debug", "check", "-b", "arduino:avr:uno", "-P", "atmel_ice") + require.NoError(t, err) + require.Contains(t, string(out), "The given board/programmer configuration does NOT support debugging.") + + out, _, err = cli.Run("debug", "check", "-b", "arduino:avr:uno", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Query(t, out, `.debugging_supported`, `false`) + + // Test minimum FQBN compute + out, _, err = cli.Run("debug", "check", "-b", "my:samd:my5", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ "debugging_supported" : false }`) + + out, _, err = cli.Run("debug", "check", "-b", "my:samd:my5:dbg=on", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ "debugging_supported" : true, "debug_fqbn" : "my:samd:my5:dbg=on" }`) + + out, _, err = cli.Run("debug", "check", "-b", "my:samd:my5:dbg=on,cpu=150m", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ "debugging_supported" : true, "debug_fqbn" : "my:samd:my5:dbg=on" }`) + + out, _, err = cli.Run("debug", "check", "-b", "my:samd:my6", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ "debugging_supported" : true, "debug_fqbn" : "my:samd:my6" }`) + + out, _, err = cli.Run("debug", "check", "-b", "my:samd:my6:dbg=on", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ "debugging_supported" : true, "debug_fqbn" : "my:samd:my6" }`) +} + +func TestDebugProfile(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + sketchPath := cli.CopySketch("sketch_with_profile") + + // Compile the sketch using the profile + _, _, err = cli.Run("compile", "--profile", "samd", sketchPath.String()) + require.NoError(t, err) + + // Debug using the profile + _, _, err = cli.Run("debug", "--profile", "samd", sketchPath.String(), "--info") + require.NoError(t, err) +} diff --git a/internal/integrationtest/debug/testdata/hardware/my/samd/boards.txt b/internal/integrationtest/debug/testdata/hardware/my/samd/boards.txt index 987aa196fdd..1333aba8231 100644 --- a/internal/integrationtest/debug/testdata/hardware/my/samd/boards.txt +++ b/internal/integrationtest/debug/testdata/hardware/my/samd/boards.txt @@ -44,6 +44,14 @@ my.debug.cortex-debug.custom.overrideRestartCommands.1=monitor gdb_sync my.debug.cortex-debug.custom.overrideRestartCommands.2=thb setup my.debug.cortex-debug.custom.overrideRestartCommands.3=c my.debug.cortex-debug.custom.anotherStringParamer=hellooo +my.debug.cortex-debug.custom.aBoolean=[boolean]true +my.debug.cortex-debug.custom.aStringBoolean=true +my.debug.cortex-debug.custom.aNumber=[number]10 +my.debug.cortex-debug.custom.anotherNumber=[number]10.20 +my.debug.cortex-debug.custom.aStringNumber=10 +my.debug.cortex-debug.custom.anObject=[object]{"key":"value", "boolean":true} +my.debug.cortex-debug.custom.anotherObject.key=value +my.debug.cortex-debug.custom.anotherObject.boolean=[boolean]true my.debug.svd_file=svd-file my2.name=My Cool Board @@ -79,3 +87,64 @@ my2.debug.server.openocd.path=openocd-path my2.debug.server.openocd.scripts_dir=openocd-scripts-dir my2.debug.server.openocd.script=single-script my2.debug.svd_file=svd-file + +my3.name=My third Cool Board +my3.build.core=arduino:arduino +my3.build.variant=arduino:mkr1000 +my3.debug.toolchain.path=gcc-path +my3.debug.toolchain.prefix=gcc-prefix +my3.debug.server.openocd.path=openocd-path +my3.debug.server.openocd.scripts_dir=openocd-scripts-dir +my3.debug.server.openocd.script=single-script +# this one will be overwritten by additional_config +my3.debug.svd_file=svd-file +my3.debug.additional_config=build.debug.config.test1 + +my4.name=My fourth Cool Board +my4.build.core=arduino:arduino +my4.build.variant=arduino:mkr1000 +my4.debug.toolchain.path=gcc-path +my4.debug.toolchain.prefix=gcc-prefix +my4.debug.server.openocd.path=openocd-path +my4.debug.server.openocd.scripts_dir=openocd-scripts-dir +my4.debug.server.openocd.script=single-script +my4.build.mcu=test2 +# this one will be overwritten by additional_config +my4.debug.svd_file=svd-file +my4.debug.additional_config=build.debug.config.{build.mcu} + +# menu options for the following boards +menu.dbg=Debugger +menu.cpu=CPU Speed + +# This does not support debug by default but only after selecting a menu option +my5.name=5th Board +my5.build.core=arduino:arduino +my5.build.variant=arduino:mkr1000 +my5.debug.toolchain.path=gcc-path +my5.debug.toolchain.prefix=gcc-prefix +my5.debug.server.openocd.path=openocd-path +my5.debug.server.openocd.scripts_dir=openocd-scripts-dir +my5.debug.server.openocd.script=single-script +my5.debug.executable= +my5.menu.dbg.off=Debug Disabled +my5.menu.dbg.on=Debug Enabled +my5.menu.dbg.on.debug.executable=YES +my5.menu.cpu.100m=100Mhz +my5.menu.cpu.150m=150Mhz + +# this one has debugger enabled by default +my6.name=5th Board +my6.build.core=arduino:arduino +my6.build.variant=arduino:mkr1000 +my6.debug.toolchain.path=gcc-path +my6.debug.toolchain.prefix=gcc-prefix +my6.debug.server.openocd.path=openocd-path +my6.debug.server.openocd.scripts_dir=openocd-scripts-dir +my6.debug.server.openocd.script=single-script +my6.debug.executable= +my6.menu.dbg.on=Debug Enabled +my6.menu.dbg.on.debug.executable=YES +my6.menu.dbg.off=Debug Disabled +my6.menu.cpu.100m=100Mhz +my6.menu.cpu.150m=150Mhz \ No newline at end of file diff --git a/internal/integrationtest/debug/testdata/hardware/my/samd/platform.txt b/internal/integrationtest/debug/testdata/hardware/my/samd/platform.txt new file mode 100644 index 00000000000..d2a61b9fd25 --- /dev/null +++ b/internal/integrationtest/debug/testdata/hardware/my/samd/platform.txt @@ -0,0 +1,5 @@ +build.debug.config.test1.svd_file=test1.svd +build.debug.config.test1.cortex-debug.custom.test1=true + +build.debug.config.test2.svd_file=test2.svd +build.debug.config.test2.cortex-debug.custom.test2=true diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index f064f32e741..ab49a35e2a7 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -55,24 +55,24 @@ func TestLibUpgradeCommand(t *testing.T) { // Test upgrade of installed library _, _, err = cli.Run("lib", "install", "Servo@1.1.6") require.NoError(t, err) - stdOut, _, err := cli.Run("lib", "list", "--format", "json") + stdOut, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Contains(t, stdOut, `[ { "library":{ "name":"Servo", "version": "1.1.6" } } ]`) + requirejson.Contains(t, stdOut, `{"installed_libraries": [ { "library":{ "name":"Servo", "version": "1.1.6" } } ]}`) _, _, err = cli.Run("lib", "upgrade", "Servo") require.NoError(t, err) - stdOut, _, err = cli.Run("lib", "list", "--format", "json") + stdOut, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdOut) - jsonOut.MustNotContain(`[ { "library":{ "name":"Servo", "version": "1.1.6" } } ]`) - servoVersion := jsonOut.Query(`.[].library | select(.name=="Servo") | .version`).String() + jsonOut.MustNotContain(`{"installed_libraries": [{"library":{ "name":"Servo", "version": "1.1.6" }}]}`) + servoVersion := jsonOut.Query(`.installed_libraries.[].library | select(.name=="Servo") | .version`).String() // Upgrade of already up-to-date library _, _, err = cli.Run("lib", "upgrade", "Servo") require.NoError(t, err) - stdOut, _, err = cli.Run("lib", "list", "--format", "json") + stdOut, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdOut, `.[].library | select(.name=="Servo") | .version`, servoVersion) + requirejson.Query(t, stdOut, `.installed_libraries.[].library | select(.name=="Servo") | .version`, servoVersion) } func TestLibCommandsUsingNameInsteadOfDirName(t *testing.T) { @@ -82,11 +82,11 @@ func TestLibCommandsUsingNameInsteadOfDirName(t *testing.T) { _, _, err := cli.Run("lib", "install", "Robot Motor") require.NoError(t, err) - jsonOut, _, err := cli.Run("lib", "examples", "Robot Motor", "--format", "json") + jsonOut, _, err := cli.Run("lib", "examples", "Robot Motor", "--json") require.NoError(t, err) requirejson.Len(t, jsonOut, 1, "Library 'Robot Motor' not matched in lib examples command.") - jsonOut, _, err = cli.Run("lib", "list", "Robot Motor", "--format", "json") + jsonOut, _, err = cli.Run("lib", "list", "Robot Motor", "--json") require.NoError(t, err) requirejson.Len(t, jsonOut, 1, "Library 'Robot Motor' not matched in lib list command.") } @@ -103,11 +103,11 @@ func TestLibInstallMultipleSameLibrary(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "install", "Arduino SigFox for MKRFox1200") require.NoError(t, err) - jsonOut, _, err := cli.Run("lib", "list", "--format", "json") + jsonOut, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) // Count how many libraries with the name "Arduino SigFox for MKRFox1200" are installed requirejson.Parse(t, jsonOut). - Query(`[.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). + Query(`[.installed_libraries.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). LengthMustEqualTo(1, "Found multiple installations of Arduino SigFox for MKRFox1200'") // Check that 'lib upgrade' didn't create a double install @@ -118,11 +118,11 @@ func TestLibInstallMultipleSameLibrary(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "upgrade", "Arduino SigFox for MKRFox1200") require.NoError(t, err) - jsonOut, _, err = cli.Run("lib", "list", "--format", "json") + jsonOut, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) // Count how many libraries with the name "Arduino SigFox for MKRFox1200" are installed requirejson.Parse(t, jsonOut). - Query(`[.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). + Query(`[.installed_libraries.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). LengthMustEqualTo(1, "Found multiple installations of Arduino SigFox for MKRFox1200'") } @@ -138,9 +138,9 @@ func TestDuplicateLibInstallDetection(t *testing.T) { otaLibPath := cli.SketchbookDir().Join("libraries", "ArduinoOTA") err = otaLibPath.CopyDirTo(otaLibPath.Parent().Join("CopyOfArduinoOTA")) require.NoError(t, err) - jsonOut, _, err := cli.Run("lib", "list", "--format", "json") + jsonOut, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, jsonOut, 2, "Duplicate library install is not detected by the CLI") + requirejson.Query(t, jsonOut, `.installed_libraries | length`, `2`, "Duplicate library install is not detected by the CLI") _, stdErr, err := cli.Run("lib", "install", "ArduinoOTA") require.Error(t, err) @@ -166,11 +166,11 @@ func TestDuplicateLibInstallFromGitDetection(t *testing.T) { _, _, err = cli.RunWithCustomEnv(cliEnv, "lib", "install", "--git-url", "https://github.com/arduino-libraries/SigFox#1.0.3") require.NoError(t, err) - jsonOut, _, err := cli.Run("lib", "list", "--format", "json") + jsonOut, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) // Count how many libraries with the name "Arduino SigFox for MKRFox1200" are installed requirejson.Parse(t, jsonOut). - Query(`[.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). + Query(`[.installed_libraries.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). LengthMustEqualTo(1, "Found multiple installations of Arduino SigFox for MKRFox1200'") // Try to make a double install by upgrade @@ -178,10 +178,10 @@ func TestDuplicateLibInstallFromGitDetection(t *testing.T) { require.NoError(t, err) // Check if double install happened - jsonOut, _, err = cli.Run("lib", "list", "--format", "json") + jsonOut, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) requirejson.Parse(t, jsonOut). - Query(`[.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). + Query(`[.installed_libraries.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). LengthMustEqualTo(1, "Found multiple installations of Arduino SigFox for MKRFox1200'") // Try to make a double install by zip-installing @@ -203,10 +203,10 @@ func TestDuplicateLibInstallFromGitDetection(t *testing.T) { require.NoError(t, err) // Check if double install happened - jsonOut, _, err = cli.Run("lib", "list", "--format", "json") + jsonOut, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) requirejson.Parse(t, jsonOut). - Query(`[.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). + Query(`[.installed_libraries.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). LengthMustEqualTo(1, "Found multiple installations of Arduino SigFox for MKRFox1200'") } @@ -242,7 +242,7 @@ func TestLibDepsOutput(t *testing.T) { require.Regexp(t, `^✕ MKRWAN \d+\.\d+\.\d+ must be installed\.$`, lines[5]) require.Regexp(t, `^✕ WiFi101 \d+\.\d+\.\d+ must be installed\.$`, lines[6]) - stdOut, _, err = cli.Run("lib", "deps", "Arduino_ConnectionHandler@0.6.6", "--format", "json") + stdOut, _, err = cli.Run("lib", "deps", "Arduino_ConnectionHandler@0.6.6", "--json") require.NoError(t, err) var jsonDeps struct { @@ -284,7 +284,7 @@ func TestUpgradeLibraryWithDependencies(t *testing.T) { // Install library _, _, err = cli.Run("lib", "install", "Arduino_ConnectionHandler@0.3.3") require.NoError(t, err) - stdOut, _, err := cli.Run("lib", "deps", "Arduino_ConnectionHandler@0.3.3", "--format", "json") + stdOut, _, err := cli.Run("lib", "deps", "Arduino_ConnectionHandler@0.3.3", "--json") require.NoError(t, err) var jsonDeps struct { @@ -308,7 +308,7 @@ func TestUpgradeLibraryWithDependencies(t *testing.T) { // Test lib upgrade also install new dependencies of already installed library _, _, err = cli.Run("lib", "upgrade", "Arduino_ConnectionHandler") require.NoError(t, err) - stdOut, _, err = cli.Run("lib", "deps", "Arduino_ConnectionHandler", "--format", "json") + stdOut, _, err = cli.Run("lib", "deps", "Arduino_ConnectionHandler", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdOut) @@ -329,10 +329,10 @@ func TestList(t *testing.T) { require.NoError(t, err) require.Empty(t, stderr) require.Contains(t, string(stdout), "No libraries installed.") - stdout, stderr, err = cli.Run("lib", "list", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) // Install something we can list at a version older than latest _, _, err = cli.Run("lib", "install", "ArduinoJson@6.11.0") @@ -355,23 +355,23 @@ func TestList(t *testing.T) { require.Contains(t, toks[4], "An efficient and elegant JSON library...") // Look at the JSON output - stdout, stderr, err = cli.Run("lib", "list", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) // be sure data contains the available version - requirejson.Query(t, stdout, `.[0] | .release | .version != ""`, "true") + requirejson.Query(t, stdout, `.installed_libraries.[0] | .release | .version != ""`, "true") // Install something we can list without provides_includes field given in library.properties _, _, err = cli.Run("lib", "install", "Arduino_APDS9960@1.0.3") require.NoError(t, err) // Look at the JSON output - stdout, stderr, err = cli.Run("lib", "list", "Arduino_APDS9960", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "Arduino_APDS9960", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) // be sure data contains the correct provides_includes field - requirejson.Query(t, stdout, ".[0] | .library | .provides_includes | .[0]", `"Arduino_APDS9960.h"`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .provides_includes | .[0]", `"Arduino_APDS9960.h"`) } func TestListExitCode(t *testing.T) { @@ -448,17 +448,17 @@ func TestListWithFqbn(t *testing.T) { require.Equal(t, "ArduinoJson", toks[0]) // Look at the JSON output - stdout, stderr, err = cli.Run("lib", "list", "-b", "arduino:avr:uno", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "-b", "arduino:avr:uno", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Len(t, stdout, 6) + requirejson.Query(t, stdout, `.installed_libraries | length`, `6`) // Verifies library is compatible - requirejson.Query(t, stdout, `sort_by(.library | .name) | .[0] | .library | .name`, `"ArduinoJson"`) - requirejson.Query(t, stdout, `sort_by(.library | .name) | .[0] | .library | .compatible_with | ."arduino:avr:uno"`, `true`) + requirejson.Query(t, stdout, `.installed_libraries | sort_by(.library | .name) | .[0] | .library | .name`, `"ArduinoJson"`) + requirejson.Query(t, stdout, `.installed_libraries | sort_by(.library | .name) | .[0] | .library | .compatible_with | ."arduino:avr:uno"`, `true`) // Verifies bundled libs are shown if -b flag is used - requirejson.Parse(t, stdout).Query(`.[] | .library | select(.container_platform=="arduino:avr@1.8.6")`).MustNotBeEmpty() + requirejson.Parse(t, stdout).Query(`.installed_libraries.[] | .library | select(.container_platform=="arduino:avr@1.8.6")`).MustNotBeEmpty() } func TestListProvidesIncludesFallback(t *testing.T) { @@ -477,13 +477,13 @@ func TestListProvidesIncludesFallback(t *testing.T) { require.NoError(t, err) // List all libraries, even the ones installed with the above core - stdout, stderr, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:avr:uno", "--format", "json") + stdout, stderr, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:avr:uno", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Len(t, stdout, 6) + requirejson.Query(t, stdout, `.installed_libraries | length`, `6`) - requirejson.Query(t, stdout, "[.[] | .library | { (.name): .provides_includes }] | add", + requirejson.Query(t, stdout, "[.installed_libraries.[] | .library | { (.name): .provides_includes }] | add", `{ "SPI": [ "SPI.h" @@ -546,9 +546,9 @@ func TestInstall(t *testing.T) { // https://github.com/arduino/arduino-cli/issues/1727 _, _, err = cli.Run("lib", "install", "ILI9341_t3@1.0") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Parse(t, stdout).Query(`.[] | select(.library.name == "ILI9341_t3") | .library.version`).MustEqual(`"1.0"`) + requirejson.Parse(t, stdout).Query(`.installed_libraries.[] | select(.library.name == "ILI9341_t3") | .library.version`).MustEqual(`"1.0"`) _, _, err = cli.Run("lib", "install", "ILI9341_t3@1") require.NoError(t, err) _, _, err = cli.Run("lib", "install", "ILI9341_t3@1.0.0") @@ -563,18 +563,18 @@ func TestInstallLibraryWithDependencies(t *testing.T) { require.NoError(t, err) // Verifies libraries are not installed - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) // Install library _, _, err = cli.Run("lib", "install", "MD_Parola@3.5.5") require.NoError(t, err) // Verifies library's dependencies are correctly installed - stdout, _, err = cli.Run("lib", "list", "--format", "json") + stdout, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, `[ .[] | .library | .name ] | sort`, `["MD_MAX72XX","MD_Parola"]`) + requirejson.Query(t, stdout, `[.installed_libraries.[] | .library | .name ] | sort`, `["MD_MAX72XX","MD_Parola"]`) // Try upgrading with --no-overwrite (should fail) and without --no-overwrite (should succeed) _, _, err = cli.Run("lib", "install", "MD_Parola@3.6.1", "--no-overwrite") @@ -589,8 +589,10 @@ func TestInstallLibraryWithDependencies(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "install", "SD@1.2.3") require.NoError(t, err) - _, _, err = cli.Run("lib", "install", "Arduino_Builtin", "--no-overwrite") - require.Error(t, err) + // This time it should accept the installation with the currently installed SD 1.2.3 + out, _, err := cli.Run("lib", "install", "Arduino_Builtin", "--no-overwrite") + require.NoError(t, err) + require.Contains(t, string(out), "Already installed SD@1.2.3") } func TestInstallNoDeps(t *testing.T) { @@ -601,18 +603,18 @@ func TestInstallNoDeps(t *testing.T) { require.NoError(t, err) // Verifies libraries are not installed - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) // Install library skipping dependencies installation _, _, err = cli.Run("lib", "install", "MD_Parola@3.5.5", "--no-deps") require.NoError(t, err) // Verifies library's dependencies are not installed - stdout, _, err = cli.Run("lib", "list", "--format", "json") + stdout, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, `.[] | .library | .name`, `"MD_Parola"`) + requirejson.Query(t, stdout, `.installed_libraries.[] | .library | .name`, `"MD_Parola"`) } func TestInstallWithGitUrl(t *testing.T) { @@ -710,9 +712,9 @@ func TestUninstallSpaces(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "uninstall", key) require.NoError(t, err) - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 0) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) } func TestLibOpsCaseInsensitive(t *testing.T) { @@ -738,9 +740,9 @@ func TestLibOpsCaseInsensitive(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "uninstall", key) require.NoError(t, err) - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 0) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) } func TestSearch(t *testing.T) { @@ -761,12 +763,12 @@ func TestSearch(t *testing.T) { expected := []string{"WiFi101", "WiFi101OTA", "Firebase Arduino based on WiFi101", "WiFi101_Generic"} require.Subset(t, libs, expected) - stdout, _, err = cli.Run("lib", "search", "--names", "--format", "json") + stdout, _, err = cli.Run("lib", "search", "--names", "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".libraries | length", fmt.Sprint(len(libs))) runSearch := func(args string, expectedLibs []string) { - stdout, _, err = cli.Run("lib", "search", "--names", "--format", "json", args) + stdout, _, err = cli.Run("lib", "search", "--names", "--json", args) require.NoError(t, err) libraries := requirejson.Parse(t, stdout).Query("[ .libraries | .[] | .name ]").String() for _, l := range expectedLibs { @@ -788,6 +790,29 @@ func TestSearch(t *testing.T) { runSearch("json", []string{"ArduinoJson", "Arduino_JSON"}) } +func TestQualifiedSearch(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + runSearch := func(args string, expectedLibs []string) { + stdout, _, err := cli.Run("lib", "search", "--names", "--json", args) + require.NoError(t, err) + libraries := requirejson.Parse(t, stdout).Query("[ .libraries | .[] | .name ]").String() + for _, l := range expectedLibs { + require.Contains(t, libraries, l) + } + } + runSearch("name:MKRIoTCarrier", []string{"Arduino_MKRIoTCarrier"}) + runSearch("name=Arduino_MKRIoTCarrier", []string{"Arduino_MKRIoTCarrier"}) + // Embedded space in double-quoted string + runSearch("name=\"dht sensor library\"", []string{"DHT sensor library"}) + // No closing double-quote + runSearch("name=\"dht sensor library", []string{"DHT sensor library"}) + runSearch("name:\"sensor dht\"", []string{}) + // Literal double-quote + runSearch("sentence:\\\"", []string{"RTCtime"}) +} + func TestSearchParagraph(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() @@ -796,7 +821,7 @@ func TestSearchParagraph(t *testing.T) { // within the index file. _, _, err := cli.Run("lib", "update-index") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "search", "A simple and efficient JSON library", "--names", "--format", "json") + stdout, _, err := cli.Run("lib", "search", "A simple and efficient JSON library", "--names", "--json") require.NoError(t, err) requirejson.Contains(t, stdout, `{ "libraries": [ @@ -821,10 +846,10 @@ func TestLibListWithUpdatableFlag(t *testing.T) { require.Empty(t, stderr) require.Contains(t, string(stdout), "No libraries update is available.") // No library to update in json - stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) // Install outdated library _, _, err = cli.Run("lib", "install", "ArduinoJson@6.11.0") @@ -851,14 +876,14 @@ func TestLibListWithUpdatableFlag(t *testing.T) { require.Equal(t, "An efficient and elegant JSON library...", lines[1][4]) // Look at the JSON output - stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) // be sure data contains the available version - requirejson.Query(t, stdout, `.[0] | .library | .version`, `"6.11.0"`) - requirejson.Query(t, stdout, `.[0] | .release | .version != "6.11.0"`, `true`) - requirejson.Query(t, stdout, `.[0] | .release | .version != ""`, `true`) + requirejson.Query(t, stdout, `.installed_libraries.[0] | .library | .version`, `"6.11.0"`) + requirejson.Query(t, stdout, `.installed_libraries.[0] | .release | .version != "6.11.0"`, `true`) + requirejson.Query(t, stdout, `.installed_libraries.[0] | .release | .version != ""`, `true`) } func TestInstallWithGitUrlFromCurrentDirectory(t *testing.T) { @@ -1016,10 +1041,10 @@ func TestLibExamples(t *testing.T) { _, _, err = cli.Run("lib", "install", "Arduino_JSON@0.1.0") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "examples", "Arduino_JSON", "--format", "json") + stdout, _, err := cli.Run("lib", "examples", "Arduino_JSON", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - examples := requirejson.Parse(t, stdout).Query(".[0] | .examples").String() + requirejson.Query(t, stdout, `.examples | length`, `1`) + examples := requirejson.Parse(t, stdout).Query(".examples.[0] | .examples").String() examples = strings.ReplaceAll(examples, "\\\\", "\\") require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONArray").String()) require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONKitchenSink").String()) @@ -1036,10 +1061,10 @@ func TestLibExamplesWithPdeFile(t *testing.T) { _, _, err = cli.Run("lib", "install", "Encoder@1.4.1") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "examples", "Encoder", "--format", "json") + stdout, _, err := cli.Run("lib", "examples", "Encoder", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - examples := requirejson.Parse(t, stdout).Query(".[0] | .examples").String() + requirejson.Query(t, stdout, `.examples | length`, `1`) + examples := requirejson.Parse(t, stdout).Query(".examples.[0] | .examples").String() examples = strings.ReplaceAll(examples, "\\\\", "\\") require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "Basic").String()) require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "NoInterrupts").String()) @@ -1057,12 +1082,12 @@ func TestLibExamplesWithCaseMismatch(t *testing.T) { _, _, err = cli.Run("lib", "install", "WiFiManager@2.0.3-alpha") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "examples", "WiFiManager", "--format", "json") + stdout, _, err := cli.Run("lib", "examples", "WiFiManager", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[0] | .examples | length", "14") + requirejson.Query(t, stdout, `.examples | length`, `1`) + requirejson.Query(t, stdout, ".examples.[0] | .examples | length", "14") - examples := requirejson.Parse(t, stdout).Query(".[0] | .examples").String() + examples := requirejson.Parse(t, stdout).Query(".examples.[0] | .examples").String() examples = strings.ReplaceAll(examples, "\\\\", "\\") examplesPath := cli.SketchbookDir().Join("libraries", "WiFiManager", "examples") // Verifies sketches with correct casing are listed @@ -1097,10 +1122,10 @@ func TestLibCommandsWithLibraryHavingInvalidVersion(t *testing.T) { require.NoError(t, err) // Verifies library is correctly returned - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[0] | .library | .version", `"0.16.1"`) + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .version", `"0.16.1"`) // Changes the version of the currently installed library so that it's // invalid @@ -1108,20 +1133,20 @@ func TestLibCommandsWithLibraryHavingInvalidVersion(t *testing.T) { require.NoError(t, libPath.WriteFile([]byte("name=WiFi101\nversion=1.0001"))) // Verifies version is now empty - stdout, _, err = cli.Run("lib", "list", "--format", "json") + stdout, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[0] | .library | .version", "null") + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .version", "null") // Upgrade library _, _, err = cli.Run("lib", "upgrade", "WiFi101") require.NoError(t, err) // Verifies library has been updated - stdout, _, err = cli.Run("lib", "list", "--format", "json") + stdout, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[0] | .library | .version != \"\"", "true") + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .version != \"\"", "true") } func TestInstallZipLibWithMacosMetadata(t *testing.T) { @@ -1276,12 +1301,12 @@ func TestUpgradeDoesNotTryToUpgradeBundledCoreLibrariesInSketchbook(t *testing.T _, _, err = cli.Run("lib", "install", "USBHost") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "list", "--all", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--all", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 2) + requirejson.Query(t, stdout, `.installed_libraries | length`, `2`) // Verify both libraries have the same name - requirejson.Query(t, stdout, ".[0] | .library | .name", `"USBHost"`) - requirejson.Query(t, stdout, ".[1] | .library | .name", `"USBHost"`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .name", `"USBHost"`) + requirejson.Query(t, stdout, ".installed_libraries.[1] | .library | .name", `"USBHost"`) stdout, _, err = cli.Run("lib", "upgrade") require.NoError(t, err) @@ -1308,12 +1333,12 @@ func TestUpgradeDoesNotTryToUpgradeBundledCoreLibraries(t *testing.T) { _, _, err = cli.Run("lib", "install", "USBHost") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "list", "--all", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--all", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 2) + requirejson.Query(t, stdout, `.installed_libraries | length`, `2`) // Verify both libraries have the same name - requirejson.Query(t, stdout, ".[0] | .library | .name", `"USBHost"`) - requirejson.Query(t, stdout, ".[1] | .library | .name", `"USBHost"`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .name", `"USBHost"`) + requirejson.Query(t, stdout, ".installed_libraries.[1] | .library | .name", `"USBHost"`) stdout, _, err = cli.Run("lib", "upgrade") require.NoError(t, err) @@ -1520,7 +1545,7 @@ func TestLibQueryParameters(t *testing.T) { require.Contains(t, string(stdout), `"url":"https://downloads.arduino.cc/libraries/github.com/arduino-libraries/USBHost-1.0.5.zip?query=upgrade"`) // Check query=depends when a library dependency is installed - stdout, _, err = cli.Run("lib", "deps", "MD_Parola@3.5.5", "--format", "json") + stdout, _, err = cli.Run("lib", "deps", "MD_Parola@3.5.5", "--json") require.NoError(t, err) // determine the version installed as dependency MDMAX72XXversion := strings.Trim(requirejson.Parse(t, stdout).Query(`.dependencies[0].version_required`).String(), `"`) @@ -1555,21 +1580,21 @@ func TestLibBundlesWhenLibWithTheSameNameIsInstalledGlobally(t *testing.T) { _, _, err := cli.Run("core", "install", "arduino:samd@1.8.13") require.NoError(t, err) { - stdout, _, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:samd:mkrzero", "USBHost", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:samd:mkrzero", "USBHost", "--json") require.NoError(t, err) j := requirejson.Parse(t, stdout) - j.Query(`.[0].library.name`).MustEqual(`"USBHost"`) - j.Query(`.[0].library.compatible_with."arduino:samd:mkrzero"`).MustEqual(`true`) + j.Query(`.installed_libraries.[0].library.name`).MustEqual(`"USBHost"`) + j.Query(`.installed_libraries.[0].library.compatible_with."arduino:samd:mkrzero"`).MustEqual(`true`) } _, _, err = cli.Run("lib", "install", "USBHost@1.0.5") require.NoError(t, err) { // Check that the architecture-specific library is still listed - stdout, _, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:samd:mkrzero", "USBHost", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:samd:mkrzero", "USBHost", "--json") require.NoError(t, err) j := requirejson.Parse(t, stdout) - j.Query(`.[0].library.name`).MustEqual(`"USBHost"`) - j.Query(`.[0].library.compatible_with."arduino:samd:mkrzero"`).MustEqual(`true`) + j.Query(`.installed_libraries.[0].library.name`).MustEqual(`"USBHost"`) + j.Query(`.installed_libraries.[0].library.compatible_with."arduino:samd:mkrzero"`).MustEqual(`true`) } // See: https://github.com/arduino/arduino-cli/issues/1656 @@ -1580,10 +1605,10 @@ func TestLibBundlesWhenLibWithTheSameNameIsInstalledGlobally(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "install", "ArduinoOTA@1.0.7") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "examples", "--fqbn", "esp8266:esp8266:generic", "ArduinoOTA", "--format", "json") + stdout, _, err := cli.Run("lib", "examples", "--fqbn", "esp8266:esp8266:generic", "ArduinoOTA", "--json") require.NoError(t, err) - requirejson.Parse(t, stdout).Query(`.[].library.examples[0]`).MustContain(`"BasicOTA"`) - requirejson.Parse(t, stdout).Query(`.[].library.examples[1]`).MustContain(`"OTALeds"`) + requirejson.Parse(t, stdout).Query(`.examples.[].library.examples[0]`).MustContain(`"BasicOTA"`) + requirejson.Parse(t, stdout).Query(`.examples.[].library.examples[1]`).MustContain(`"OTALeds"`) } } @@ -1599,13 +1624,13 @@ func TestLibListDoesNotIncludeEmptyLibraries(t *testing.T) { require.NoError(t, emptyLib.MkdirAll()) // Check that the output of lib list and lib examples is empty - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) - stdout, _, err = cli.Run("lib", "examples", "--format", "json") + stdout, _, err = cli.Run("lib", "examples", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.examples | length`, `0`) // Create a library with a header libWithHeader := cli.SketchbookDir().Join("libraries", "libWithHeader") @@ -1615,13 +1640,13 @@ func TestLibListDoesNotIncludeEmptyLibraries(t *testing.T) { require.NoError(t, f.Close()) // Check that the output of lib list and lib examples contains the library - stdout, _, err = cli.Run("lib", "list", "--format", "json") + stdout, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) - stdout, _, err = cli.Run("lib", "examples", "--format", "json") + stdout, _, err = cli.Run("lib", "examples", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.examples | length`, `1`) } func TestDependencyResolver(t *testing.T) { @@ -1630,9 +1655,6 @@ func TestDependencyResolver(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() - _, _, err := cli.Run("lib", "update-index") - require.NoError(t, err) - done := make(chan bool) go func() { _, _, err := cli.Run("lib", "install", "NTPClient_Generic") @@ -1642,7 +1664,54 @@ func TestDependencyResolver(t *testing.T) { select { case <-done: - case <-time.After(time.Second * 2): + case <-time.After(time.Second * 10): require.FailNow(t, "The install command didn't complete in the allocated time") } } + +func TestDependencyResolverNoOverwrite(t *testing.T) { + // https://github.com/arduino/arduino-cli/issues/1799 + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("lib", "install", "Bounce2@2.53.0") + require.NoError(t, err) + + out, _, err := cli.Run("lib", "deps", "EncoderTool@2.2.0", "--json") + require.NoError(t, err) + outjson := requirejson.Parse(t, out) + outjson.MustContain(`{ + "dependencies": [ + { + "name": "Bounce2", + "version_installed": "2.53" + }, + { + "name": "EncoderTool", + "version_required": "2.2.0" + } + ] + }`) + require.NotEqual(t, outjson.Query("dependencies[0].version_required").String(), `"2.53.0"`) + require.NotEqual(t, outjson.Query("dependencies[0].version_required").String(), `"2.53"`) + + out, _, err = cli.Run("lib", "deps", "EncoderTool@2.2.0", "--no-overwrite", "--json") + require.NoError(t, err) + outjson = requirejson.Parse(t, out) + outjson.MustContain(`{ + "dependencies": [ + { + "name": "Bounce2", + "version_required": "2.53", + "version_installed": "2.53" + }, + { + "name": "EncoderTool", + "version_required": "2.2.0" + } + ] + }`) + + _, _, err = cli.Run("lib", "install", "EncoderTool@2.2.0", "--no-overwrite") + require.NoError(t, err) +} diff --git a/internal/integrationtest/main/main_test.go b/internal/integrationtest/main/main_test.go index 7e039e62768..b702e07aecc 100644 --- a/internal/integrationtest/main/main_test.go +++ b/internal/integrationtest/main/main_test.go @@ -48,8 +48,8 @@ func TestVersion(t *testing.T) { require.Contains(t, string(stdout), "Commit:") require.Empty(t, string(stderr)) - // Checks if "version --format json" has a json as an output - stdout, _, err = cli.Run("version", "--format", "json") + // Checks if "version --json" has a json as an output + stdout, _, err = cli.Run("version", "--json") require.NoError(t, err) var jsonMap map[string]string err = json.Unmarshal(stdout, &jsonMap) diff --git a/internal/integrationtest/monitor/monitor_grpc_test.go b/internal/integrationtest/monitor/monitor_grpc_test.go new file mode 100644 index 00000000000..046774d3e82 --- /dev/null +++ b/internal/integrationtest/monitor/monitor_grpc_test.go @@ -0,0 +1,117 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package monitor_test + +import ( + "context" + "errors" + "fmt" + "io" + "regexp" + "testing" + "time" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestMonitorGRPCClose(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2271 + + env, cli := integrationtest.CreateEnvForDaemon(t) + defer env.CleanUp() + + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + cli.InstallMockedSerialDiscovery(t) + cli.InstallMockedSerialMonitor(t) + + grpcInst := cli.Create() + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + // Run a one-shot board list + boardListResp, err := grpcInst.BoardList(time.Second) + require.NoError(t, err) + ports := boardListResp.GetPorts() + require.NotEmpty(t, ports) + fmt.Printf("Got boardlist response with %d ports\n", len(ports)) + + // Open mocked serial-monitor and close it client-side + tmpFileMatcher := regexp.MustCompile("Tmpfile: (.*)\n") + { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*3) + mon, err := grpcInst.Monitor(ctx, ports[0].GetPort()) + var tmpFile *paths.Path + for { + monResp, err := mon.Recv() + if err != nil { + fmt.Println("MON>", err) + break + } + fmt.Printf("MON> %v\n", monResp) + if rx := monResp.GetRxData(); rx != nil { + if matches := tmpFileMatcher.FindAllStringSubmatch(string(rx), -1); len(matches) > 0 { + fmt.Println("Found tmpFile", matches[0][1]) + tmpFile = paths.New(matches[0][1]) + } + } + } + require.NotNil(t, tmpFile) + // The port is close client-side, it may be still open server-side + require.True(t, tmpFile.Exist()) + cancel() + require.NoError(t, err) + } + + // Now close the monitor using MonitorRequest_Close + { + // Keep a timeout to allow the test to exit in any case + ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) + mon, err := grpcInst.Monitor(ctx, ports[0].GetPort()) + var tmpFile *paths.Path + for { + monResp, err := mon.Recv() + if errors.Is(err, io.EOF) { + fmt.Println("MON>", err) + break + } + + require.NoError(t, err) + fmt.Printf("MON> %v\n", monResp) + if rx := monResp.GetRxData(); rx != nil { + if matches := tmpFileMatcher.FindAllStringSubmatch(string(rx), -1); len(matches) > 0 { + fmt.Println("Found tmpFile", matches[0][1]) + tmpFile = paths.New(matches[0][1]) + go func() { + time.Sleep(time.Second) + fmt.Println("<MON Sent close command") + mon.Send(&commands.MonitorRequest{Message: &commands.MonitorRequest_Close{Close: true}}) + }() + } + } + } + require.NotNil(t, tmpFile) + // The port is closed serverd-side, it must be already closed once the client has received the EOF + require.False(t, tmpFile.Exist()) + cancel() + require.NoError(t, err) + } +} diff --git a/internal/integrationtest/monitor/monitor_test.go b/internal/integrationtest/monitor/monitor_test.go new file mode 100644 index 00000000000..256d8e0f8cb --- /dev/null +++ b/internal/integrationtest/monitor/monitor_test.go @@ -0,0 +1,286 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package monitor_test + +import ( + "bytes" + "io" + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +// returns a reader that tells the mocked monitor to exit +func quitMonitor() io.Reader { + // tells mocked monitor to exit + return bytes.NewBufferString("QUIT\n") +} + +func TestMonitorConfigFlags(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Install AVR platform (this is required to enable the 'serial' monitor...) + // TODO: maybe this is worth opening an issue? + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + // Install mocked discovery and monitor for testing + require.NoError(t, err) + cli.InstallMockedSerialDiscovery(t) + cli.InstallMockedSerialMonitor(t) + + t.Run("NoArgs", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", "--raw") + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARG") + require.Contains(t, string(stdout), "Configuration baudrate = 9600") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("BaudConfig", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", "-c", "baudrate=115200", "--raw") + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARG") + require.Contains(t, string(stdout), "Configuration baudrate = 115200") + require.Contains(t, string(stdout), "Configuration parity = none") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("BaudAndParitfyConfig", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", + "-c", "baudrate=115200", "-c", "parity=even", "--raw") + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARG") + require.Contains(t, string(stdout), "Configuration baudrate = 115200") + require.Contains(t, string(stdout), "Configuration parity = even") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("InvalidConfigKey", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", + "-c", "baud=115200", "-c", "parity=even", "--raw") + require.Error(t, err) + require.Contains(t, string(stderr), "invalid port configuration: baud=115200") + }) + + t.Run("InvalidConfigValue", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", + "-c", "parity=9600", "--raw") + require.Error(t, err) + require.Contains(t, string(stderr), "invalid port configuration value for parity: 9600") + }) +} + +func TestMonitorCommandFlagsAndDefaultPortFQBNSelection(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Install AVR platform + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + // Patch the Yun board to require special RTS/DTR serial configuration + f, err := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6", "boards.txt").Append() + require.NoError(t, err) + _, err = f.WriteString(` +uno.serial.disableRTS=true +uno.serial.disableDTR=false +yun.serial.disableRTS=true +yun.serial.disableDTR=true +`) + require.NoError(t, err) + require.NoError(t, f.Close()) + + // Install mocked discovery and monitor for testing + cli.InstallMockedSerialDiscovery(t) + cli.InstallMockedSerialMonitor(t) + + // Create test sketches + getSketchPath := func(sketch string) string { + p, err := paths.New("testdata", sketch).Abs() + require.NoError(t, err) + require.True(t, p.IsDir()) + return p.String() + } + sketch := getSketchPath("SketchWithNoProfiles") + sketchWithPort := getSketchPath("SketchWithDefaultPort") + sketchWithFQBN := getSketchPath("SketchWithDefaultFQBN") + sketchWithPortAndFQBN := getSketchPath("SketchWithDefaultPortAndFQBN") + + t.Run("NoFlags", func(t *testing.T) { + t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketch) + require.Error(t, err) + require.Contains(t, string(stderr), "No monitor available for the port protocol default") + }) + + t.Run("WithDefaultPort", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPort) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultFQBN", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithFQBN) + require.Error(t, err) + require.Contains(t, string(stderr), "No monitor available for the port protocol default") + }) + + t.Run("WithDefaultPortAndQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = off") + }) + + t.Run("FQBNFromSpecificProfile", func(t *testing.T) { + // The only way to assert we're picking up the fqbn specified from the profile is to provide a wrong value + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", "--profile", "profile1", sketchWithPortAndFQBN) + require.Error(t, err) + require.Contains(t, string(stderr), "not an FQBN: broken_fqbn") + }) + }) + + t.Run("WithPortFlag", func(t *testing.T) { + t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketch) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultPort", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPort) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultFQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = off") + }) + + t.Run("WithDefaultPortAndQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = off") + }) + + t.Run("FQBNFromSpecificProfile", func(t *testing.T) { + // The only way to assert we're picking up the fqbn specified from the profile is to provide a wrong value + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", "--profile", "profile1", sketchWithPortAndFQBN) + require.Error(t, err) + require.Contains(t, string(stderr), "not an FQBN: broken_fqbn") + }) + }) + + t.Run("WithFQBNFlag", func(t *testing.T) { + t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketch) + require.Error(t, err) + require.Contains(t, string(stderr), "No monitor available for the port protocol default") + }) + + t.Run("WithDefaultPort", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketchWithPort) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultFQBN", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketchWithFQBN) + require.Error(t, err) + require.Contains(t, string(stderr), "No monitor available for the port protocol default") + }) + + t.Run("WithDefaultPortAndQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("IgnoreProfile", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", "--profile", "profile1", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + }) + + t.Run("WithPortAndFQBNFlags", func(t *testing.T) { + t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketch) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultPort", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPort) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultFQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultPortAndQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("IgnoreProfile", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", "--profile", "profile1", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + }) +} diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/SketchWithDefaultFQBN.ino b/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/SketchWithDefaultFQBN.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/SketchWithDefaultFQBN.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/sketch.yaml b/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/sketch.yaml new file mode 100644 index 00000000000..19e9541979f --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/sketch.yaml @@ -0,0 +1 @@ +default_fqbn: arduino:avr:yun diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/SketchWithDefaultPort.ino b/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/SketchWithDefaultPort.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/SketchWithDefaultPort.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/sketch.yaml b/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/sketch.yaml new file mode 100644 index 00000000000..5670096124c --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/sketch.yaml @@ -0,0 +1 @@ +default_port: /dev/ttyDEF diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/SketchWithDefaultPortAndFQBN.ino b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/SketchWithDefaultPortAndFQBN.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/SketchWithDefaultPortAndFQBN.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/sketch.yaml b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/sketch.yaml new file mode 100644 index 00000000000..c8549c21b99 --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/sketch.yaml @@ -0,0 +1,5 @@ +default_port: /dev/ttyDEF +default_fqbn: arduino:avr:yun +profiles: + profile1: + fqbn: "broken_fqbn" diff --git a/internal/integrationtest/monitor/testdata/SketchWithNoProfiles/SketchWithNoProfiles.ino b/internal/integrationtest/monitor/testdata/SketchWithNoProfiles/SketchWithNoProfiles.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithNoProfiles/SketchWithNoProfiles.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/profiles/profiles_test.go b/internal/integrationtest/profiles/profiles_test.go index ca26b75b4b3..aafd914db2c 100644 --- a/internal/integrationtest/profiles/profiles_test.go +++ b/internal/integrationtest/profiles/profiles_test.go @@ -89,12 +89,12 @@ func TestCompileWithDefaultProfile(t *testing.T) { { // no default profile -> error missing FQBN - _, _, err := cli.Run("compile", sketchWithoutDefProfilePath.String(), "--format", "json") + _, _, err := cli.Run("compile", sketchWithoutDefProfilePath.String(), "--json") require.Error(t, err) } { // specified fbqn -> compile with specified FQBN and use global installation - stdout, _, err := cli.Run("compile", "-b", "arduino:avr:nano", sketchWithoutDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "-b", "arduino:avr:nano", sketchWithoutDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.3"}`) @@ -102,7 +102,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { } { // specified profile -> use the specified profile - stdout, _, err := cli.Run("compile", "--profile", "avr1", sketchWithoutDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--profile", "avr1", sketchWithoutDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.4"}`) @@ -110,7 +110,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { } { // specified profile and fqbn -> use the specified profile and override fqbn - stdout, _, err := cli.Run("compile", "--profile", "avr1", "-b", "arduino:avr:nano", sketchWithoutDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--profile", "avr1", "-b", "arduino:avr:nano", sketchWithoutDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.4"}`) @@ -119,7 +119,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { { // default profile -> use default profile - stdout, _, err := cli.Run("compile", sketchWithDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", sketchWithDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.5"}`) @@ -127,7 +127,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { } { // default profile, specified fbqn -> use default profile, override fqbn - stdout, _, err := cli.Run("compile", "-b", "arduino:avr:nano", sketchWithDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "-b", "arduino:avr:nano", sketchWithDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.5"}`) @@ -135,7 +135,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { } { // default profile, specified different profile -> use the specified profile - stdout, _, err := cli.Run("compile", "--profile", "avr1", sketchWithDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--profile", "avr1", sketchWithDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.4"}`) @@ -143,7 +143,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { } { // default profile, specified different profile and fqbn -> use the specified profile and override fqbn - stdout, _, err := cli.Run("compile", "--profile", "avr1", "-b", "arduino:avr:nano", sketchWithDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--profile", "avr1", "-b", "arduino:avr:nano", sketchWithDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.4"}`) diff --git a/internal/integrationtest/sketch/sketch_test.go b/internal/integrationtest/sketch/sketch_test.go index aaf599dc305..d454a0221fd 100644 --- a/internal/integrationtest/sketch/sketch_test.go +++ b/internal/integrationtest/sketch/sketch_test.go @@ -350,9 +350,9 @@ func TestSketchArchiveWithMultipleMainFiles(t *testing.T) { cli.SetWorkingDir(sketchDir) _, stderr, err := cli.Run("sketch", "archive") require.Error(t, err) - require.Contains(t, string(stderr), "Sketches with .pde extension are deprecated, please rename the following files to .ino") + require.NotContains(t, string(stderr), "Sketches with .pde extension are deprecated, please rename the following files to .ino") require.Contains(t, string(stderr), relPath.String()) - require.Contains(t, string(stderr), "Error archiving: Can't open sketch: multiple main sketch files found") + require.Contains(t, string(stderr), "Can't open sketch: multiple main sketch files found") } func TestSketchArchiveCaseMismatchFails(t *testing.T) { @@ -370,7 +370,7 @@ func TestSketchArchiveCaseMismatchFails(t *testing.T) { _, stderr, err := cli.Run("sketch", "archive", sketchPath.String()) require.Error(t, err) - require.Contains(t, string(stderr), "Error archiving: Can't open sketch:") + require.Contains(t, string(stderr), "Can't open sketch:") } func TestSketchNewDotArgOverwrite(t *testing.T) { diff --git a/internal/integrationtest/testdata/sketch_with_profile/sketch.yaml b/internal/integrationtest/testdata/sketch_with_profile/sketch.yaml index ed40ce874f3..bc177c5023a 100644 --- a/internal/integrationtest/testdata/sketch_with_profile/sketch.yaml +++ b/internal/integrationtest/testdata/sketch_with_profile/sketch.yaml @@ -6,7 +6,16 @@ profiles: avr2: fqbn: arduino:avr:uno + programmer: atmel_ice platforms: - platform: arduino:avr (1.8.5) libraries: - Arduino_JSON (0.1.0) + + samd: + fqbn: arduino:samd:mkr1000 + programmer: atmel_ice + platforms: + - platform: arduino:samd (1.8.13) + libraries: + - Arduino_JSON (0.1.0) diff --git a/internal/integrationtest/testdata/test_index.json b/internal/integrationtest/testdata/test_index.json index 70de2ac0fee..95d38d202d4 100644 --- a/internal/integrationtest/testdata/test_index.json +++ b/internal/integrationtest/testdata/test_index.json @@ -236,6 +236,174 @@ ] } ] + }, + { + "name": "foo_vendor", + "maintainer": "Foo Developer", + "websiteURL": "http://example.com", + "email": "test@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "Foo Boards", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "https://github.com/damellis/attiny/archive/702aa287455f7e052cf94fd4949398fec0ef21b8.zip", + "archiveFileName": "702aa287455f7e052cf94fd4949398fec0ef21b8.zip", + "checksum": "SHA-256:bfffa4a700e42ae993895f5eea22bc369ba5ac3ea36eca18ac5f72a05bb60ab5", + "size": "5005", + "boards": [], + "toolsDependencies": [ + { + "packager": "foo_vendor", + "name": "some_tool", + "version": "1.0.0" + } + ] + }, + { + "name": "Foo Boards", + "architecture": "avr", + "version": "1.0.1", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "https://github.com/damellis/attiny/archive/76ca88ce3c195fcba8e8a645084e352965dc80e0.zip", + "archiveFileName": "76ca88ce3c195fcba8e8a645084e352965dc80e0.zip", + "checksum": "SHA-256:49a4dfc3796caf2533050b0b962ae0affb2471b8ded1283936d7b712cc1fdff1", + "size": "5719", + "boards": [], + "toolsDependencies": [ + { + "packager": "foo_vendor", + "name": "some_tool", + "version": "1.0.0" + } + ] + }, + { + "name": "Foo Boards", + "architecture": "avr", + "version": "1.0.2", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "https://github.com/damellis/attiny/archive/76ca88ce3c195fcba8e8a645084e352965dc80e0.zip", + "archiveFileName": "76ca88ce3c195fcba8e8a645084e352965dc80e0.zip", + "checksum": "SHA-256:49a4dfc3796caf2533050b0b962ae0affb2471b8ded1283936d7b712cc1fdff1", + "size": "5719", + "boards": [], + "toolsDependencies": [ + { + "packager": "foo_vendor", + "name": "incompatible_tool", + "version": "2.0.0" + } + ] + } + ], + "tools": [ + { + "name": "some_tool", + "version": "1.0.0", + "systems": [ + { + "size": "219631", + "checksum": "SHA-256:2a8e68c5d803aa6f902ef219f177ec3a4c28275d85cbe272962ad2cd374f50d1", + "host": "arm-linux-gnueabihf", + "archiveFileName": "avrdude-6.3.0-arduino17-armhf-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-armhf-pc-linux-gnu.tar.bz2" + }, + { + "size": "229852", + "checksum": "SHA-256:6cf948f751acfe7b96684537f2291c766ec8b54b4f7dc95539864821456fa9fc", + "host": "aarch64-linux-gnu", + "archiveFileName": "avrdude-6.3.0-arduino17-aarch64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-aarch64-pc-linux-gnu.tar.bz2" + }, + { + "size": "279045", + "checksum": "SHA-256:120cc9edaae699e7e9ac50b1b8eb0e7d51fdfa555bac54233c2511e6ee5418c9", + "host": "x86_64-apple-darwin12", + "archiveFileName": "avrdude-6.3.0-arduino17-x86_64-apple-darwin12.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-x86_64-apple-darwin12.tar.bz2" + }, + { + "size": "254271", + "checksum": "SHA-256:accdfb920af2aabf4f7461d2ac73c0751760f525216dc4e7657427a78c60d13d", + "host": "x86_64-linux-gnu", + "archiveFileName": "avrdude-6.3.0-arduino17-x86_64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-x86_64-pc-linux-gnu.tar.bz2" + }, + { + "size": "244550", + "checksum": "SHA-256:5c8cc6c17db9300e1451fe41cd7178b0442b4490ee6fdbc0aed9811aef96c05f", + "host": "i686-linux-gnu", + "archiveFileName": "avrdude-6.3.0-arduino17-i686-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-i686-pc-linux-gnu.tar.bz2" + }, + { + "size": "328460", + "checksum": "SHA-256:e99188873c7c5ad8f8f906f068c33600e758b2e36cce3adbd518a21bd266749d", + "host": "i686-mingw32", + "archiveFileName": "avrdude-6.3.0-arduino17-i686-w64-mingw32.zip", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-i686-w64-mingw32.zip" + } + ] + }, + { + "name": "incompatible_tool", + "version": "2.0.0", + "systems": [] + } + ] + }, + { + "name": "incompatible_vendor", + "maintainer": "Incompatible Developer", + "websiteURL": "http://example.com", + "email": "test@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "Incompatible Boards", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "https://github.com/damellis/attiny/archive/702aa287455f7e052cf94fd4949398fec0ef21b8.zip", + "archiveFileName": "702aa287455f7e052cf94fd4949398fec0ef21b8.zip", + "checksum": "SHA-256:bfffa4a700e42ae993895f5eea22bc369ba5ac3ea36eca18ac5f72a05bb60ab5", + "size": "5005", + "boards": [], + "toolsDependencies": [ + { + "packager": "incompatible_vendor", + "name": "incompatible_tool", + "version": "2.0.0" + } + ] + } + ], + "tools": [ + { + "name": "incompatible_tool", + "version": "2.0.0", + "systems": [] + } + ] } ] } diff --git a/internal/integrationtest/upload/upload_test.go b/internal/integrationtest/upload/upload_test.go index b3c88cefeb9..0eebbe60ceb 100644 --- a/internal/integrationtest/upload/upload_test.go +++ b/internal/integrationtest/upload/upload_test.go @@ -40,13 +40,13 @@ type board struct { func detectedBoards(t *testing.T, cli *integrationtest.ArduinoCLI) []board { // This fixture provides a list of all the boards attached to the host. - // This fixture will parse the JSON output of `arduino-cli board list --format json` + // This fixture will parse the JSON output of `arduino-cli board list --json` // to extract all the connected boards data. // :returns a list `Board` objects. var boards []board - stdout, _, err := cli.Run("board", "list", "--format", "json") + stdout, _, err := cli.Run("board", "list", "--json") require.NoError(t, err) length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query(".[] | .matching_boards | length").String()) require.NoError(t, err) @@ -67,7 +67,7 @@ func detectedBoards(t *testing.T, cli *integrationtest.ArduinoCLI) []board { func waitForBoard(t *testing.T, cli *integrationtest.ArduinoCLI) { timeEnd := time.Now().Unix() + 10 for time.Now().Unix() < timeEnd { - stdout, _, err := cli.Run("board", "list", "--format", "json") + stdout, _, err := cli.Run("board", "list", "--json") require.NoError(t, err) length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query("length").String()) require.NoError(t, err) @@ -370,7 +370,7 @@ func TestUploadSketchWithPdeExtension(t *testing.T) { require.NoError(t, err) // Compile sketch first - stdout, _, err := cli.Run("compile", "--clean", "-b", board.fqbn, sketchPath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--clean", "-b", board.fqbn, sketchPath.String(), "--json") require.NoError(t, err) buildDir := requirejson.Parse(t, stdout).Query(".builder_result | .build_path").String() buildDir = strings.Trim(strings.ReplaceAll(buildDir, "\\\\", "\\"), "\"") @@ -435,7 +435,7 @@ func TestUploadWithInputDirContainingMultipleBinaries(t *testing.T) { binariesDir := cli.SketchbookDir().Join("build", "BuiltBinaries") _, _, err = cli.Run("compile", "--clean", "-b", board.fqbn, sketchOnePath.String(), "--build-path", binariesDir.String()) require.NoError(t, err) - stdout, _, err := cli.Run("compile", "--clean", "-b", board.fqbn, sketchTwoPath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--clean", "-b", board.fqbn, sketchTwoPath.String(), "--json") require.NoError(t, err) buildDirTwo := requirejson.Parse(t, stdout).Query(".builder_result | .build_path").String() buildDirTwo = strings.Trim(strings.ReplaceAll(buildDirTwo, "\\\\", "\\"), "\"") diff --git a/internal/integrationtest/upload_mock/upload_mock_test.go b/internal/integrationtest/upload_mock/upload_mock_test.go index d88fa84a91d..330358bb1ba 100644 --- a/internal/integrationtest/upload_mock/upload_mock_test.go +++ b/internal/integrationtest/upload_mock/upload_mock_test.go @@ -44,7 +44,7 @@ type parametersMap struct { func TestUploadSketch(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) - defer env.CleanUp() + t.Cleanup(env.CleanUp) indexes := []string{ "https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json", @@ -655,13 +655,14 @@ func TestUploadSketch(t *testing.T) { sketchPath := cli.SketchbookDir().Join(sketchName) _, _, err := cli.Run("sketch", "new", sketchPath.String()) require.NoError(t, err) + buildDir := generateBuildDir(sketchPath, t) + t.Cleanup(func() { buildDir.RemoveAll() }) - var stdout []byte - - for i, test := range testParameters { + for i, _test := range testParameters { + test := _test t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { - buildDir := generateBuildDir(sketchPath, t) - defer buildDir.RemoveAll() + t.Parallel() + var stdout []byte if test.Programmer != "" { if test.UploadPort != "" { stdout, _, err = cli.Run("upload", "-p", test.UploadPort, "-P", test.Programmer, "-b", test.Fqbn, sketchPath.String(), "--dry-run", "-v") @@ -686,10 +687,11 @@ func TestUploadSketch(t *testing.T) { }) } - for i, test := range testParametersMap { + for i, _test := range testParametersMap { + test := _test t.Run(fmt.Sprintf("WithMap%d", i), func(t *testing.T) { - buildDir := generateBuildDir(sketchPath, t) - defer buildDir.RemoveAll() + t.Parallel() + var stdout []byte if test.Programmer != "" { if test.UploadPort != "" { stdout, _, err = cli.Run("upload", "-p", test.UploadPort, "-P", test.Programmer, "-b", test.Fqbn, sketchPath.String(), "--dry-run", "-v") @@ -724,3 +726,44 @@ func generateBuildDir(sketchPath *paths.Path, t *testing.T) *paths.Path { require.NoError(t, buildDir.ToAbs()) return buildDir } + +func TestUploadWithInputDirFlag(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("core", "install", "arduino:mbed_opta") + require.NoError(t, err) + + sketchPath := cli.SketchbookDir().Join("TestSketchForUpload") + _, _, err = cli.Run("sketch", "new", sketchPath.String()) + require.NoError(t, err) + + // Create a fake build directory + buildDir := sketchPath.Join("build") + require.NoError(t, buildDir.MkdirAll()) + require.NoError(t, buildDir.Join("TestSketchForUpload.ino.bin").WriteFile(nil)) + require.NoError(t, buildDir.Join("TestSketchForUpload.ino.elf").WriteFile(nil)) + require.NoError(t, buildDir.Join("TestSketchForUpload.ino.hex").WriteFile(nil)) + require.NoError(t, buildDir.Join("TestSketchForUpload.ino.map").WriteFile(nil)) + + // Test with input-dir flag + _, _, err = cli.Run( + "upload", + "-b", "arduino:mbed_opta:opta", + "-i", buildDir.String(), + "-t", + "-p", "/dev/ttyACM0", + "--dry-run", "-v", + sketchPath.String()) + require.NoError(t, err) + + // Test with input-dir flag and no sketch + _, _, err = cli.Run( + "upload", + "-b", "arduino:mbed_opta:opta", + "-i", buildDir.String(), + "-t", + "-p", "/dev/ttyACM0", + "--dry-run", "-v") + require.NoError(t, err) +} diff --git a/internal/inventory/inventory.go b/internal/inventory/inventory.go index 05b8f1ea24b..4792c692bf8 100644 --- a/internal/inventory/inventory.go +++ b/internal/inventory/inventory.go @@ -21,7 +21,7 @@ import ( "path/filepath" "sync" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/gofrs/uuid/v5" "github.com/sirupsen/logrus" "github.com/spf13/viper" @@ -35,7 +35,6 @@ var ( Type = "yaml" // Name is the inventory file Name with Type as extension Name = "inventory" + "." + Type - tr = i18n.Tr configFilePath string ) @@ -65,13 +64,13 @@ func Init(configPath string) error { func generateInstallationData() error { installationID, err := uuid.NewV4() if err != nil { - return fmt.Errorf(tr("generating installation.id: %w"), err) + return fmt.Errorf("%s: %w", i18n.Tr("generating installation.id"), err) } Store.Set("installation.id", installationID.String()) installationSecret, err := uuid.NewV4() if err != nil { - return fmt.Errorf(tr("generating installation.secret: %w"), err) + return fmt.Errorf("%s: %w", i18n.Tr("generating installation.secret"), err) } Store.Set("installation.secret", installationSecret.String()) return nil @@ -90,13 +89,13 @@ func WriteStore() error { // Create config dir if not present, // MkdirAll will retrun no error if the path already exists if err := os.MkdirAll(configPath, os.FileMode(0755)); err != nil { - return fmt.Errorf(tr("invalid path creating config dir: %[1]s error: %[2]w"), configPath, err) + return fmt.Errorf("%s: %w", i18n.Tr("invalid path creating config dir: %[1]s error", configPath), err) } // Create file if not present err := Store.WriteConfigAs(configFilePath) if err != nil { - return fmt.Errorf(tr("invalid path writing inventory file: %[1]s error: %[2]w"), configFilePath, err) + return fmt.Errorf("%s: %w", i18n.Tr("invalid path writing inventory file: %[1]s error", configFilePath), err) } return nil diff --git a/internal/mock_serial_discovery/.gitignore b/internal/mock_serial_discovery/.gitignore new file mode 100644 index 00000000000..4eb3daf49c9 --- /dev/null +++ b/internal/mock_serial_discovery/.gitignore @@ -0,0 +1 @@ +mock_serial_discovery diff --git a/internal/mock_serial_discovery/main.go b/internal/mock_serial_discovery/main.go new file mode 100644 index 00000000000..af25b448331 --- /dev/null +++ b/internal/mock_serial_discovery/main.go @@ -0,0 +1,100 @@ +// +// This file is part arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to modify or +// otherwise use the software for commercial activities involving the Arduino +// software without disclosing the source code of your own applications. To purchase +// a commercial license, send an email to license@arduino.cc. +// + +package main + +import ( + "errors" + "os" + "time" + + "github.com/arduino/go-properties-orderedmap" + discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2" +) + +type mockSerialDiscovery struct { + startSyncCount int + closeChan chan<- bool +} + +func main() { + dummy := &mockSerialDiscovery{} + server := discovery.NewServer(dummy) + if err := server.Run(os.Stdin, os.Stdout); err != nil { + os.Exit(1) + } +} + +// Hello does nothing here... +func (d *mockSerialDiscovery) Hello(userAgent string, protocol int) error { + return nil +} + +// Quit does nothing here... +func (d *mockSerialDiscovery) Quit() {} + +// Stop terminates the discovery loop +func (d *mockSerialDiscovery) Stop() error { + if d.closeChan != nil { + d.closeChan <- true + close(d.closeChan) + d.closeChan = nil + } + return nil +} + +// StartSync starts the goroutine that generates fake Ports. +func (d *mockSerialDiscovery) StartSync(eventCB discovery.EventCallback, errorCB discovery.ErrorCallback) error { + // Every 5 starts produce an error + d.startSyncCount++ + if d.startSyncCount%5 == 0 { + return errors.New("could not start_sync every 5 times") + } + + c := make(chan bool) + d.closeChan = c + + // Start asynchronous event emitter + go func() { + var closeChan <-chan bool = c + + // Output initial port state + eventCB("add", &discovery.Port{ + Address: "/dev/ttyCIAO", + AddressLabel: "Mocked Serial port", + Protocol: "serial", + ProtocolLabel: "Serial", + HardwareID: "123456", + Properties: properties.NewFromHashmap(map[string]string{ + "vid": "0x2341", + "pid": "0x0041", + "serial": "123456", + }), + }) + + select { + case <-closeChan: + return + case <-time.After(5 * time.Second): + errorCB("unrecoverable error, cannot send more events") + } + + <-closeChan + }() + + return nil +} diff --git a/internal/mock_serial_monitor/.gitignore b/internal/mock_serial_monitor/.gitignore new file mode 100644 index 00000000000..eae1d555aab --- /dev/null +++ b/internal/mock_serial_monitor/.gitignore @@ -0,0 +1 @@ +mock_serial_monitor diff --git a/internal/mock_serial_monitor/main.go b/internal/mock_serial_monitor/main.go new file mode 100644 index 00000000000..f13745e1458 --- /dev/null +++ b/internal/mock_serial_monitor/main.go @@ -0,0 +1,208 @@ +// +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to modify or +// otherwise use the software for commercial activities involving the Arduino +// software without disclosing the source code of your own applications. To purchase +// a commercial license, send an email to license@arduino.cc. +// + +package main + +import ( + "errors" + "fmt" + "io" + "os" + "slices" + "strings" + "time" + + "github.com/arduino/go-paths-helper" + monitor "github.com/arduino/pluggable-monitor-protocol-handler" +) + +func main() { + monitorServer := monitor.NewServer(NewSerialMonitor()) + if err := monitorServer.Run(os.Stdin, os.Stdout); err != nil { + fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error()) + os.Exit(1) + } +} + +// SerialMonitor is the implementation of the serial ports pluggable-monitor +type SerialMonitor struct { + mockedSerialPort io.ReadWriteCloser + serialSettings *monitor.PortDescriptor + openedPort bool + muxFile *paths.Path +} + +// NewSerialMonitor will initialize and return a SerialMonitor +func NewSerialMonitor() *SerialMonitor { + return &SerialMonitor{ + serialSettings: &monitor.PortDescriptor{ + Protocol: "serial", + ConfigurationParameter: map[string]*monitor.PortParameterDescriptor{ + "baudrate": { + Label: "Baudrate", + Type: "enum", + Values: []string{ + "300", "600", "750", + "1200", "2400", "4800", "9600", + "19200", "31250", "38400", "57600", "74880", + "115200", "230400", "250000", "460800", "500000", "921600", + "1000000", "2000000"}, + Selected: "9600", + }, + "parity": { + Label: "Parity", + Type: "enum", + Values: []string{"none", "even", "odd", "mark", "space"}, + Selected: "none", + }, + "bits": { + Label: "Data bits", + Type: "enum", + Values: []string{"5", "6", "7", "8", "9"}, + Selected: "8", + }, + "stop_bits": { + Label: "Stop bits", + Type: "enum", + Values: []string{"1", "1.5", "2"}, + Selected: "1", + }, + "rts": { + Label: "RTS", + Type: "enum", + Values: []string{"on", "off"}, + Selected: "on", + }, + "dtr": { + Label: "DTR", + Type: "enum", + Values: []string{"on", "off"}, + Selected: "on", + }, + }, + }, + openedPort: false, + } +} + +// Hello is the handler for the pluggable-monitor HELLO command +func (d *SerialMonitor) Hello(userAgent string, protocol int) error { + return nil +} + +// Describe is the handler for the pluggable-monitor DESCRIBE command +func (d *SerialMonitor) Describe() (*monitor.PortDescriptor, error) { + return d.serialSettings, nil +} + +// Configure is the handler for the pluggable-monitor CONFIGURE command +func (d *SerialMonitor) Configure(parameterName string, value string) error { + parameter, ok := d.serialSettings.ConfigurationParameter[parameterName] + if !ok { + return fmt.Errorf("could not find parameter named %s", parameterName) + } + if !slices.Contains(parameter.Values, value) { + return fmt.Errorf("invalid value for parameter %s: %s", parameterName, value) + } + // Set configuration + parameter.Selected = value + + return nil +} + +// Open is the handler for the pluggable-monitor OPEN command +func (d *SerialMonitor) Open(boardPort string) (io.ReadWriter, error) { + if d.openedPort { + return nil, fmt.Errorf("port already opened: %s", boardPort) + } + d.openedPort = true + sideA, sideB := newBidirectionalPipe() + d.mockedSerialPort = sideA + if muxFile, err := paths.MkTempFile(nil, ""); err == nil { + d.muxFile = paths.NewFromFile(muxFile) + muxFile.Close() + } + go func() { + buff := make([]byte, 1024) + d.mockedSerialPort.Write([]byte("Opened port: " + boardPort + "\n")) + if d.muxFile != nil { + d.mockedSerialPort.Write([]byte("Tmpfile: " + d.muxFile.String() + "\n")) + } + for parameter, descriptor := range d.serialSettings.ConfigurationParameter { + d.mockedSerialPort.Write([]byte( + fmt.Sprintf("Configuration %s = %s\n", parameter, descriptor.Selected))) + } + for { + n, err := d.mockedSerialPort.Read(buff) + if err != nil { + d.mockedSerialPort.Close() + return + } + if strings.Contains(string(buff[:n]), "QUIT") { + d.mockedSerialPort.Close() + return + } + d.mockedSerialPort.Write([]byte("Received: >")) + d.mockedSerialPort.Write(buff[:n]) + d.mockedSerialPort.Write([]byte("<\n")) + } + }() + return sideB, nil +} + +func newBidirectionalPipe() (io.ReadWriteCloser, io.ReadWriteCloser) { + in1, out1 := io.Pipe() + in2, out2 := io.Pipe() + a := &bidirectionalPipe{in: in1, out: out2} + b := &bidirectionalPipe{in: in2, out: out1} + return a, b +} + +type bidirectionalPipe struct { + in io.Reader + out io.WriteCloser +} + +func (p *bidirectionalPipe) Read(buff []byte) (int, error) { + return p.in.Read(buff) +} + +func (p *bidirectionalPipe) Write(buff []byte) (int, error) { + return p.out.Write(buff) +} + +func (p *bidirectionalPipe) Close() error { + return p.out.Close() +} + +// Close is the handler for the pluggable-monitor CLOSE command +func (d *SerialMonitor) Close() error { + if !d.openedPort { + return errors.New("port already closed") + } + d.mockedSerialPort.Close() + d.openedPort = false + if d.muxFile != nil { + time.Sleep(2000 * time.Millisecond) // Emulate a small delay closing the port to check gRPC synchronization + d.muxFile.Remove() + d.muxFile = nil + } + return nil +} + +// Quit is the handler for the pluggable-monitor QUIT command +func (d *SerialMonitor) Quit() {} diff --git a/internal/orderedmap/orderedmap.go b/internal/orderedmap/orderedmap.go new file mode 100644 index 00000000000..0dce816863d --- /dev/null +++ b/internal/orderedmap/orderedmap.go @@ -0,0 +1,184 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package orderedmap + +import ( + "bytes" + "encoding/json" + "fmt" + "slices" +) + +// Map is a map that keeps ordering insertion. +type Map[K any, V any] interface { + Get(K) V + GetOk(key K) (V, bool) + Set(K, V) + Size() int + ContainsKey(key K) bool + Keys() []K + Merge(...Map[K, V]) Map[K, V] + SortKeys(f func(x, y K) int) + SortStableKeys(f func(x, y K) int) + Values() []V + Clone() Map[K, V] + Remove(key K) + MarshalJSON() ([]byte, error) +} + +type scalars interface { + ~int | ~int8 | ~int16 | ~int32 | ~int64 | ~uint | ~uint8 | + ~uint16 | ~uint32 | ~uint64 | ~uintptr | ~float32 | ~float64 | ~string +} + +// NewWithConversionFunc creates a map using the given conversion function +// to convert non-comparable key type to comparable items. +// The conversion function must be bijective. +func NewWithConversionFunc[K any, V any, C scalars](conv func(K) C) Map[K, V] { + return &mapImpl[K, V, C]{ + conv: conv, + kv: map[C]V{}, + o: []K{}, + } +} + +// New creates a map +func New[K scalars, V any]() Map[K, V] { + return &mapImpl[K, V, K]{ + conv: func(in K) K { return in }, // identity + kv: map[K]V{}, + o: []K{}, + } +} + +type mapImpl[K any, V any, C scalars] struct { + conv func(K) C + kv map[C]V + o []K +} + +// Get retrieves the value corresponding to key +func (m *mapImpl[K, V, C]) Get(key K) V { + return m.kv[m.conv(key)] +} + +// GetOk retrieves the value corresponding to key and returns a true/false indicator +// to check if the key is present in the map (true if the key is present) +func (m *mapImpl[K, V, C]) GetOk(key K) (V, bool) { + v, ok := m.kv[m.conv(key)] + return v, ok +} + +// ContainsKey returns true if the map contains the specified key +func (m *mapImpl[K, V, C]) ContainsKey(key K) bool { + _, has := m.kv[m.conv(key)] + return has +} + +// MarshalJSON marshal the map into json mantaining the order of the key +func (m *mapImpl[K, V, C]) MarshalJSON() ([]byte, error) { + if m.Size() == 0 { + return []byte("{}"), nil + } + var buf bytes.Buffer + buf.WriteByte('{') + encoder := json.NewEncoder(&buf) + for _, k := range m.o { + // Here we convert non string keys in string. + if err := encoder.Encode(fmt.Sprintf("%v", m.conv(k))); err != nil { + return nil, err + } + buf.WriteByte(':') + if err := encoder.Encode(m.kv[m.conv(k)]); err != nil { + return nil, err + } + buf.WriteByte(',') + } + buf.Truncate(buf.Len() - 1) // remove last `,` + buf.WriteByte('}') + return buf.Bytes(), nil +} + +// Set inserts or replaces an existing key-value pair in the map +func (m *mapImpl[K, V, C]) Set(key K, value V) { + compKey := m.conv(key) + if _, has := m.kv[compKey]; has { + m.Remove(key) + } + m.kv[compKey] = value + m.o = append(m.o, key) +} + +// Size returns the number of elements in the map +func (m *mapImpl[K, V, C]) Size() int { + return len(m.kv) +} + +// Remove removes the key from the map +func (m *mapImpl[K, V, C]) Remove(key K) { + compKey := m.conv(key) + delete(m.kv, compKey) + for i, k := range m.o { + if m.conv(k) == compKey { + m.o = append(m.o[:i], m.o[i+1:]...) + return + } + } +} + +// Merge merges other Maps into this one. Each key/value of the merged Maps replaces +// the key/value present in the original Map. +func (m *mapImpl[K, V, C]) Merge(sources ...Map[K, V]) Map[K, V] { + for _, source := range sources { + for _, key := range source.Keys() { + value := source.Get(key) + m.Set(key, value) + } + } + return m +} + +// Keys returns an array of the keys contained in the Map +func (m *mapImpl[K, V, C]) Keys() []K { + keys := make([]K, len(m.o)) + copy(keys, m.o) + return keys +} + +func (m *mapImpl[K, V, C]) SortKeys(f func(x, y K) int) { + slices.SortFunc(m.o, f) +} + +func (m *mapImpl[K, V, C]) SortStableKeys(f func(x, y K) int) { + slices.SortStableFunc(m.o, f) +} + +// Values returns an array of the values contained in the Map. Duplicated +// values are repeated in the list accordingly. +func (m *mapImpl[K, V, C]) Values() []V { + values := make([]V, len(m.o)) + for i, key := range m.o { + values[i] = m.kv[m.conv(key)] + } + return values +} + +// Clone makes a copy of the Map +func (m *mapImpl[K, V, C]) Clone() Map[K, V] { + clone := NewWithConversionFunc[K, V, C](m.conv) + clone.Merge(m) + return clone +} diff --git a/internal/orderedmap/orderedmap_test.go b/internal/orderedmap/orderedmap_test.go new file mode 100644 index 00000000000..bd7975f1949 --- /dev/null +++ b/internal/orderedmap/orderedmap_test.go @@ -0,0 +1,361 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package orderedmap_test + +import ( + "testing" + + "github.com/arduino/arduino-cli/internal/orderedmap" + "github.com/stretchr/testify/require" +) + +func TestGet(t *testing.T) { + t.Run("the key is a string", func(t *testing.T) { + m := orderedmap.New[string, int]() + + require.Zero(t, m.Get("not-existing-key")) + v, ok := m.GetOk("not-existing-key") + require.Zero(t, v) + require.False(t, ok) + + m.Set("existing-key", 1) + require.Equal(t, 1, m.Get("existing-key")) + v, ok = m.GetOk("existing-key") + require.Equal(t, 1, v) + require.True(t, ok) + + // test empty key + m.Set("", 2) + require.Equal(t, 2, m.Get("")) + v, ok = m.GetOk("") + require.Equal(t, 2, v) + require.True(t, ok) + }) + + t.Run("the key is int", func(t *testing.T) { + m := orderedmap.New[int, int]() + + require.Equal(t, 0, m.Get(1)) + v, ok := m.GetOk(1) + require.Zero(t, v) + require.False(t, ok) + + m.Set(1, 1) + require.Equal(t, 1, m.Get(1)) + v, ok = m.GetOk(1) + require.Equal(t, 1, v) + require.True(t, ok) + + // test empty key + m.Set(0, 2) + require.Equal(t, 2, m.Get(0)) + v, ok = m.GetOk(0) + require.Equal(t, 2, v) + require.True(t, ok) + }) + + t.Run("custom comparable key", func(t *testing.T) { + type A struct { + b []byte + } + m := orderedmap.NewWithConversionFunc[*A, int, string]( + func(a *A) string { + if a == nil { + return "" + } + return string(a.b) + }, + ) + require.Zero(t, m.Get(&A{})) + require.Zero(t, m.Get(nil)) + + // Here we're using the conversion function to set the key, using a different + // pointer to retrieve the value works. + m.Set(&A{b: []byte{60, 61, 62}}, 1) + require.Equal(t, 1, m.Get(&A{b: []byte{60, 61, 62}})) + + m.Set(nil, 2) + require.Equal(t, 2, m.Get(nil)) + }) +} + +func TestSet(t *testing.T) { + t.Run("insert 3 different keys", func(t *testing.T) { + m := orderedmap.New[string, int]() + m.Set("a", 1) + m.Set("b", 2) + m.Set("c", 3) + require.Equal(t, 1, m.Get("a")) + require.Equal(t, 2, m.Get("b")) + require.Equal(t, 3, m.Get("c")) + }) + t.Run("insert equal keys", func(t *testing.T) { + m := orderedmap.New[string, int]() + m.Set("a", 1) + m.Set("a", 2) + require.Equal(t, 2, m.Get("a")) + }) +} + +func TestSize(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m := orderedmap.New[string, bool]() + require.Zero(t, m.Size()) + }) + t.Run("one element", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + require.Equal(t, 1, m.Size()) + }) + t.Run("three elements", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("b", true) + m.Set("c", true) + require.Equal(t, 3, m.Size()) + }) + t.Run("insert same keys result in size 1", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("a", false) + m.Set("a", true) + require.Equal(t, 1, m.Size()) + }) +} + +func TestKeys(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m := orderedmap.New[string, bool]() + require.Empty(t, m.Keys()) + }) + t.Run("one element", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + require.Len(t, m.Keys(), 1) + }) + t.Run("keys respect order of insertion", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("b", true) + m.Set("c", true) + require.Equal(t, []string{"a", "b", "c"}, m.Keys()) + }) + t.Run("replacing a key changes the ordering", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("b", true) + m.Set("a", false) + require.Equal(t, []string{"b", "a"}, m.Keys()) + }) + t.Run("delete a key", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("b", true) + m.Remove("a") + require.Equal(t, []string{"b"}, m.Keys()) + }) +} + +func TestRemove(t *testing.T) { + t.Run("key doesn't exist", func(t *testing.T) { + m := orderedmap.New[string, bool]() + require.Zero(t, m.Get("not-existing-key")) + m.Remove("not-existing-key") + require.Zero(t, m.Get("not-existing-key")) + }) + t.Run("key exist", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + require.True(t, m.Get("a")) + + m.Remove("a") + require.False(t, m.Get("a")) + }) + t.Run("key deletion doesn't affect other keys", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("b", true) + m.Remove("a") + require.True(t, m.Get("b")) + _, ok := m.GetOk("a") + require.False(t, ok) + }) +} + +func TestMerge(t *testing.T) { + t.Run("merge empty maps", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m2 := orderedmap.New[string, int]() + + merged := m1.Merge(m2) + require.Equal(t, m1, merged) + require.Len(t, m1.Keys(), 0) + }) + + t.Run("merge multiple elements", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m1.Set("a", 1) + m1.Set("b", 2) + m1.Set("c", 3) + + m2 := orderedmap.New[string, int]() + m2.Set("d", 4) + m2.Set("e", 5) + + // assert that the Merge return is m1 + merged := m1.Merge(m2) + require.Equal(t, m1, merged) + + // assert we find the merged elements in the map + require.Equal(t, 5, m1.Size()) + require.Equal(t, 4, m1.Get("d")) + require.Equal(t, 5, m1.Get("e")) + require.Equal(t, []string{"a", "b", "c", "d", "e"}, m1.Keys()) + + require.Equal(t, []string{"d", "e"}, m2.Keys()) + }) +} + +func TestSortKeys(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + require.Equal(t, []string{}, m1.Keys()) + m1.SortKeys(func(x, y string) int { + if x < y { + return -1 + } + return 1 + }) + require.Equal(t, []string{}, m1.Keys()) + }) + t.Run("sort ascending", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m1.Set("c", 3) + m1.Set("b", 2) + m1.Set("a", 1) + m1.Set("z", 4) + + require.Equal(t, []string{"c", "b", "a", "z"}, m1.Keys()) + m1.SortKeys(func(x, y string) int { + if x < y { + return -1 + } + return 1 + }) + require.Equal(t, []string{"a", "b", "c", "z"}, m1.Keys()) + }) +} + +func TestValues(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + require.Empty(t, m1.Values()) + }) + t.Run("values respect order of insertion", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m1.Set("a", 1) + m1.Set("b", 2) + m1.Set("c", 3) + require.Equal(t, []int{1, 2, 3}, m1.Values()) + }) + t.Run("after a key sort values respect the new order", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m1.Set("c", 3) + m1.Set("b", 2) + m1.Set("a", 1) + m1.Set("z", 4) + require.Equal(t, []int{3, 2, 1, 4}, m1.Values()) + m1.SortKeys(func(x, y string) int { + if x < y { + return -1 + } + return 1 + }) + require.Equal(t, []int{1, 2, 3, 4}, m1.Values()) + }) +} + +func TestClone(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + clone := m1.Clone() + require.NotEqual(t, m1, clone) + require.Equal(t, m1.Keys(), clone.Keys()) + require.Equal(t, m1.Values(), clone.Values()) + }) + t.Run("clone doesn't affect the original map", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m1.Set("a", 1) + m1.Set("b", 2) + m1.Set("c", 3) + + clone := m1.Clone() + + require.NotEqual(t, m1, clone) + require.Equal(t, m1.Keys(), clone.Keys()) + require.Equal(t, m1.Values(), clone.Values()) + + clone.Set("d", 4) + require.Equal(t, 4, clone.Get("d")) + _, ok := m1.GetOk("d") + require.False(t, ok) + }) +} + +func TestMarshallJSON(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m := orderedmap.New[string, int]() + mapJSON, err := m.MarshalJSON() + require.NoError(t, err) + require.JSONEq(t, `{}`, string(mapJSON)) + }) + t.Run("respect the order of insertion", func(t *testing.T) { + m := orderedmap.New[string, int]() + m.Set("a", 1) + m.Set("b", 2) + m.Set("c", 3) + mapJSON, err := m.MarshalJSON() + require.NoError(t, err) + require.JSONEq(t, `{"a":1,"b":2,"c":3}`, string(mapJSON)) + }) + t.Run("can serialize int keys", func(t *testing.T) { + m := orderedmap.New[int, bool]() + m.Set(1, true) + m.Set(2, true) + m.Set(3, true) + mapJSON, err := m.MarshalJSON() + require.NoError(t, err) + require.JSONEq(t, `{"1":true,"2":true,"3":true}`, string(mapJSON)) + }) + t.Run("can serialize pointer keys", func(t *testing.T) { + m := orderedmap.NewWithConversionFunc[*int, bool, int](func(i *int) int { + if i == nil { + return 0 + } + return *i + }) + m.Set(toPtr(1), true) + m.Set(toPtr(2), true) + m.Set(toPtr(3), true) + mapJSON, err := m.MarshalJSON() + require.NoError(t, err) + require.JSONEq(t, `{"1":true,"2":true,"3":true}`, string(mapJSON)) + }) +} + +func toPtr[V any](v V) *V { + return &v +} diff --git a/main.go b/main.go index 55f139c5ca1..fa29df9c148 100644 --- a/main.go +++ b/main.go @@ -16,19 +16,73 @@ package main import ( + "context" + "fmt" + "io" "os" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli" + "github.com/arduino/arduino-cli/internal/cli/config" + "github.com/arduino/arduino-cli/internal/cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" ) func main() { - configuration.Settings = configuration.Init(configuration.FindConfigFileInArgs(os.Args)) - i18n.Init(configuration.Settings.GetString("locale")) - arduinoCmd := cli.NewCommand() - if err := arduinoCmd.Execute(); err != nil { + // Disable logging until it is setup in the arduino-cli pre-run + logrus.SetOutput(io.Discard) + + // Create a new ArduinoCoreServer + srv := commands.NewArduinoCoreServer() + + // Search for the configuration file in the command line arguments and in the environment + configFile := configuration.FindConfigFileInArgsFallbackOnEnv(os.Args) + ctx := config.SetConfigFile(context.Background(), configFile) + + // Read the settings from the configuration file + openReq := &rpc.ConfigurationOpenRequest{SettingsFormat: "yaml"} + var configFileLoadingWarnings []string + if configData, err := paths.New(configFile).ReadFile(); err == nil { + openReq.EncodedSettings = string(configData) + } else if !os.IsNotExist(err) { + feedback.FatalError(fmt.Errorf("couldn't read configuration file: %w", err), feedback.ErrGeneric) + } + if resp, err := srv.ConfigurationOpen(ctx, openReq); err != nil { + feedback.FatalError(fmt.Errorf("couldn't load configuration: %w", err), feedback.ErrGeneric) + } else if warnings := resp.GetWarnings(); len(warnings) > 0 { + // Save the warnings to show them later when the feedback package is fully initialized + configFileLoadingWarnings = warnings + } + + // Get the current settings from the server + resp, err := srv.ConfigurationGet(ctx, &rpc.ConfigurationGetRequest{}) + if err != nil { + feedback.FatalError(err, feedback.ErrGeneric) + } + config := resp.GetConfiguration() + + // Setup i18n + i18n.Init(config.GetLocale()) + + // Setup command line parser with the server and settings + arduinoCmd := cli.NewCommand(srv) + parentPreRun := arduinoCmd.PersistentPreRun + arduinoCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { + if parentPreRun != nil { + parentPreRun(cmd, args) + } + for _, warning := range configFileLoadingWarnings { + feedback.Warning(warning) + } + } + + // Execute the command line + if err := arduinoCmd.ExecuteContext(ctx); err != nil { feedback.FatalError(err, feedback.ErrGeneric) } } diff --git a/mkdocs.yml b/mkdocs.yml index cd30f19557e..59bd3a0128a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -100,7 +100,6 @@ nav: - version: commands/arduino-cli_version.md - gRPC reference: - commands: rpc/commands.md - - settings: rpc/settings.md - configuration.md - Integration options: integration-options.md - sketch-build-process.md @@ -113,6 +112,7 @@ nav: - Package index specification: package_index_json-specification.md - Guides: - Secure boot: guides/secure-boot.md + - Backward compatibility policy: versioning.md extra: version: diff --git a/package-lock.json b/package-lock.json index ff93f6acdb3..ed3e3fd970f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,8 @@ "": { "devDependencies": { "markdown-link-check": "3.10.3", - "markdownlint-cli": "^0.33.0" + "markdownlint-cli": "^0.33.0", + "prettier": "^3.3.1" } }, "node_modules/ansi-styles": { @@ -664,6 +665,21 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -1243,6 +1259,12 @@ "parse5": "^7.0.0" } }, + "prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "dev": true + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", diff --git a/package.json b/package.json index f18684eb8af..2b5477852c6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "devDependencies": { "markdown-link-check": "3.10.3", - "markdownlint-cli": "^0.33.0" + "markdownlint-cli": "^0.33.0", + "prettier": "^3.3.1" } } diff --git a/poetry.lock b/poetry.lock index 0db6b6a98b9..5b896956710 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "click" @@ -58,20 +58,20 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.37" +version = "3.1.41" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.37-py3-none-any.whl", hash = "sha256:5f4c4187de49616d710a77e98ddf17b4782060a1788df441846bddefbb89ab33"}, - {file = "GitPython-3.1.37.tar.gz", hash = "sha256:f9b9ddc0761c125d5780eab2d64be4873fc6817c2899cbcb34b02344bdc7bc54"}, + {file = "GitPython-3.1.41-py3-none-any.whl", hash = "sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c"}, + {file = "GitPython-3.1.41.tar.gz", hash = "sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-sugar"] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "sumtypes"] [[package]] name = "importlib-metadata" @@ -94,13 +94,13 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -502,4 +502,4 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "2.0" python-versions = ">=3.8, !=3.9.7, <4" -content-hash = "f6b03857c9f75656180eb32424f9876d1d72a6dc8cfb589430239c650bf80e6d" +content-hash = "97810ce6e4681e1f5b6e19fde79fe38a6a9bf77d8cb512cb6d0e3f485953c7c1" diff --git a/pyproject.toml b/pyproject.toml index 7a0f3c7e283..37945f12b7e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,5 +11,5 @@ python = ">=3.8, !=3.9.7, <4" mkdocs = "^1.2.1" mkdocs-material = "^7.1.8" mdx-truly-sane-lists = "^1.2" -GitPython = "^3.1.37" +GitPython = "^3.1.41" mike = "^1.0.1" diff --git a/rpc/buf.yaml b/rpc/buf.yaml index 4b09bf3fd42..95f08ebd923 100644 --- a/rpc/buf.yaml +++ b/rpc/buf.yaml @@ -5,6 +5,3 @@ lint: ignore_only: ENUM_ZERO_VALUE_SUFFIX: - cc/arduino/cli/commands/v1/lib.proto - - cc/arduino/cli/monitor/v1/monitor.proto - RPC_REQUEST_STANDARD_NAME: - - cc/arduino/cli/debug/v1/debug.proto diff --git a/rpc/cc/arduino/cli/commands/v1/board.pb.go b/rpc/cc/arduino/cli/commands/v1/board.pb.go index c5a7a6b1601..7a782004a74 100644 --- a/rpc/cc/arduino/cli/commands/v1/board.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/board.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.1 +// protoc v5.26.1 // source: cc/arduino/cli/commands/v1/board.proto package commands @@ -133,12 +133,12 @@ type BoardDetailsResponse struct { ConfigOptions []*ConfigOption `protobuf:"bytes,11,rep,name=config_options,json=configOptions,proto3" json:"config_options,omitempty"` // List of programmers supported by the board Programmers []*Programmer `protobuf:"bytes,13,rep,name=programmers,proto3" json:"programmers,omitempty"` - // Set to true if the board supports debugging - DebuggingSupported bool `protobuf:"varint,14,opt,name=debugging_supported,json=debuggingSupported,proto3" json:"debugging_supported,omitempty"` // Identifying information for the board (e.g., USB VID/PID). IdentificationProperties []*BoardIdentificationProperties `protobuf:"bytes,15,rep,name=identification_properties,json=identificationProperties,proto3" json:"identification_properties,omitempty"` // Board build properties used for compiling BuildProperties []string `protobuf:"bytes,16,rep,name=build_properties,json=buildProperties,proto3" json:"build_properties,omitempty"` + // Default programmer for the board + DefaultProgrammerId string `protobuf:"bytes,17,opt,name=default_programmer_id,json=defaultProgrammerId,proto3" json:"default_programmer_id,omitempty"` } func (x *BoardDetailsResponse) Reset() { @@ -257,13 +257,6 @@ func (x *BoardDetailsResponse) GetProgrammers() []*Programmer { return nil } -func (x *BoardDetailsResponse) GetDebuggingSupported() bool { - if x != nil { - return x.DebuggingSupported - } - return false -} - func (x *BoardDetailsResponse) GetIdentificationProperties() []*BoardIdentificationProperties { if x != nil { return x.IdentificationProperties @@ -278,6 +271,13 @@ func (x *BoardDetailsResponse) GetBuildProperties() []string { return nil } +func (x *BoardDetailsResponse) GetDefaultProgrammerId() string { + if x != nil { + return x.DefaultProgrammerId + } + return "" +} + type BoardIdentificationProperties struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -935,6 +935,8 @@ type BoardListResponse struct { // List of ports and the boards detected on those ports. Ports []*DetectedPort `protobuf:"bytes,1,rep,name=ports,proto3" json:"ports,omitempty"` + // Warning messages or errors coming from the discoveries. + Warnings []string `protobuf:"bytes,2,rep,name=warnings,proto3" json:"warnings,omitempty"` } func (x *BoardListResponse) Reset() { @@ -976,6 +978,13 @@ func (x *BoardListResponse) GetPorts() []*DetectedPort { return nil } +func (x *BoardListResponse) GetWarnings() []string { + if x != nil { + return x.Warnings + } + return nil +} + type DetectedPort struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1474,7 +1483,7 @@ var file_cc_arduino_cli_commands_v1_board_proto_rawDesc = []byte{ 0x61, 0x6e, 0x64, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x64, 0x6f, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x9a, 0x06, 0x0a, 0x14, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa3, 0x06, 0x0a, 0x14, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, @@ -1511,179 +1520,181 @@ var file_cc_arduino_cli_commands_v1_board_proto_rawDesc = []byte{ 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x12, - 0x2f, 0x0a, 0x13, 0x64, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, - 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x12, 0x76, 0x0a, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x18, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x22, 0xc9, 0x01, 0x0a, 0x1d, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xbc, 0x01, 0x0a, 0x07, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, - 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, - 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, - 0x0b, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x68, 0x65, 0x6c, 0x70, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x6c, 0x70, 0x52, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x22, 0x1e, - 0x0a, 0x04, 0x48, 0x65, 0x6c, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0xd0, - 0x01, 0x0a, 0x0d, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, - 0x72, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x11, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x44, 0x65, 0x70, 0x65, 0x6e, - 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x76, 0x0a, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x07, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, - 0x22, 0x8a, 0x01, 0x0a, 0x07, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, - 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, - 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x8a, 0x01, - 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x60, 0x0a, 0x0b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0x82, 0x01, 0x0a, - 0x10, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, - 0x6e, 0x22, 0x53, 0x0a, 0x11, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x18, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x22, 0xc9, 0x01, 0x0a, + 0x1d, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x69, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbc, 0x01, 0x0a, 0x07, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, + 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x65, 0x62, + 0x73, 0x69, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x34, 0x0a, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x6c, + 0x70, 0x52, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x22, 0x1e, 0x0a, 0x04, 0x48, 0x65, 0x6c, 0x70, 0x12, + 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0xd0, 0x01, 0x0a, 0x0d, 0x42, 0x6f, 0x61, 0x72, + 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x61, + 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x69, + 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x11, 0x54, + 0x6f, 0x6f, 0x6c, 0x73, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, + 0x52, 0x07, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x07, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x22, 0x60, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0x82, 0x01, 0x0a, 0x10, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x6f, 0x0a, 0x11, 0x42, 0x6f, + 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3e, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x0c, + 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x52, 0x0a, 0x0f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x52, - 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x52, 0x0a, 0x0f, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, - 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0e, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x04, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, - 0x74, 0x22, 0xac, 0x01, 0x0a, 0x13, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, + 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x73, + 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, + 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x13, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, + 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x72, 0x67, + 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x68, 0x69, 0x64, + 0x64, 0x65, 0x6e, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x42, + 0x6f, 0x61, 0x72, 0x64, 0x73, 0x22, 0x59, 0x0a, 0x14, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, + 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, + 0x22, 0x59, 0x0a, 0x15, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, + 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x16, + 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, + 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x0d, 0x42, 0x6f, + 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, + 0x71, 0x62, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, + 0x12, 0x40, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x22, 0xab, 0x01, 0x0a, 0x12, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x72, 0x67, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x73, - 0x22, 0x59, 0x0a, 0x14, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, - 0x74, 0x65, 0x6d, 0x52, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x22, 0x59, 0x0a, 0x15, 0x42, - 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x16, 0x42, 0x6f, 0x61, 0x72, 0x64, - 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x3c, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x0d, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, - 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, - 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x1b, - 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x69, 0x73, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x40, 0x0a, 0x08, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xab, 0x01, - 0x0a, 0x12, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x41, 0x72, 0x67, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x48, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x22, 0x58, 0x0a, 0x13, 0x42, - 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x73, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x22, 0x58, 0x0a, 0x13, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, + 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/rpc/cc/arduino/cli/commands/v1/board.proto b/rpc/cc/arduino/cli/commands/v1/board.proto index fd1e5dc3825..46a48c945f7 100644 --- a/rpc/cc/arduino/cli/commands/v1/board.proto +++ b/rpc/cc/arduino/cli/commands/v1/board.proto @@ -59,12 +59,13 @@ message BoardDetailsResponse { repeated ConfigOption config_options = 11; // List of programmers supported by the board repeated Programmer programmers = 13; - // Set to true if the board supports debugging - bool debugging_supported = 14; + reserved 14; // Identifying information for the board (e.g., USB VID/PID). repeated BoardIdentificationProperties identification_properties = 15; // Board build properties used for compiling repeated string build_properties = 16; + // Default programmer for the board + string default_programmer_id = 17; } message BoardIdentificationProperties { @@ -165,6 +166,8 @@ message BoardListRequest { message BoardListResponse { // List of ports and the boards detected on those ports. repeated DetectedPort ports = 1; + // Warning messages or errors coming from the discoveries. + repeated string warnings = 2; } message DetectedPort { diff --git a/rpc/cc/arduino/cli/commands/v1/commands.pb.go b/rpc/cc/arduino/cli/commands/v1/commands.pb.go index 67afa35e70b..d89dc0e8352 100644 --- a/rpc/cc/arduino/cli/commands/v1/commands.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/commands.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.1 +// protoc v5.26.1 // source: cc/arduino/cli/commands/v1/commands.proto package commands @@ -99,6 +99,66 @@ func (FailedInstanceInitReason) EnumDescriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{0} } +type IndexUpdateReport_Status int32 + +const ( + // The status of the index update is unspecified. + IndexUpdateReport_STATUS_UNSPECIFIED IndexUpdateReport_Status = 0 + // The index has been successfully updated. + IndexUpdateReport_STATUS_UPDATED IndexUpdateReport_Status = 1 + // The index was already up to date. + IndexUpdateReport_STATUS_ALREADY_UP_TO_DATE IndexUpdateReport_Status = 2 + // The index update failed. + IndexUpdateReport_STATUS_FAILED IndexUpdateReport_Status = 3 + // The index update was skipped. + IndexUpdateReport_STATUS_SKIPPED IndexUpdateReport_Status = 4 +) + +// Enum value maps for IndexUpdateReport_Status. +var ( + IndexUpdateReport_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "STATUS_UPDATED", + 2: "STATUS_ALREADY_UP_TO_DATE", + 3: "STATUS_FAILED", + 4: "STATUS_SKIPPED", + } + IndexUpdateReport_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "STATUS_UPDATED": 1, + "STATUS_ALREADY_UP_TO_DATE": 2, + "STATUS_FAILED": 3, + "STATUS_SKIPPED": 4, + } +) + +func (x IndexUpdateReport_Status) Enum() *IndexUpdateReport_Status { + p := new(IndexUpdateReport_Status) + *p = x + return p +} + +func (x IndexUpdateReport_Status) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IndexUpdateReport_Status) Descriptor() protoreflect.EnumDescriptor { + return file_cc_arduino_cli_commands_v1_commands_proto_enumTypes[1].Descriptor() +} + +func (IndexUpdateReport_Status) Type() protoreflect.EnumType { + return &file_cc_arduino_cli_commands_v1_commands_proto_enumTypes[1] +} + +func (x IndexUpdateReport_Status) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use IndexUpdateReport_Status.Descriptor instead. +func (IndexUpdateReport_Status) EnumDescriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{11, 0} +} + type CreateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -317,7 +377,7 @@ func (x *InitResponse) GetError() *status.Status { return nil } -func (x *InitResponse) GetProfile() *Profile { +func (x *InitResponse) GetProfile() *SketchProfile { if x, ok := x.GetMessage().(*InitResponse_Profile); ok { return x.Profile } @@ -338,7 +398,7 @@ type InitResponse_Error struct { type InitResponse_Profile struct { // Selected profile information - Profile *Profile `protobuf:"bytes,3,opt,name=profile,proto3,oneof"` + Profile *SketchProfile `protobuf:"bytes,3,opt,name=profile,proto3,oneof"` } func (*InitResponse_InitProgress) isInitResponse_Message() {} @@ -499,6 +559,9 @@ type UpdateIndexRequest struct { Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` // If set to true user defined package indexes will not be updated. IgnoreCustomPackageIndexes bool `protobuf:"varint,2,opt,name=ignore_custom_package_indexes,json=ignoreCustomPackageIndexes,proto3" json:"ignore_custom_package_indexes,omitempty"` + // Only perform index update if the index file is older than this value in + // seconds. + UpdateIfOlderThanSecs int64 `protobuf:"varint,3,opt,name=update_if_older_than_secs,json=updateIfOlderThanSecs,proto3" json:"update_if_older_than_secs,omitempty"` } func (x *UpdateIndexRequest) Reset() { @@ -547,13 +610,23 @@ func (x *UpdateIndexRequest) GetIgnoreCustomPackageIndexes() bool { return false } +func (x *UpdateIndexRequest) GetUpdateIfOlderThanSecs() int64 { + if x != nil { + return x.UpdateIfOlderThanSecs + } + return 0 +} + type UpdateIndexResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the package index download. - DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3" json:"download_progress,omitempty"` + // Types that are assignable to Message: + // + // *UpdateIndexResponse_DownloadProgress + // *UpdateIndexResponse_Result_ + Message isUpdateIndexResponse_Message `protobuf_oneof:"message"` } func (x *UpdateIndexResponse) Reset() { @@ -588,13 +661,45 @@ func (*UpdateIndexResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{8} } +func (m *UpdateIndexResponse) GetMessage() isUpdateIndexResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *UpdateIndexResponse) GetDownloadProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*UpdateIndexResponse_DownloadProgress); ok { return x.DownloadProgress } return nil } +func (x *UpdateIndexResponse) GetResult() *UpdateIndexResponse_Result { + if x, ok := x.GetMessage().(*UpdateIndexResponse_Result_); ok { + return x.Result + } + return nil +} + +type isUpdateIndexResponse_Message interface { + isUpdateIndexResponse_Message() +} + +type UpdateIndexResponse_DownloadProgress struct { + // Progress of the package index download. + DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3,oneof"` +} + +type UpdateIndexResponse_Result_ struct { + // The result of the index update. + Result *UpdateIndexResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*UpdateIndexResponse_DownloadProgress) isUpdateIndexResponse_Message() {} + +func (*UpdateIndexResponse_Result_) isUpdateIndexResponse_Message() {} + type UpdateLibrariesIndexRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -602,6 +707,9 @@ type UpdateLibrariesIndexRequest struct { // Arduino Core Service instance from the Init response. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` + // Only perform index update if the index file is older than this value in + // seconds. + UpdateIfOlderThanSecs int64 `protobuf:"varint,2,opt,name=update_if_older_than_secs,json=updateIfOlderThanSecs,proto3" json:"update_if_older_than_secs,omitempty"` } func (x *UpdateLibrariesIndexRequest) Reset() { @@ -643,13 +751,23 @@ func (x *UpdateLibrariesIndexRequest) GetInstance() *Instance { return nil } +func (x *UpdateLibrariesIndexRequest) GetUpdateIfOlderThanSecs() int64 { + if x != nil { + return x.UpdateIfOlderThanSecs + } + return 0 +} + type UpdateLibrariesIndexResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the libraries index download. - DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3" json:"download_progress,omitempty"` + // Types that are assignable to Message: + // + // *UpdateLibrariesIndexResponse_DownloadProgress + // *UpdateLibrariesIndexResponse_Result_ + Message isUpdateLibrariesIndexResponse_Message `protobuf_oneof:"message"` } func (x *UpdateLibrariesIndexResponse) Reset() { @@ -684,13 +802,102 @@ func (*UpdateLibrariesIndexResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{10} } +func (m *UpdateLibrariesIndexResponse) GetMessage() isUpdateLibrariesIndexResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *UpdateLibrariesIndexResponse) GetDownloadProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*UpdateLibrariesIndexResponse_DownloadProgress); ok { return x.DownloadProgress } return nil } +func (x *UpdateLibrariesIndexResponse) GetResult() *UpdateLibrariesIndexResponse_Result { + if x, ok := x.GetMessage().(*UpdateLibrariesIndexResponse_Result_); ok { + return x.Result + } + return nil +} + +type isUpdateLibrariesIndexResponse_Message interface { + isUpdateLibrariesIndexResponse_Message() +} + +type UpdateLibrariesIndexResponse_DownloadProgress struct { + // Progress of the libraries index download. + DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3,oneof"` +} + +type UpdateLibrariesIndexResponse_Result_ struct { + // The result of the index update. + Result *UpdateLibrariesIndexResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*UpdateLibrariesIndexResponse_DownloadProgress) isUpdateLibrariesIndexResponse_Message() {} + +func (*UpdateLibrariesIndexResponse_Result_) isUpdateLibrariesIndexResponse_Message() {} + +type IndexUpdateReport struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The URL of the index that was updated. + IndexUrl string `protobuf:"bytes,1,opt,name=index_url,json=indexUrl,proto3" json:"index_url,omitempty"` + // The result of the index update. + Status IndexUpdateReport_Status `protobuf:"varint,2,opt,name=status,proto3,enum=cc.arduino.cli.commands.v1.IndexUpdateReport_Status" json:"status,omitempty"` +} + +func (x *IndexUpdateReport) Reset() { + *x = IndexUpdateReport{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IndexUpdateReport) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IndexUpdateReport) ProtoMessage() {} + +func (x *IndexUpdateReport) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IndexUpdateReport.ProtoReflect.Descriptor instead. +func (*IndexUpdateReport) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{11} +} + +func (x *IndexUpdateReport) GetIndexUrl() string { + if x != nil { + return x.IndexUrl + } + return "" +} + +func (x *IndexUpdateReport) GetStatus() IndexUpdateReport_Status { + if x != nil { + return x.Status + } + return IndexUpdateReport_STATUS_UNSPECIFIED +} + type VersionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -700,7 +907,7 @@ type VersionRequest struct { func (x *VersionRequest) Reset() { *x = VersionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[11] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -713,7 +920,7 @@ func (x *VersionRequest) String() string { func (*VersionRequest) ProtoMessage() {} func (x *VersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[11] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -726,7 +933,7 @@ func (x *VersionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionRequest.ProtoReflect.Descriptor instead. func (*VersionRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{11} + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{12} } type VersionResponse struct { @@ -741,7 +948,7 @@ type VersionResponse struct { func (x *VersionResponse) Reset() { *x = VersionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[12] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -754,7 +961,7 @@ func (x *VersionResponse) String() string { func (*VersionResponse) ProtoMessage() {} func (x *VersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[12] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -767,7 +974,7 @@ func (x *VersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionResponse.ProtoReflect.Descriptor instead. func (*VersionResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{12} + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{13} } func (x *VersionResponse) GetVersion() string { @@ -796,7 +1003,7 @@ type NewSketchRequest struct { func (x *NewSketchRequest) Reset() { *x = NewSketchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[13] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -809,7 +1016,7 @@ func (x *NewSketchRequest) String() string { func (*NewSketchRequest) ProtoMessage() {} func (x *NewSketchRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[13] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -822,7 +1029,7 @@ func (x *NewSketchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NewSketchRequest.ProtoReflect.Descriptor instead. func (*NewSketchRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{13} + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{14} } func (x *NewSketchRequest) GetSketchName() string { @@ -858,7 +1065,7 @@ type NewSketchResponse struct { func (x *NewSketchResponse) Reset() { *x = NewSketchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[14] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -871,7 +1078,7 @@ func (x *NewSketchResponse) String() string { func (*NewSketchResponse) ProtoMessage() {} func (x *NewSketchResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[14] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -884,7 +1091,7 @@ func (x *NewSketchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NewSketchResponse.ProtoReflect.Descriptor instead. func (*NewSketchResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{14} + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{15} } func (x *NewSketchResponse) GetMainFile() string { @@ -906,7 +1113,7 @@ type LoadSketchRequest struct { func (x *LoadSketchRequest) Reset() { *x = LoadSketchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[15] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -919,7 +1126,7 @@ func (x *LoadSketchRequest) String() string { func (*LoadSketchRequest) ProtoMessage() {} func (x *LoadSketchRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[15] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -932,7 +1139,7 @@ func (x *LoadSketchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LoadSketchRequest.ProtoReflect.Descriptor instead. func (*LoadSketchRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{15} + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{16} } func (x *LoadSketchRequest) GetSketchPath() string { @@ -942,89 +1149,13 @@ func (x *LoadSketchRequest) GetSketchPath() string { return "" } -type SketchProfile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name of the profile - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // FQBN used by the profile - Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` -} - -func (x *SketchProfile) Reset() { - *x = SketchProfile{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SketchProfile) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SketchProfile) ProtoMessage() {} - -func (x *SketchProfile) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SketchProfile.ProtoReflect.Descriptor instead. -func (*SketchProfile) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{16} -} - -func (x *SketchProfile) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SketchProfile) GetFqbn() string { - if x != nil { - return x.Fqbn - } - return "" -} - type LoadSketchResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Absolute path to a main sketch files - MainFile string `protobuf:"bytes,1,opt,name=main_file,json=mainFile,proto3" json:"main_file,omitempty"` - // Absolute path to folder that contains main_file - LocationPath string `protobuf:"bytes,2,opt,name=location_path,json=locationPath,proto3" json:"location_path,omitempty"` - // List of absolute paths to other sketch files - OtherSketchFiles []string `protobuf:"bytes,3,rep,name=other_sketch_files,json=otherSketchFiles,proto3" json:"other_sketch_files,omitempty"` - // List of absolute paths to additional sketch files - AdditionalFiles []string `protobuf:"bytes,4,rep,name=additional_files,json=additionalFiles,proto3" json:"additional_files,omitempty"` - // List of absolute paths to supported files in the sketch root folder, main - // file excluded - RootFolderFiles []string `protobuf:"bytes,5,rep,name=root_folder_files,json=rootFolderFiles,proto3" json:"root_folder_files,omitempty"` - // Default FQBN set in project file (sketch.yaml) - DefaultFqbn string `protobuf:"bytes,6,opt,name=default_fqbn,json=defaultFqbn,proto3" json:"default_fqbn,omitempty"` - // Default Port set in project file (sketch.yaml) - DefaultPort string `protobuf:"bytes,7,opt,name=default_port,json=defaultPort,proto3" json:"default_port,omitempty"` - // Default Protocol set in project file (sketch.yaml) - DefaultProtocol string `protobuf:"bytes,8,opt,name=default_protocol,json=defaultProtocol,proto3" json:"default_protocol,omitempty"` - // List of profiles present in the project file (sketch.yaml) - Profiles []*SketchProfile `protobuf:"bytes,9,rep,name=profiles,proto3" json:"profiles,omitempty"` - // Default profile set in the project file (sketch.yaml) - DefaultProfile *SketchProfile `protobuf:"bytes,10,opt,name=default_profile,json=defaultProfile,proto3" json:"default_profile,omitempty"` + // The loaded sketch + Sketch *Sketch `protobuf:"bytes,1,opt,name=sketch,proto3" json:"sketch,omitempty"` } func (x *LoadSketchResponse) Reset() { @@ -1059,72 +1190,9 @@ func (*LoadSketchResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{17} } -func (x *LoadSketchResponse) GetMainFile() string { +func (x *LoadSketchResponse) GetSketch() *Sketch { if x != nil { - return x.MainFile - } - return "" -} - -func (x *LoadSketchResponse) GetLocationPath() string { - if x != nil { - return x.LocationPath - } - return "" -} - -func (x *LoadSketchResponse) GetOtherSketchFiles() []string { - if x != nil { - return x.OtherSketchFiles - } - return nil -} - -func (x *LoadSketchResponse) GetAdditionalFiles() []string { - if x != nil { - return x.AdditionalFiles - } - return nil -} - -func (x *LoadSketchResponse) GetRootFolderFiles() []string { - if x != nil { - return x.RootFolderFiles - } - return nil -} - -func (x *LoadSketchResponse) GetDefaultFqbn() string { - if x != nil { - return x.DefaultFqbn - } - return "" -} - -func (x *LoadSketchResponse) GetDefaultPort() string { - if x != nil { - return x.DefaultPort - } - return "" -} - -func (x *LoadSketchResponse) GetDefaultProtocol() string { - if x != nil { - return x.DefaultProtocol - } - return "" -} - -func (x *LoadSketchResponse) GetProfiles() []*SketchProfile { - if x != nil { - return x.Profiles - } - return nil -} - -func (x *LoadSketchResponse) GetDefaultProfile() *SketchProfile { - if x != nil { - return x.DefaultProfile + return x.Sketch } return nil } @@ -1256,6 +1324,8 @@ type SetSketchDefaultsRequest struct { DefaultPortAddress string `protobuf:"bytes,3,opt,name=default_port_address,json=defaultPortAddress,proto3" json:"default_port_address,omitempty"` // The desired value for default_protocol in project file (sketch.yaml) DefaultPortProtocol string `protobuf:"bytes,4,opt,name=default_port_protocol,json=defaultPortProtocol,proto3" json:"default_port_protocol,omitempty"` + // The desired value for default_programmer in project file (sketch.yaml) + DefaultProgrammer string `protobuf:"bytes,5,opt,name=default_programmer,json=defaultProgrammer,proto3" json:"default_programmer,omitempty"` } func (x *SetSketchDefaultsRequest) Reset() { @@ -1318,6 +1388,13 @@ func (x *SetSketchDefaultsRequest) GetDefaultPortProtocol() string { return "" } +func (x *SetSketchDefaultsRequest) GetDefaultProgrammer() string { + if x != nil { + return x.DefaultProgrammer + } + return "" +} + type SetSketchDefaultsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1332,6 +1409,9 @@ type SetSketchDefaultsResponse struct { // The value of default_protocol that has been written in project file // (sketch.yaml) DefaultPortProtocol string `protobuf:"bytes,3,opt,name=default_port_protocol,json=defaultPortProtocol,proto3" json:"default_port_protocol,omitempty"` + // The value of default_programmer that has been written in project file + // (sketch.yaml) + DefaultProgrammer string `protobuf:"bytes,4,opt,name=default_programmer,json=defaultProgrammer,proto3" json:"default_programmer,omitempty"` } func (x *SetSketchDefaultsResponse) Reset() { @@ -1387,19 +1467,25 @@ func (x *SetSketchDefaultsResponse) GetDefaultPortProtocol() string { return "" } -type InitResponse_Progress struct { +func (x *SetSketchDefaultsResponse) GetDefaultProgrammer() string { + if x != nil { + return x.DefaultProgrammer + } + return "" +} + +type CheckForArduinoCLIUpdatesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the downloads of platforms and libraries index files. - DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3" json:"download_progress,omitempty"` - // Describes the current stage of the initialization. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Force the check, even if the configuration says not to check for + // updates. + ForceCheck bool `protobuf:"varint,1,opt,name=force_check,json=forceCheck,proto3" json:"force_check,omitempty"` } -func (x *InitResponse_Progress) Reset() { - *x = InitResponse_Progress{} +func (x *CheckForArduinoCLIUpdatesRequest) Reset() { + *x = CheckForArduinoCLIUpdatesRequest{} if protoimpl.UnsafeEnabled { mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1407,6 +1493,191 @@ func (x *InitResponse_Progress) Reset() { } } +func (x *CheckForArduinoCLIUpdatesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckForArduinoCLIUpdatesRequest) ProtoMessage() {} + +func (x *CheckForArduinoCLIUpdatesRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CheckForArduinoCLIUpdatesRequest.ProtoReflect.Descriptor instead. +func (*CheckForArduinoCLIUpdatesRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{22} +} + +func (x *CheckForArduinoCLIUpdatesRequest) GetForceCheck() bool { + if x != nil { + return x.ForceCheck + } + return false +} + +type CheckForArduinoCLIUpdatesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The latest version of Arduino CLI available, if bigger than the + // current version. + NewestVersion string `protobuf:"bytes,1,opt,name=newest_version,json=newestVersion,proto3" json:"newest_version,omitempty"` +} + +func (x *CheckForArduinoCLIUpdatesResponse) Reset() { + *x = CheckForArduinoCLIUpdatesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckForArduinoCLIUpdatesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckForArduinoCLIUpdatesResponse) ProtoMessage() {} + +func (x *CheckForArduinoCLIUpdatesResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CheckForArduinoCLIUpdatesResponse.ProtoReflect.Descriptor instead. +func (*CheckForArduinoCLIUpdatesResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{23} +} + +func (x *CheckForArduinoCLIUpdatesResponse) GetNewestVersion() string { + if x != nil { + return x.NewestVersion + } + return "" +} + +type CleanDownloadCacheDirectoryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Arduino Core Service instance. + Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` +} + +func (x *CleanDownloadCacheDirectoryRequest) Reset() { + *x = CleanDownloadCacheDirectoryRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CleanDownloadCacheDirectoryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CleanDownloadCacheDirectoryRequest) ProtoMessage() {} + +func (x *CleanDownloadCacheDirectoryRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CleanDownloadCacheDirectoryRequest.ProtoReflect.Descriptor instead. +func (*CleanDownloadCacheDirectoryRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{24} +} + +func (x *CleanDownloadCacheDirectoryRequest) GetInstance() *Instance { + if x != nil { + return x.Instance + } + return nil +} + +type CleanDownloadCacheDirectoryResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CleanDownloadCacheDirectoryResponse) Reset() { + *x = CleanDownloadCacheDirectoryResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CleanDownloadCacheDirectoryResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CleanDownloadCacheDirectoryResponse) ProtoMessage() {} + +func (x *CleanDownloadCacheDirectoryResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CleanDownloadCacheDirectoryResponse.ProtoReflect.Descriptor instead. +func (*CleanDownloadCacheDirectoryResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{25} +} + +type InitResponse_Progress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Progress of the downloads of platforms and libraries index files. + DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3" json:"download_progress,omitempty"` + // Describes the current stage of the initialization. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` +} + +func (x *InitResponse_Progress) Reset() { + *x = InitResponse_Progress{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + func (x *InitResponse_Progress) String() string { return protoimpl.X.MessageStringOf(x) } @@ -1414,7 +1685,7 @@ func (x *InitResponse_Progress) String() string { func (*InitResponse_Progress) ProtoMessage() {} func (x *InitResponse_Progress) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[22] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1444,6 +1715,102 @@ func (x *InitResponse_Progress) GetTaskProgress() *TaskProgress { return nil } +type UpdateIndexResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The result of the packages index update. + UpdatedIndexes []*IndexUpdateReport `protobuf:"bytes,1,rep,name=updated_indexes,json=updatedIndexes,proto3" json:"updated_indexes,omitempty"` +} + +func (x *UpdateIndexResponse_Result) Reset() { + *x = UpdateIndexResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateIndexResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateIndexResponse_Result) ProtoMessage() {} + +func (x *UpdateIndexResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateIndexResponse_Result.ProtoReflect.Descriptor instead. +func (*UpdateIndexResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{8, 0} +} + +func (x *UpdateIndexResponse_Result) GetUpdatedIndexes() []*IndexUpdateReport { + if x != nil { + return x.UpdatedIndexes + } + return nil +} + +type UpdateLibrariesIndexResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The result of the libraries index update. + LibrariesIndex *IndexUpdateReport `protobuf:"bytes,1,opt,name=libraries_index,json=librariesIndex,proto3" json:"libraries_index,omitempty"` +} + +func (x *UpdateLibrariesIndexResponse_Result) Reset() { + *x = UpdateLibrariesIndexResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateLibrariesIndexResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateLibrariesIndexResponse_Result) ProtoMessage() {} + +func (x *UpdateLibrariesIndexResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateLibrariesIndexResponse_Result.ProtoReflect.Descriptor instead. +func (*UpdateLibrariesIndexResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{10, 0} +} + +func (x *UpdateLibrariesIndexResponse_Result) GetLibrariesIndex() *IndexUpdateReport { + if x != nil { + return x.LibrariesIndex + } + return nil +} + var File_cc_arduino_cli_commands_v1_commands_proto protoreflect.FileDescriptor var file_cc_arduino_cli_commands_v1_commands_proto_rawDesc = []byte{ @@ -1473,93 +1840,144 @@ var file_cc_arduino_cli_commands_v1_commands_proto_rawDesc = []byte{ 0x2f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x62, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x52, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, + 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0f, + 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x52, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, + 0x22, 0x9d, 0x03, 0x0a, 0x0c, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0b, 0x49, 0x6e, 0x69, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, - 0x68, 0x50, 0x61, 0x74, 0x68, 0x22, 0x97, 0x03, 0x0a, 0x0c, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3f, 0x0a, 0x07, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x69, + 0x6e, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x45, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0xb4, + 0x01, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x59, 0x0a, 0x11, 0x64, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0xb4, 0x01, - 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x59, 0x0a, 0x11, 0x64, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x81, 0x01, 0x0a, 0x17, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4c, 0x0a, 0x06, + 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x81, 0x01, 0x0a, 0x17, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4c, 0x0a, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x63, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x52, 0x0a, 0x0e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, + 0x72, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd3, 0x01, 0x0a, 0x12, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, 0x67, 0x6e, + 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x19, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x66, 0x5f, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x5f, + 0x73, 0x65, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x49, 0x66, 0x4f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x53, 0x65, 0x63, + 0x73, 0x22, 0xb1, 0x02, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x11, 0x64, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x48, 0x00, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x50, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, + 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x60, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x52, 0x0a, 0x0e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x12, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x22, 0x70, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, - 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x5f, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x79, 0x0a, 0x1c, 0x55, 0x70, 0x64, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x19, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x66, 0x5f, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x5f, + 0x73, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x49, 0x66, 0x4f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x53, 0x65, 0x63, + 0x73, 0x22, 0xc3, 0x02, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x10, 0x64, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x59, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x11, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x60, 0x0a, 0x06, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, + 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x0e, 0x6c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x09, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xfa, 0x01, 0x0a, 0x11, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1b, 0x0a, + 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x55, 0x72, 0x6c, 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x7a, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1d, + 0x0a, 0x19, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, + 0x5f, 0x55, 0x50, 0x5f, 0x54, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x11, 0x0a, + 0x0d, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, + 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x50, + 0x45, 0x44, 0x10, 0x04, 0x22, 0x10, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2b, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, @@ -1577,413 +1995,477 @@ var file_cc_arduino_cli_commands_v1_commands_proto_rawDesc = []byte{ 0x11, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, - 0x61, 0x74, 0x68, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x37, 0x0a, 0x0d, 0x53, 0x6b, 0x65, - 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, - 0x62, 0x6e, 0x22, 0xe7, 0x03, 0x0a, 0x12, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x69, - 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, - 0x69, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2c, 0x0a, 0x12, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x5f, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x6b, - 0x65, 0x74, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x6c, - 0x64, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0f, 0x72, 0x6f, 0x6f, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x71, 0x62, 0x6e, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, - 0x71, 0x62, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x12, 0x45, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0e, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xa4, 0x01, 0x0a, - 0x14, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, - 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x44, 0x69, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, - 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc4, 0x01, 0x0a, - 0x18, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, - 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x71, 0x62, 0x6e, 0x12, 0x30, 0x0a, - 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x32, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x22, 0xa4, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, - 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x71, 0x62, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x46, 0x71, 0x62, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, - 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2a, 0x93, 0x02, 0x0a, 0x18, 0x46, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x69, - 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x46, 0x41, 0x49, 0x4c, 0x45, - 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, - 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x31, 0x0a, 0x2d, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, + 0x61, 0x74, 0x68, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x50, 0x0a, 0x12, 0x4c, 0x6f, 0x61, + 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3a, 0x0a, 0x06, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x65, + 0x74, 0x63, 0x68, 0x52, 0x06, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x22, 0xa4, 0x01, 0x0a, 0x14, + 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, + 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x44, 0x69, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, + 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf3, 0x01, 0x0a, 0x18, + 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, + 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, + 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x71, 0x62, 0x6e, 0x12, 0x30, 0x0a, 0x14, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, + 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x12, 0x2d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, + 0x72, 0x22, 0xd3, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x71, 0x62, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x71, + 0x62, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x6f, + 0x72, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x2d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x22, 0x43, 0x0a, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x46, 0x6f, 0x72, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, 0x4c, 0x49, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x4a, 0x0a, 0x21, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x6f, 0x72, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, + 0x4c, 0x49, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x65, 0x73, + 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x22, 0x43, 0x6c, 0x65, 0x61, + 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, + 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x22, 0x25, 0x0a, 0x23, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x93, 0x02, 0x0a, 0x18, 0x46, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, - 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x44, 0x45, - 0x58, 0x5f, 0x55, 0x52, 0x4c, 0x10, 0x01, 0x12, 0x30, 0x0a, 0x2c, 0x46, 0x41, 0x49, 0x4c, 0x45, + 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x31, 0x0a, 0x2d, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, + 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5f, 0x55, + 0x52, 0x4c, 0x10, 0x01, 0x12, 0x30, 0x0a, 0x2c, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, + 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, + 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x2f, 0x0a, 0x2b, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, + 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, 0x52, + 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x54, 0x4f, 0x4f, 0x4c, 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x5f, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x34, 0x0a, 0x30, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, - 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5f, 0x4c, 0x4f, 0x41, - 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x2f, 0x0a, 0x2b, 0x46, 0x41, 0x49, - 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, - 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x54, 0x4f, 0x4f, 0x4c, 0x5f, 0x4c, 0x4f, - 0x41, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x34, 0x0a, 0x30, 0x46, 0x41, - 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, - 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5f, - 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, - 0x32, 0xab, 0x27, 0x0a, 0x12, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, 0x6f, 0x72, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x61, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x12, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x04, 0x49, 0x6e, - 0x69, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5f, 0x44, 0x4f, 0x57, + 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x32, 0xfb, 0x2f, + 0x0a, 0x12, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x61, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x29, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x12, + 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x07, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, + 0x79, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, + 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x0b, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2e, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, + 0x12, 0x8d, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x37, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, + 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x63, 0x63, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, + 0x12, 0x64, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x07, 0x44, 0x65, 0x73, - 0x74, 0x72, 0x6f, 0x79, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x72, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2e, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x30, 0x01, 0x12, 0x8d, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, - 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x37, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, - 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x09, 0x4e, 0x65, 0x77, - 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x65, 0x77, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x4e, 0x65, 0x77, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, - 0x74, 0x63, 0x68, 0x12, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x09, 0x4e, 0x65, 0x77, 0x53, 0x6b, 0x65, + 0x74, 0x63, 0x68, 0x12, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x2e, 0x4e, 0x65, 0x77, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, + 0x65, 0x77, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, + 0x12, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, + 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, + 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x76, 0x0a, 0x0d, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, + 0x63, 0x68, 0x12, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x0d, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, - 0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x11, 0x53, 0x65, + 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, + 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, + 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, - 0x11, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x73, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x71, 0x0a, 0x0c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x09, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, - 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, - 0x0a, 0x0c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x2f, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, + 0x0a, 0x0c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, - 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, - 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6e, 0x0a, 0x0b, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x12, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, - 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x68, 0x0a, 0x09, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, + 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0c, 0x42, + 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x2f, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, + 0x0a, 0x0b, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x2e, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, + 0x0a, 0x0e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, + 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, - 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x79, 0x0a, 0x0e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, - 0x74, 0x63, 0x68, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x07, 0x43, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, + 0x7c, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x12, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x07, - 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x7c, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x12, 0x7f, 0x0a, 0x10, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7f, 0x0a, + 0x10, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x82, + 0x01, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, - 0x01, 0x12, 0x82, 0x01, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7c, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, - 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x61, 0x0a, 0x06, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x29, + 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x7c, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, + 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, + 0x01, 0x12, 0x61, 0x0a, 0x06, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x29, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x8e, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, + 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x12, 0x38, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, - 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x8e, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, - 0x72, 0x12, 0x38, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, - 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x86, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x12, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, - 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0xb0, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, - 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x44, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, 0x6e, + 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x86, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x0e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, - 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6f, + 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb0, + 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, + 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x44, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, + 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x79, 0x0a, 0x0e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, + 0x64, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, - 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x77, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x77, 0x0a, 0x0e, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x31, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0f, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0f, 0x4c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x32, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x79, 0x0a, 0x0e, 0x4c, 0x69, 0x62, - 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x31, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x79, 0x0a, 0x0e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, - 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, - 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, - 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x82, 0x01, 0x0a, 0x11, 0x5a, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, + 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x79, 0x0a, 0x0e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x79, + 0x0a, 0x0e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, + 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x82, 0x01, 0x0a, 0x11, 0x5a, 0x69, + 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, + 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x69, 0x70, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x82, 0x01, 0x0a, 0x11, 0x47, 0x69, 0x74, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, + 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x82, + 0x01, 0x0a, 0x11, 0x47, 0x69, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x69, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x7f, 0x0a, 0x10, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, + 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x82, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, + 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, - 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7f, 0x0a, 0x10, 0x4c, 0x69, 0x62, - 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x33, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x82, 0x01, 0x0a, 0x11, 0x4c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, - 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, - 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x9b, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x3d, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, - 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, - 0x0d, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x30, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0b, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x07, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x12, 0x2a, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, - 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x9b, 0x01, 0x0a, 0x1a, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, + 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x3d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0d, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x1c, - 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, - 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3f, 0x2e, 0x63, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, + 0x0b, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x62, 0x0a, 0x05, 0x44, 0x65, 0x62, 0x75, 0x67, 0x12, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, + 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, + 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, + 0x07, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x1c, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x05, 0x44, 0x65, 0x62, + 0x75, 0x67, 0x12, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, - 0x01, 0x30, 0x01, 0x12, 0x79, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x7f, 0x0a, + 0x10, 0x49, 0x73, 0x44, 0x65, 0x62, 0x75, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, + 0x64, 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x73, 0x44, 0x65, 0x62, 0x75, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x44, 0x65, 0x62, 0x75, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, + 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, + 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x98, 0x01, 0x0a, 0x19, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x46, 0x6f, 0x72, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, 0x4c, 0x49, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x3c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x6f, 0x72, 0x41, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x43, 0x4c, 0x49, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x48, - 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, - 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x6f, 0x72, 0x41, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x43, 0x4c, 0x49, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x1b, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x44, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x76, 0x65, 0x12, 0x34, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x76, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x34, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, + 0x70, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x10, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x12, + 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x11, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, + 0x10, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x10, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, + 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1998,204 +2480,245 @@ func file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_commands_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_commands_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_cc_arduino_cli_commands_v1_commands_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_cc_arduino_cli_commands_v1_commands_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_cc_arduino_cli_commands_v1_commands_proto_msgTypes = make([]protoimpl.MessageInfo, 29) var file_cc_arduino_cli_commands_v1_commands_proto_goTypes = []interface{}{ (FailedInstanceInitReason)(0), // 0: cc.arduino.cli.commands.v1.FailedInstanceInitReason - (*CreateRequest)(nil), // 1: cc.arduino.cli.commands.v1.CreateRequest - (*CreateResponse)(nil), // 2: cc.arduino.cli.commands.v1.CreateResponse - (*InitRequest)(nil), // 3: cc.arduino.cli.commands.v1.InitRequest - (*InitResponse)(nil), // 4: cc.arduino.cli.commands.v1.InitResponse - (*FailedInstanceInitError)(nil), // 5: cc.arduino.cli.commands.v1.FailedInstanceInitError - (*DestroyRequest)(nil), // 6: cc.arduino.cli.commands.v1.DestroyRequest - (*DestroyResponse)(nil), // 7: cc.arduino.cli.commands.v1.DestroyResponse - (*UpdateIndexRequest)(nil), // 8: cc.arduino.cli.commands.v1.UpdateIndexRequest - (*UpdateIndexResponse)(nil), // 9: cc.arduino.cli.commands.v1.UpdateIndexResponse - (*UpdateLibrariesIndexRequest)(nil), // 10: cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest - (*UpdateLibrariesIndexResponse)(nil), // 11: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse - (*VersionRequest)(nil), // 12: cc.arduino.cli.commands.v1.VersionRequest - (*VersionResponse)(nil), // 13: cc.arduino.cli.commands.v1.VersionResponse - (*NewSketchRequest)(nil), // 14: cc.arduino.cli.commands.v1.NewSketchRequest - (*NewSketchResponse)(nil), // 15: cc.arduino.cli.commands.v1.NewSketchResponse - (*LoadSketchRequest)(nil), // 16: cc.arduino.cli.commands.v1.LoadSketchRequest - (*SketchProfile)(nil), // 17: cc.arduino.cli.commands.v1.SketchProfile - (*LoadSketchResponse)(nil), // 18: cc.arduino.cli.commands.v1.LoadSketchResponse - (*ArchiveSketchRequest)(nil), // 19: cc.arduino.cli.commands.v1.ArchiveSketchRequest - (*ArchiveSketchResponse)(nil), // 20: cc.arduino.cli.commands.v1.ArchiveSketchResponse - (*SetSketchDefaultsRequest)(nil), // 21: cc.arduino.cli.commands.v1.SetSketchDefaultsRequest - (*SetSketchDefaultsResponse)(nil), // 22: cc.arduino.cli.commands.v1.SetSketchDefaultsResponse - (*InitResponse_Progress)(nil), // 23: cc.arduino.cli.commands.v1.InitResponse.Progress - (*Instance)(nil), // 24: cc.arduino.cli.commands.v1.Instance - (*status.Status)(nil), // 25: google.rpc.Status - (*Profile)(nil), // 26: cc.arduino.cli.commands.v1.Profile - (*DownloadProgress)(nil), // 27: cc.arduino.cli.commands.v1.DownloadProgress - (*TaskProgress)(nil), // 28: cc.arduino.cli.commands.v1.TaskProgress - (*BoardDetailsRequest)(nil), // 29: cc.arduino.cli.commands.v1.BoardDetailsRequest - (*BoardListRequest)(nil), // 30: cc.arduino.cli.commands.v1.BoardListRequest - (*BoardListAllRequest)(nil), // 31: cc.arduino.cli.commands.v1.BoardListAllRequest - (*BoardSearchRequest)(nil), // 32: cc.arduino.cli.commands.v1.BoardSearchRequest - (*BoardListWatchRequest)(nil), // 33: cc.arduino.cli.commands.v1.BoardListWatchRequest - (*CompileRequest)(nil), // 34: cc.arduino.cli.commands.v1.CompileRequest - (*PlatformInstallRequest)(nil), // 35: cc.arduino.cli.commands.v1.PlatformInstallRequest - (*PlatformDownloadRequest)(nil), // 36: cc.arduino.cli.commands.v1.PlatformDownloadRequest - (*PlatformUninstallRequest)(nil), // 37: cc.arduino.cli.commands.v1.PlatformUninstallRequest - (*PlatformUpgradeRequest)(nil), // 38: cc.arduino.cli.commands.v1.PlatformUpgradeRequest - (*UploadRequest)(nil), // 39: cc.arduino.cli.commands.v1.UploadRequest - (*UploadUsingProgrammerRequest)(nil), // 40: cc.arduino.cli.commands.v1.UploadUsingProgrammerRequest - (*SupportedUserFieldsRequest)(nil), // 41: cc.arduino.cli.commands.v1.SupportedUserFieldsRequest - (*ListProgrammersAvailableForUploadRequest)(nil), // 42: cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadRequest - (*BurnBootloaderRequest)(nil), // 43: cc.arduino.cli.commands.v1.BurnBootloaderRequest - (*PlatformSearchRequest)(nil), // 44: cc.arduino.cli.commands.v1.PlatformSearchRequest - (*PlatformListRequest)(nil), // 45: cc.arduino.cli.commands.v1.PlatformListRequest - (*LibraryDownloadRequest)(nil), // 46: cc.arduino.cli.commands.v1.LibraryDownloadRequest - (*LibraryInstallRequest)(nil), // 47: cc.arduino.cli.commands.v1.LibraryInstallRequest - (*LibraryUpgradeRequest)(nil), // 48: cc.arduino.cli.commands.v1.LibraryUpgradeRequest - (*ZipLibraryInstallRequest)(nil), // 49: cc.arduino.cli.commands.v1.ZipLibraryInstallRequest - (*GitLibraryInstallRequest)(nil), // 50: cc.arduino.cli.commands.v1.GitLibraryInstallRequest - (*LibraryUninstallRequest)(nil), // 51: cc.arduino.cli.commands.v1.LibraryUninstallRequest - (*LibraryUpgradeAllRequest)(nil), // 52: cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest - (*LibraryResolveDependenciesRequest)(nil), // 53: cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest - (*LibrarySearchRequest)(nil), // 54: cc.arduino.cli.commands.v1.LibrarySearchRequest - (*LibraryListRequest)(nil), // 55: cc.arduino.cli.commands.v1.LibraryListRequest - (*MonitorRequest)(nil), // 56: cc.arduino.cli.commands.v1.MonitorRequest - (*EnumerateMonitorPortSettingsRequest)(nil), // 57: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest - (*DebugRequest)(nil), // 58: cc.arduino.cli.commands.v1.DebugRequest - (*GetDebugConfigRequest)(nil), // 59: cc.arduino.cli.commands.v1.GetDebugConfigRequest - (*BoardDetailsResponse)(nil), // 60: cc.arduino.cli.commands.v1.BoardDetailsResponse - (*BoardListResponse)(nil), // 61: cc.arduino.cli.commands.v1.BoardListResponse - (*BoardListAllResponse)(nil), // 62: cc.arduino.cli.commands.v1.BoardListAllResponse - (*BoardSearchResponse)(nil), // 63: cc.arduino.cli.commands.v1.BoardSearchResponse - (*BoardListWatchResponse)(nil), // 64: cc.arduino.cli.commands.v1.BoardListWatchResponse - (*CompileResponse)(nil), // 65: cc.arduino.cli.commands.v1.CompileResponse - (*PlatformInstallResponse)(nil), // 66: cc.arduino.cli.commands.v1.PlatformInstallResponse - (*PlatformDownloadResponse)(nil), // 67: cc.arduino.cli.commands.v1.PlatformDownloadResponse - (*PlatformUninstallResponse)(nil), // 68: cc.arduino.cli.commands.v1.PlatformUninstallResponse - (*PlatformUpgradeResponse)(nil), // 69: cc.arduino.cli.commands.v1.PlatformUpgradeResponse - (*UploadResponse)(nil), // 70: cc.arduino.cli.commands.v1.UploadResponse - (*UploadUsingProgrammerResponse)(nil), // 71: cc.arduino.cli.commands.v1.UploadUsingProgrammerResponse - (*SupportedUserFieldsResponse)(nil), // 72: cc.arduino.cli.commands.v1.SupportedUserFieldsResponse - (*ListProgrammersAvailableForUploadResponse)(nil), // 73: cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadResponse - (*BurnBootloaderResponse)(nil), // 74: cc.arduino.cli.commands.v1.BurnBootloaderResponse - (*PlatformSearchResponse)(nil), // 75: cc.arduino.cli.commands.v1.PlatformSearchResponse - (*PlatformListResponse)(nil), // 76: cc.arduino.cli.commands.v1.PlatformListResponse - (*LibraryDownloadResponse)(nil), // 77: cc.arduino.cli.commands.v1.LibraryDownloadResponse - (*LibraryInstallResponse)(nil), // 78: cc.arduino.cli.commands.v1.LibraryInstallResponse - (*LibraryUpgradeResponse)(nil), // 79: cc.arduino.cli.commands.v1.LibraryUpgradeResponse - (*ZipLibraryInstallResponse)(nil), // 80: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse - (*GitLibraryInstallResponse)(nil), // 81: cc.arduino.cli.commands.v1.GitLibraryInstallResponse - (*LibraryUninstallResponse)(nil), // 82: cc.arduino.cli.commands.v1.LibraryUninstallResponse - (*LibraryUpgradeAllResponse)(nil), // 83: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse - (*LibraryResolveDependenciesResponse)(nil), // 84: cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse - (*LibrarySearchResponse)(nil), // 85: cc.arduino.cli.commands.v1.LibrarySearchResponse - (*LibraryListResponse)(nil), // 86: cc.arduino.cli.commands.v1.LibraryListResponse - (*MonitorResponse)(nil), // 87: cc.arduino.cli.commands.v1.MonitorResponse - (*EnumerateMonitorPortSettingsResponse)(nil), // 88: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse - (*DebugResponse)(nil), // 89: cc.arduino.cli.commands.v1.DebugResponse - (*GetDebugConfigResponse)(nil), // 90: cc.arduino.cli.commands.v1.GetDebugConfigResponse + (IndexUpdateReport_Status)(0), // 1: cc.arduino.cli.commands.v1.IndexUpdateReport.Status + (*CreateRequest)(nil), // 2: cc.arduino.cli.commands.v1.CreateRequest + (*CreateResponse)(nil), // 3: cc.arduino.cli.commands.v1.CreateResponse + (*InitRequest)(nil), // 4: cc.arduino.cli.commands.v1.InitRequest + (*InitResponse)(nil), // 5: cc.arduino.cli.commands.v1.InitResponse + (*FailedInstanceInitError)(nil), // 6: cc.arduino.cli.commands.v1.FailedInstanceInitError + (*DestroyRequest)(nil), // 7: cc.arduino.cli.commands.v1.DestroyRequest + (*DestroyResponse)(nil), // 8: cc.arduino.cli.commands.v1.DestroyResponse + (*UpdateIndexRequest)(nil), // 9: cc.arduino.cli.commands.v1.UpdateIndexRequest + (*UpdateIndexResponse)(nil), // 10: cc.arduino.cli.commands.v1.UpdateIndexResponse + (*UpdateLibrariesIndexRequest)(nil), // 11: cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest + (*UpdateLibrariesIndexResponse)(nil), // 12: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse + (*IndexUpdateReport)(nil), // 13: cc.arduino.cli.commands.v1.IndexUpdateReport + (*VersionRequest)(nil), // 14: cc.arduino.cli.commands.v1.VersionRequest + (*VersionResponse)(nil), // 15: cc.arduino.cli.commands.v1.VersionResponse + (*NewSketchRequest)(nil), // 16: cc.arduino.cli.commands.v1.NewSketchRequest + (*NewSketchResponse)(nil), // 17: cc.arduino.cli.commands.v1.NewSketchResponse + (*LoadSketchRequest)(nil), // 18: cc.arduino.cli.commands.v1.LoadSketchRequest + (*LoadSketchResponse)(nil), // 19: cc.arduino.cli.commands.v1.LoadSketchResponse + (*ArchiveSketchRequest)(nil), // 20: cc.arduino.cli.commands.v1.ArchiveSketchRequest + (*ArchiveSketchResponse)(nil), // 21: cc.arduino.cli.commands.v1.ArchiveSketchResponse + (*SetSketchDefaultsRequest)(nil), // 22: cc.arduino.cli.commands.v1.SetSketchDefaultsRequest + (*SetSketchDefaultsResponse)(nil), // 23: cc.arduino.cli.commands.v1.SetSketchDefaultsResponse + (*CheckForArduinoCLIUpdatesRequest)(nil), // 24: cc.arduino.cli.commands.v1.CheckForArduinoCLIUpdatesRequest + (*CheckForArduinoCLIUpdatesResponse)(nil), // 25: cc.arduino.cli.commands.v1.CheckForArduinoCLIUpdatesResponse + (*CleanDownloadCacheDirectoryRequest)(nil), // 26: cc.arduino.cli.commands.v1.CleanDownloadCacheDirectoryRequest + (*CleanDownloadCacheDirectoryResponse)(nil), // 27: cc.arduino.cli.commands.v1.CleanDownloadCacheDirectoryResponse + (*InitResponse_Progress)(nil), // 28: cc.arduino.cli.commands.v1.InitResponse.Progress + (*UpdateIndexResponse_Result)(nil), // 29: cc.arduino.cli.commands.v1.UpdateIndexResponse.Result + (*UpdateLibrariesIndexResponse_Result)(nil), // 30: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.Result + (*Instance)(nil), // 31: cc.arduino.cli.commands.v1.Instance + (*status.Status)(nil), // 32: google.rpc.Status + (*SketchProfile)(nil), // 33: cc.arduino.cli.commands.v1.SketchProfile + (*DownloadProgress)(nil), // 34: cc.arduino.cli.commands.v1.DownloadProgress + (*Sketch)(nil), // 35: cc.arduino.cli.commands.v1.Sketch + (*TaskProgress)(nil), // 36: cc.arduino.cli.commands.v1.TaskProgress + (*BoardDetailsRequest)(nil), // 37: cc.arduino.cli.commands.v1.BoardDetailsRequest + (*BoardListRequest)(nil), // 38: cc.arduino.cli.commands.v1.BoardListRequest + (*BoardListAllRequest)(nil), // 39: cc.arduino.cli.commands.v1.BoardListAllRequest + (*BoardSearchRequest)(nil), // 40: cc.arduino.cli.commands.v1.BoardSearchRequest + (*BoardListWatchRequest)(nil), // 41: cc.arduino.cli.commands.v1.BoardListWatchRequest + (*CompileRequest)(nil), // 42: cc.arduino.cli.commands.v1.CompileRequest + (*PlatformInstallRequest)(nil), // 43: cc.arduino.cli.commands.v1.PlatformInstallRequest + (*PlatformDownloadRequest)(nil), // 44: cc.arduino.cli.commands.v1.PlatformDownloadRequest + (*PlatformUninstallRequest)(nil), // 45: cc.arduino.cli.commands.v1.PlatformUninstallRequest + (*PlatformUpgradeRequest)(nil), // 46: cc.arduino.cli.commands.v1.PlatformUpgradeRequest + (*UploadRequest)(nil), // 47: cc.arduino.cli.commands.v1.UploadRequest + (*UploadUsingProgrammerRequest)(nil), // 48: cc.arduino.cli.commands.v1.UploadUsingProgrammerRequest + (*SupportedUserFieldsRequest)(nil), // 49: cc.arduino.cli.commands.v1.SupportedUserFieldsRequest + (*ListProgrammersAvailableForUploadRequest)(nil), // 50: cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadRequest + (*BurnBootloaderRequest)(nil), // 51: cc.arduino.cli.commands.v1.BurnBootloaderRequest + (*PlatformSearchRequest)(nil), // 52: cc.arduino.cli.commands.v1.PlatformSearchRequest + (*LibraryDownloadRequest)(nil), // 53: cc.arduino.cli.commands.v1.LibraryDownloadRequest + (*LibraryInstallRequest)(nil), // 54: cc.arduino.cli.commands.v1.LibraryInstallRequest + (*LibraryUpgradeRequest)(nil), // 55: cc.arduino.cli.commands.v1.LibraryUpgradeRequest + (*ZipLibraryInstallRequest)(nil), // 56: cc.arduino.cli.commands.v1.ZipLibraryInstallRequest + (*GitLibraryInstallRequest)(nil), // 57: cc.arduino.cli.commands.v1.GitLibraryInstallRequest + (*LibraryUninstallRequest)(nil), // 58: cc.arduino.cli.commands.v1.LibraryUninstallRequest + (*LibraryUpgradeAllRequest)(nil), // 59: cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest + (*LibraryResolveDependenciesRequest)(nil), // 60: cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest + (*LibrarySearchRequest)(nil), // 61: cc.arduino.cli.commands.v1.LibrarySearchRequest + (*LibraryListRequest)(nil), // 62: cc.arduino.cli.commands.v1.LibraryListRequest + (*MonitorRequest)(nil), // 63: cc.arduino.cli.commands.v1.MonitorRequest + (*EnumerateMonitorPortSettingsRequest)(nil), // 64: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest + (*DebugRequest)(nil), // 65: cc.arduino.cli.commands.v1.DebugRequest + (*IsDebugSupportedRequest)(nil), // 66: cc.arduino.cli.commands.v1.IsDebugSupportedRequest + (*GetDebugConfigRequest)(nil), // 67: cc.arduino.cli.commands.v1.GetDebugConfigRequest + (*ConfigurationSaveRequest)(nil), // 68: cc.arduino.cli.commands.v1.ConfigurationSaveRequest + (*ConfigurationOpenRequest)(nil), // 69: cc.arduino.cli.commands.v1.ConfigurationOpenRequest + (*ConfigurationGetRequest)(nil), // 70: cc.arduino.cli.commands.v1.ConfigurationGetRequest + (*SettingsEnumerateRequest)(nil), // 71: cc.arduino.cli.commands.v1.SettingsEnumerateRequest + (*SettingsGetValueRequest)(nil), // 72: cc.arduino.cli.commands.v1.SettingsGetValueRequest + (*SettingsSetValueRequest)(nil), // 73: cc.arduino.cli.commands.v1.SettingsSetValueRequest + (*BoardDetailsResponse)(nil), // 74: cc.arduino.cli.commands.v1.BoardDetailsResponse + (*BoardListResponse)(nil), // 75: cc.arduino.cli.commands.v1.BoardListResponse + (*BoardListAllResponse)(nil), // 76: cc.arduino.cli.commands.v1.BoardListAllResponse + (*BoardSearchResponse)(nil), // 77: cc.arduino.cli.commands.v1.BoardSearchResponse + (*BoardListWatchResponse)(nil), // 78: cc.arduino.cli.commands.v1.BoardListWatchResponse + (*CompileResponse)(nil), // 79: cc.arduino.cli.commands.v1.CompileResponse + (*PlatformInstallResponse)(nil), // 80: cc.arduino.cli.commands.v1.PlatformInstallResponse + (*PlatformDownloadResponse)(nil), // 81: cc.arduino.cli.commands.v1.PlatformDownloadResponse + (*PlatformUninstallResponse)(nil), // 82: cc.arduino.cli.commands.v1.PlatformUninstallResponse + (*PlatformUpgradeResponse)(nil), // 83: cc.arduino.cli.commands.v1.PlatformUpgradeResponse + (*UploadResponse)(nil), // 84: cc.arduino.cli.commands.v1.UploadResponse + (*UploadUsingProgrammerResponse)(nil), // 85: cc.arduino.cli.commands.v1.UploadUsingProgrammerResponse + (*SupportedUserFieldsResponse)(nil), // 86: cc.arduino.cli.commands.v1.SupportedUserFieldsResponse + (*ListProgrammersAvailableForUploadResponse)(nil), // 87: cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadResponse + (*BurnBootloaderResponse)(nil), // 88: cc.arduino.cli.commands.v1.BurnBootloaderResponse + (*PlatformSearchResponse)(nil), // 89: cc.arduino.cli.commands.v1.PlatformSearchResponse + (*LibraryDownloadResponse)(nil), // 90: cc.arduino.cli.commands.v1.LibraryDownloadResponse + (*LibraryInstallResponse)(nil), // 91: cc.arduino.cli.commands.v1.LibraryInstallResponse + (*LibraryUpgradeResponse)(nil), // 92: cc.arduino.cli.commands.v1.LibraryUpgradeResponse + (*ZipLibraryInstallResponse)(nil), // 93: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse + (*GitLibraryInstallResponse)(nil), // 94: cc.arduino.cli.commands.v1.GitLibraryInstallResponse + (*LibraryUninstallResponse)(nil), // 95: cc.arduino.cli.commands.v1.LibraryUninstallResponse + (*LibraryUpgradeAllResponse)(nil), // 96: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse + (*LibraryResolveDependenciesResponse)(nil), // 97: cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse + (*LibrarySearchResponse)(nil), // 98: cc.arduino.cli.commands.v1.LibrarySearchResponse + (*LibraryListResponse)(nil), // 99: cc.arduino.cli.commands.v1.LibraryListResponse + (*MonitorResponse)(nil), // 100: cc.arduino.cli.commands.v1.MonitorResponse + (*EnumerateMonitorPortSettingsResponse)(nil), // 101: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse + (*DebugResponse)(nil), // 102: cc.arduino.cli.commands.v1.DebugResponse + (*IsDebugSupportedResponse)(nil), // 103: cc.arduino.cli.commands.v1.IsDebugSupportedResponse + (*GetDebugConfigResponse)(nil), // 104: cc.arduino.cli.commands.v1.GetDebugConfigResponse + (*ConfigurationSaveResponse)(nil), // 105: cc.arduino.cli.commands.v1.ConfigurationSaveResponse + (*ConfigurationOpenResponse)(nil), // 106: cc.arduino.cli.commands.v1.ConfigurationOpenResponse + (*ConfigurationGetResponse)(nil), // 107: cc.arduino.cli.commands.v1.ConfigurationGetResponse + (*SettingsEnumerateResponse)(nil), // 108: cc.arduino.cli.commands.v1.SettingsEnumerateResponse + (*SettingsGetValueResponse)(nil), // 109: cc.arduino.cli.commands.v1.SettingsGetValueResponse + (*SettingsSetValueResponse)(nil), // 110: cc.arduino.cli.commands.v1.SettingsSetValueResponse } var file_cc_arduino_cli_commands_v1_commands_proto_depIdxs = []int32{ - 24, // 0: cc.arduino.cli.commands.v1.CreateResponse.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 24, // 1: cc.arduino.cli.commands.v1.InitRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 23, // 2: cc.arduino.cli.commands.v1.InitResponse.init_progress:type_name -> cc.arduino.cli.commands.v1.InitResponse.Progress - 25, // 3: cc.arduino.cli.commands.v1.InitResponse.error:type_name -> google.rpc.Status - 26, // 4: cc.arduino.cli.commands.v1.InitResponse.profile:type_name -> cc.arduino.cli.commands.v1.Profile - 0, // 5: cc.arduino.cli.commands.v1.FailedInstanceInitError.reason:type_name -> cc.arduino.cli.commands.v1.FailedInstanceInitReason - 24, // 6: cc.arduino.cli.commands.v1.DestroyRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 24, // 7: cc.arduino.cli.commands.v1.UpdateIndexRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 27, // 8: cc.arduino.cli.commands.v1.UpdateIndexResponse.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 24, // 9: cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 27, // 10: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 17, // 11: cc.arduino.cli.commands.v1.LoadSketchResponse.profiles:type_name -> cc.arduino.cli.commands.v1.SketchProfile - 17, // 12: cc.arduino.cli.commands.v1.LoadSketchResponse.default_profile:type_name -> cc.arduino.cli.commands.v1.SketchProfile - 27, // 13: cc.arduino.cli.commands.v1.InitResponse.Progress.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 28, // 14: cc.arduino.cli.commands.v1.InitResponse.Progress.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 1, // 15: cc.arduino.cli.commands.v1.ArduinoCoreService.Create:input_type -> cc.arduino.cli.commands.v1.CreateRequest - 3, // 16: cc.arduino.cli.commands.v1.ArduinoCoreService.Init:input_type -> cc.arduino.cli.commands.v1.InitRequest - 6, // 17: cc.arduino.cli.commands.v1.ArduinoCoreService.Destroy:input_type -> cc.arduino.cli.commands.v1.DestroyRequest - 8, // 18: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateIndex:input_type -> cc.arduino.cli.commands.v1.UpdateIndexRequest - 10, // 19: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateLibrariesIndex:input_type -> cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest - 12, // 20: cc.arduino.cli.commands.v1.ArduinoCoreService.Version:input_type -> cc.arduino.cli.commands.v1.VersionRequest - 14, // 21: cc.arduino.cli.commands.v1.ArduinoCoreService.NewSketch:input_type -> cc.arduino.cli.commands.v1.NewSketchRequest - 16, // 22: cc.arduino.cli.commands.v1.ArduinoCoreService.LoadSketch:input_type -> cc.arduino.cli.commands.v1.LoadSketchRequest - 19, // 23: cc.arduino.cli.commands.v1.ArduinoCoreService.ArchiveSketch:input_type -> cc.arduino.cli.commands.v1.ArchiveSketchRequest - 21, // 24: cc.arduino.cli.commands.v1.ArduinoCoreService.SetSketchDefaults:input_type -> cc.arduino.cli.commands.v1.SetSketchDefaultsRequest - 29, // 25: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardDetails:input_type -> cc.arduino.cli.commands.v1.BoardDetailsRequest - 30, // 26: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardList:input_type -> cc.arduino.cli.commands.v1.BoardListRequest - 31, // 27: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListAll:input_type -> cc.arduino.cli.commands.v1.BoardListAllRequest - 32, // 28: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardSearch:input_type -> cc.arduino.cli.commands.v1.BoardSearchRequest - 33, // 29: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListWatch:input_type -> cc.arduino.cli.commands.v1.BoardListWatchRequest - 34, // 30: cc.arduino.cli.commands.v1.ArduinoCoreService.Compile:input_type -> cc.arduino.cli.commands.v1.CompileRequest - 35, // 31: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformInstall:input_type -> cc.arduino.cli.commands.v1.PlatformInstallRequest - 36, // 32: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformDownload:input_type -> cc.arduino.cli.commands.v1.PlatformDownloadRequest - 37, // 33: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUninstall:input_type -> cc.arduino.cli.commands.v1.PlatformUninstallRequest - 38, // 34: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUpgrade:input_type -> cc.arduino.cli.commands.v1.PlatformUpgradeRequest - 39, // 35: cc.arduino.cli.commands.v1.ArduinoCoreService.Upload:input_type -> cc.arduino.cli.commands.v1.UploadRequest - 40, // 36: cc.arduino.cli.commands.v1.ArduinoCoreService.UploadUsingProgrammer:input_type -> cc.arduino.cli.commands.v1.UploadUsingProgrammerRequest - 41, // 37: cc.arduino.cli.commands.v1.ArduinoCoreService.SupportedUserFields:input_type -> cc.arduino.cli.commands.v1.SupportedUserFieldsRequest - 42, // 38: cc.arduino.cli.commands.v1.ArduinoCoreService.ListProgrammersAvailableForUpload:input_type -> cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadRequest - 43, // 39: cc.arduino.cli.commands.v1.ArduinoCoreService.BurnBootloader:input_type -> cc.arduino.cli.commands.v1.BurnBootloaderRequest - 44, // 40: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformSearch:input_type -> cc.arduino.cli.commands.v1.PlatformSearchRequest - 45, // 41: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformList:input_type -> cc.arduino.cli.commands.v1.PlatformListRequest - 46, // 42: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryDownload:input_type -> cc.arduino.cli.commands.v1.LibraryDownloadRequest - 47, // 43: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryInstall:input_type -> cc.arduino.cli.commands.v1.LibraryInstallRequest - 48, // 44: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgrade:input_type -> cc.arduino.cli.commands.v1.LibraryUpgradeRequest - 49, // 45: cc.arduino.cli.commands.v1.ArduinoCoreService.ZipLibraryInstall:input_type -> cc.arduino.cli.commands.v1.ZipLibraryInstallRequest - 50, // 46: cc.arduino.cli.commands.v1.ArduinoCoreService.GitLibraryInstall:input_type -> cc.arduino.cli.commands.v1.GitLibraryInstallRequest - 51, // 47: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUninstall:input_type -> cc.arduino.cli.commands.v1.LibraryUninstallRequest - 52, // 48: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgradeAll:input_type -> cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest - 53, // 49: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryResolveDependencies:input_type -> cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest - 54, // 50: cc.arduino.cli.commands.v1.ArduinoCoreService.LibrarySearch:input_type -> cc.arduino.cli.commands.v1.LibrarySearchRequest - 55, // 51: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryList:input_type -> cc.arduino.cli.commands.v1.LibraryListRequest - 56, // 52: cc.arduino.cli.commands.v1.ArduinoCoreService.Monitor:input_type -> cc.arduino.cli.commands.v1.MonitorRequest - 57, // 53: cc.arduino.cli.commands.v1.ArduinoCoreService.EnumerateMonitorPortSettings:input_type -> cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest - 58, // 54: cc.arduino.cli.commands.v1.ArduinoCoreService.Debug:input_type -> cc.arduino.cli.commands.v1.DebugRequest - 59, // 55: cc.arduino.cli.commands.v1.ArduinoCoreService.GetDebugConfig:input_type -> cc.arduino.cli.commands.v1.GetDebugConfigRequest - 2, // 56: cc.arduino.cli.commands.v1.ArduinoCoreService.Create:output_type -> cc.arduino.cli.commands.v1.CreateResponse - 4, // 57: cc.arduino.cli.commands.v1.ArduinoCoreService.Init:output_type -> cc.arduino.cli.commands.v1.InitResponse - 7, // 58: cc.arduino.cli.commands.v1.ArduinoCoreService.Destroy:output_type -> cc.arduino.cli.commands.v1.DestroyResponse - 9, // 59: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateIndex:output_type -> cc.arduino.cli.commands.v1.UpdateIndexResponse - 11, // 60: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateLibrariesIndex:output_type -> cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse - 13, // 61: cc.arduino.cli.commands.v1.ArduinoCoreService.Version:output_type -> cc.arduino.cli.commands.v1.VersionResponse - 15, // 62: cc.arduino.cli.commands.v1.ArduinoCoreService.NewSketch:output_type -> cc.arduino.cli.commands.v1.NewSketchResponse - 18, // 63: cc.arduino.cli.commands.v1.ArduinoCoreService.LoadSketch:output_type -> cc.arduino.cli.commands.v1.LoadSketchResponse - 20, // 64: cc.arduino.cli.commands.v1.ArduinoCoreService.ArchiveSketch:output_type -> cc.arduino.cli.commands.v1.ArchiveSketchResponse - 22, // 65: cc.arduino.cli.commands.v1.ArduinoCoreService.SetSketchDefaults:output_type -> cc.arduino.cli.commands.v1.SetSketchDefaultsResponse - 60, // 66: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardDetails:output_type -> cc.arduino.cli.commands.v1.BoardDetailsResponse - 61, // 67: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardList:output_type -> cc.arduino.cli.commands.v1.BoardListResponse - 62, // 68: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListAll:output_type -> cc.arduino.cli.commands.v1.BoardListAllResponse - 63, // 69: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardSearch:output_type -> cc.arduino.cli.commands.v1.BoardSearchResponse - 64, // 70: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListWatch:output_type -> cc.arduino.cli.commands.v1.BoardListWatchResponse - 65, // 71: cc.arduino.cli.commands.v1.ArduinoCoreService.Compile:output_type -> cc.arduino.cli.commands.v1.CompileResponse - 66, // 72: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformInstall:output_type -> cc.arduino.cli.commands.v1.PlatformInstallResponse - 67, // 73: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformDownload:output_type -> cc.arduino.cli.commands.v1.PlatformDownloadResponse - 68, // 74: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUninstall:output_type -> cc.arduino.cli.commands.v1.PlatformUninstallResponse - 69, // 75: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUpgrade:output_type -> cc.arduino.cli.commands.v1.PlatformUpgradeResponse - 70, // 76: cc.arduino.cli.commands.v1.ArduinoCoreService.Upload:output_type -> cc.arduino.cli.commands.v1.UploadResponse - 71, // 77: cc.arduino.cli.commands.v1.ArduinoCoreService.UploadUsingProgrammer:output_type -> cc.arduino.cli.commands.v1.UploadUsingProgrammerResponse - 72, // 78: cc.arduino.cli.commands.v1.ArduinoCoreService.SupportedUserFields:output_type -> cc.arduino.cli.commands.v1.SupportedUserFieldsResponse - 73, // 79: cc.arduino.cli.commands.v1.ArduinoCoreService.ListProgrammersAvailableForUpload:output_type -> cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadResponse - 74, // 80: cc.arduino.cli.commands.v1.ArduinoCoreService.BurnBootloader:output_type -> cc.arduino.cli.commands.v1.BurnBootloaderResponse - 75, // 81: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformSearch:output_type -> cc.arduino.cli.commands.v1.PlatformSearchResponse - 76, // 82: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformList:output_type -> cc.arduino.cli.commands.v1.PlatformListResponse - 77, // 83: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryDownload:output_type -> cc.arduino.cli.commands.v1.LibraryDownloadResponse - 78, // 84: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryInstall:output_type -> cc.arduino.cli.commands.v1.LibraryInstallResponse - 79, // 85: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgrade:output_type -> cc.arduino.cli.commands.v1.LibraryUpgradeResponse - 80, // 86: cc.arduino.cli.commands.v1.ArduinoCoreService.ZipLibraryInstall:output_type -> cc.arduino.cli.commands.v1.ZipLibraryInstallResponse - 81, // 87: cc.arduino.cli.commands.v1.ArduinoCoreService.GitLibraryInstall:output_type -> cc.arduino.cli.commands.v1.GitLibraryInstallResponse - 82, // 88: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUninstall:output_type -> cc.arduino.cli.commands.v1.LibraryUninstallResponse - 83, // 89: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgradeAll:output_type -> cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse - 84, // 90: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryResolveDependencies:output_type -> cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse - 85, // 91: cc.arduino.cli.commands.v1.ArduinoCoreService.LibrarySearch:output_type -> cc.arduino.cli.commands.v1.LibrarySearchResponse - 86, // 92: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryList:output_type -> cc.arduino.cli.commands.v1.LibraryListResponse - 87, // 93: cc.arduino.cli.commands.v1.ArduinoCoreService.Monitor:output_type -> cc.arduino.cli.commands.v1.MonitorResponse - 88, // 94: cc.arduino.cli.commands.v1.ArduinoCoreService.EnumerateMonitorPortSettings:output_type -> cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse - 89, // 95: cc.arduino.cli.commands.v1.ArduinoCoreService.Debug:output_type -> cc.arduino.cli.commands.v1.DebugResponse - 90, // 96: cc.arduino.cli.commands.v1.ArduinoCoreService.GetDebugConfig:output_type -> cc.arduino.cli.commands.v1.GetDebugConfigResponse - 56, // [56:97] is the sub-list for method output_type - 15, // [15:56] is the sub-list for method input_type - 15, // [15:15] is the sub-list for extension type_name - 15, // [15:15] is the sub-list for extension extendee - 0, // [0:15] is the sub-list for field type_name + 31, // 0: cc.arduino.cli.commands.v1.CreateResponse.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 31, // 1: cc.arduino.cli.commands.v1.InitRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 28, // 2: cc.arduino.cli.commands.v1.InitResponse.init_progress:type_name -> cc.arduino.cli.commands.v1.InitResponse.Progress + 32, // 3: cc.arduino.cli.commands.v1.InitResponse.error:type_name -> google.rpc.Status + 33, // 4: cc.arduino.cli.commands.v1.InitResponse.profile:type_name -> cc.arduino.cli.commands.v1.SketchProfile + 0, // 5: cc.arduino.cli.commands.v1.FailedInstanceInitError.reason:type_name -> cc.arduino.cli.commands.v1.FailedInstanceInitReason + 31, // 6: cc.arduino.cli.commands.v1.DestroyRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 31, // 7: cc.arduino.cli.commands.v1.UpdateIndexRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 34, // 8: cc.arduino.cli.commands.v1.UpdateIndexResponse.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 29, // 9: cc.arduino.cli.commands.v1.UpdateIndexResponse.result:type_name -> cc.arduino.cli.commands.v1.UpdateIndexResponse.Result + 31, // 10: cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 34, // 11: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 30, // 12: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.result:type_name -> cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.Result + 1, // 13: cc.arduino.cli.commands.v1.IndexUpdateReport.status:type_name -> cc.arduino.cli.commands.v1.IndexUpdateReport.Status + 35, // 14: cc.arduino.cli.commands.v1.LoadSketchResponse.sketch:type_name -> cc.arduino.cli.commands.v1.Sketch + 31, // 15: cc.arduino.cli.commands.v1.CleanDownloadCacheDirectoryRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 34, // 16: cc.arduino.cli.commands.v1.InitResponse.Progress.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 36, // 17: cc.arduino.cli.commands.v1.InitResponse.Progress.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 13, // 18: cc.arduino.cli.commands.v1.UpdateIndexResponse.Result.updated_indexes:type_name -> cc.arduino.cli.commands.v1.IndexUpdateReport + 13, // 19: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.Result.libraries_index:type_name -> cc.arduino.cli.commands.v1.IndexUpdateReport + 2, // 20: cc.arduino.cli.commands.v1.ArduinoCoreService.Create:input_type -> cc.arduino.cli.commands.v1.CreateRequest + 4, // 21: cc.arduino.cli.commands.v1.ArduinoCoreService.Init:input_type -> cc.arduino.cli.commands.v1.InitRequest + 7, // 22: cc.arduino.cli.commands.v1.ArduinoCoreService.Destroy:input_type -> cc.arduino.cli.commands.v1.DestroyRequest + 9, // 23: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateIndex:input_type -> cc.arduino.cli.commands.v1.UpdateIndexRequest + 11, // 24: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateLibrariesIndex:input_type -> cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest + 14, // 25: cc.arduino.cli.commands.v1.ArduinoCoreService.Version:input_type -> cc.arduino.cli.commands.v1.VersionRequest + 16, // 26: cc.arduino.cli.commands.v1.ArduinoCoreService.NewSketch:input_type -> cc.arduino.cli.commands.v1.NewSketchRequest + 18, // 27: cc.arduino.cli.commands.v1.ArduinoCoreService.LoadSketch:input_type -> cc.arduino.cli.commands.v1.LoadSketchRequest + 20, // 28: cc.arduino.cli.commands.v1.ArduinoCoreService.ArchiveSketch:input_type -> cc.arduino.cli.commands.v1.ArchiveSketchRequest + 22, // 29: cc.arduino.cli.commands.v1.ArduinoCoreService.SetSketchDefaults:input_type -> cc.arduino.cli.commands.v1.SetSketchDefaultsRequest + 37, // 30: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardDetails:input_type -> cc.arduino.cli.commands.v1.BoardDetailsRequest + 38, // 31: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardList:input_type -> cc.arduino.cli.commands.v1.BoardListRequest + 39, // 32: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListAll:input_type -> cc.arduino.cli.commands.v1.BoardListAllRequest + 40, // 33: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardSearch:input_type -> cc.arduino.cli.commands.v1.BoardSearchRequest + 41, // 34: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListWatch:input_type -> cc.arduino.cli.commands.v1.BoardListWatchRequest + 42, // 35: cc.arduino.cli.commands.v1.ArduinoCoreService.Compile:input_type -> cc.arduino.cli.commands.v1.CompileRequest + 43, // 36: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformInstall:input_type -> cc.arduino.cli.commands.v1.PlatformInstallRequest + 44, // 37: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformDownload:input_type -> cc.arduino.cli.commands.v1.PlatformDownloadRequest + 45, // 38: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUninstall:input_type -> cc.arduino.cli.commands.v1.PlatformUninstallRequest + 46, // 39: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUpgrade:input_type -> cc.arduino.cli.commands.v1.PlatformUpgradeRequest + 47, // 40: cc.arduino.cli.commands.v1.ArduinoCoreService.Upload:input_type -> cc.arduino.cli.commands.v1.UploadRequest + 48, // 41: cc.arduino.cli.commands.v1.ArduinoCoreService.UploadUsingProgrammer:input_type -> cc.arduino.cli.commands.v1.UploadUsingProgrammerRequest + 49, // 42: cc.arduino.cli.commands.v1.ArduinoCoreService.SupportedUserFields:input_type -> cc.arduino.cli.commands.v1.SupportedUserFieldsRequest + 50, // 43: cc.arduino.cli.commands.v1.ArduinoCoreService.ListProgrammersAvailableForUpload:input_type -> cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadRequest + 51, // 44: cc.arduino.cli.commands.v1.ArduinoCoreService.BurnBootloader:input_type -> cc.arduino.cli.commands.v1.BurnBootloaderRequest + 52, // 45: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformSearch:input_type -> cc.arduino.cli.commands.v1.PlatformSearchRequest + 53, // 46: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryDownload:input_type -> cc.arduino.cli.commands.v1.LibraryDownloadRequest + 54, // 47: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryInstall:input_type -> cc.arduino.cli.commands.v1.LibraryInstallRequest + 55, // 48: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgrade:input_type -> cc.arduino.cli.commands.v1.LibraryUpgradeRequest + 56, // 49: cc.arduino.cli.commands.v1.ArduinoCoreService.ZipLibraryInstall:input_type -> cc.arduino.cli.commands.v1.ZipLibraryInstallRequest + 57, // 50: cc.arduino.cli.commands.v1.ArduinoCoreService.GitLibraryInstall:input_type -> cc.arduino.cli.commands.v1.GitLibraryInstallRequest + 58, // 51: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUninstall:input_type -> cc.arduino.cli.commands.v1.LibraryUninstallRequest + 59, // 52: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgradeAll:input_type -> cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest + 60, // 53: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryResolveDependencies:input_type -> cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest + 61, // 54: cc.arduino.cli.commands.v1.ArduinoCoreService.LibrarySearch:input_type -> cc.arduino.cli.commands.v1.LibrarySearchRequest + 62, // 55: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryList:input_type -> cc.arduino.cli.commands.v1.LibraryListRequest + 63, // 56: cc.arduino.cli.commands.v1.ArduinoCoreService.Monitor:input_type -> cc.arduino.cli.commands.v1.MonitorRequest + 64, // 57: cc.arduino.cli.commands.v1.ArduinoCoreService.EnumerateMonitorPortSettings:input_type -> cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest + 65, // 58: cc.arduino.cli.commands.v1.ArduinoCoreService.Debug:input_type -> cc.arduino.cli.commands.v1.DebugRequest + 66, // 59: cc.arduino.cli.commands.v1.ArduinoCoreService.IsDebugSupported:input_type -> cc.arduino.cli.commands.v1.IsDebugSupportedRequest + 67, // 60: cc.arduino.cli.commands.v1.ArduinoCoreService.GetDebugConfig:input_type -> cc.arduino.cli.commands.v1.GetDebugConfigRequest + 24, // 61: cc.arduino.cli.commands.v1.ArduinoCoreService.CheckForArduinoCLIUpdates:input_type -> cc.arduino.cli.commands.v1.CheckForArduinoCLIUpdatesRequest + 26, // 62: cc.arduino.cli.commands.v1.ArduinoCoreService.CleanDownloadCacheDirectory:input_type -> cc.arduino.cli.commands.v1.CleanDownloadCacheDirectoryRequest + 68, // 63: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationSave:input_type -> cc.arduino.cli.commands.v1.ConfigurationSaveRequest + 69, // 64: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationOpen:input_type -> cc.arduino.cli.commands.v1.ConfigurationOpenRequest + 70, // 65: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationGet:input_type -> cc.arduino.cli.commands.v1.ConfigurationGetRequest + 71, // 66: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsEnumerate:input_type -> cc.arduino.cli.commands.v1.SettingsEnumerateRequest + 72, // 67: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsGetValue:input_type -> cc.arduino.cli.commands.v1.SettingsGetValueRequest + 73, // 68: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsSetValue:input_type -> cc.arduino.cli.commands.v1.SettingsSetValueRequest + 3, // 69: cc.arduino.cli.commands.v1.ArduinoCoreService.Create:output_type -> cc.arduino.cli.commands.v1.CreateResponse + 5, // 70: cc.arduino.cli.commands.v1.ArduinoCoreService.Init:output_type -> cc.arduino.cli.commands.v1.InitResponse + 8, // 71: cc.arduino.cli.commands.v1.ArduinoCoreService.Destroy:output_type -> cc.arduino.cli.commands.v1.DestroyResponse + 10, // 72: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateIndex:output_type -> cc.arduino.cli.commands.v1.UpdateIndexResponse + 12, // 73: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateLibrariesIndex:output_type -> cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse + 15, // 74: cc.arduino.cli.commands.v1.ArduinoCoreService.Version:output_type -> cc.arduino.cli.commands.v1.VersionResponse + 17, // 75: cc.arduino.cli.commands.v1.ArduinoCoreService.NewSketch:output_type -> cc.arduino.cli.commands.v1.NewSketchResponse + 19, // 76: cc.arduino.cli.commands.v1.ArduinoCoreService.LoadSketch:output_type -> cc.arduino.cli.commands.v1.LoadSketchResponse + 21, // 77: cc.arduino.cli.commands.v1.ArduinoCoreService.ArchiveSketch:output_type -> cc.arduino.cli.commands.v1.ArchiveSketchResponse + 23, // 78: cc.arduino.cli.commands.v1.ArduinoCoreService.SetSketchDefaults:output_type -> cc.arduino.cli.commands.v1.SetSketchDefaultsResponse + 74, // 79: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardDetails:output_type -> cc.arduino.cli.commands.v1.BoardDetailsResponse + 75, // 80: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardList:output_type -> cc.arduino.cli.commands.v1.BoardListResponse + 76, // 81: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListAll:output_type -> cc.arduino.cli.commands.v1.BoardListAllResponse + 77, // 82: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardSearch:output_type -> cc.arduino.cli.commands.v1.BoardSearchResponse + 78, // 83: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListWatch:output_type -> cc.arduino.cli.commands.v1.BoardListWatchResponse + 79, // 84: cc.arduino.cli.commands.v1.ArduinoCoreService.Compile:output_type -> cc.arduino.cli.commands.v1.CompileResponse + 80, // 85: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformInstall:output_type -> cc.arduino.cli.commands.v1.PlatformInstallResponse + 81, // 86: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformDownload:output_type -> cc.arduino.cli.commands.v1.PlatformDownloadResponse + 82, // 87: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUninstall:output_type -> cc.arduino.cli.commands.v1.PlatformUninstallResponse + 83, // 88: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUpgrade:output_type -> cc.arduino.cli.commands.v1.PlatformUpgradeResponse + 84, // 89: cc.arduino.cli.commands.v1.ArduinoCoreService.Upload:output_type -> cc.arduino.cli.commands.v1.UploadResponse + 85, // 90: cc.arduino.cli.commands.v1.ArduinoCoreService.UploadUsingProgrammer:output_type -> cc.arduino.cli.commands.v1.UploadUsingProgrammerResponse + 86, // 91: cc.arduino.cli.commands.v1.ArduinoCoreService.SupportedUserFields:output_type -> cc.arduino.cli.commands.v1.SupportedUserFieldsResponse + 87, // 92: cc.arduino.cli.commands.v1.ArduinoCoreService.ListProgrammersAvailableForUpload:output_type -> cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadResponse + 88, // 93: cc.arduino.cli.commands.v1.ArduinoCoreService.BurnBootloader:output_type -> cc.arduino.cli.commands.v1.BurnBootloaderResponse + 89, // 94: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformSearch:output_type -> cc.arduino.cli.commands.v1.PlatformSearchResponse + 90, // 95: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryDownload:output_type -> cc.arduino.cli.commands.v1.LibraryDownloadResponse + 91, // 96: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryInstall:output_type -> cc.arduino.cli.commands.v1.LibraryInstallResponse + 92, // 97: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgrade:output_type -> cc.arduino.cli.commands.v1.LibraryUpgradeResponse + 93, // 98: cc.arduino.cli.commands.v1.ArduinoCoreService.ZipLibraryInstall:output_type -> cc.arduino.cli.commands.v1.ZipLibraryInstallResponse + 94, // 99: cc.arduino.cli.commands.v1.ArduinoCoreService.GitLibraryInstall:output_type -> cc.arduino.cli.commands.v1.GitLibraryInstallResponse + 95, // 100: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUninstall:output_type -> cc.arduino.cli.commands.v1.LibraryUninstallResponse + 96, // 101: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgradeAll:output_type -> cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse + 97, // 102: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryResolveDependencies:output_type -> cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse + 98, // 103: cc.arduino.cli.commands.v1.ArduinoCoreService.LibrarySearch:output_type -> cc.arduino.cli.commands.v1.LibrarySearchResponse + 99, // 104: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryList:output_type -> cc.arduino.cli.commands.v1.LibraryListResponse + 100, // 105: cc.arduino.cli.commands.v1.ArduinoCoreService.Monitor:output_type -> cc.arduino.cli.commands.v1.MonitorResponse + 101, // 106: cc.arduino.cli.commands.v1.ArduinoCoreService.EnumerateMonitorPortSettings:output_type -> cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse + 102, // 107: cc.arduino.cli.commands.v1.ArduinoCoreService.Debug:output_type -> cc.arduino.cli.commands.v1.DebugResponse + 103, // 108: cc.arduino.cli.commands.v1.ArduinoCoreService.IsDebugSupported:output_type -> cc.arduino.cli.commands.v1.IsDebugSupportedResponse + 104, // 109: cc.arduino.cli.commands.v1.ArduinoCoreService.GetDebugConfig:output_type -> cc.arduino.cli.commands.v1.GetDebugConfigResponse + 25, // 110: cc.arduino.cli.commands.v1.ArduinoCoreService.CheckForArduinoCLIUpdates:output_type -> cc.arduino.cli.commands.v1.CheckForArduinoCLIUpdatesResponse + 27, // 111: cc.arduino.cli.commands.v1.ArduinoCoreService.CleanDownloadCacheDirectory:output_type -> cc.arduino.cli.commands.v1.CleanDownloadCacheDirectoryResponse + 105, // 112: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationSave:output_type -> cc.arduino.cli.commands.v1.ConfigurationSaveResponse + 106, // 113: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationOpen:output_type -> cc.arduino.cli.commands.v1.ConfigurationOpenResponse + 107, // 114: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationGet:output_type -> cc.arduino.cli.commands.v1.ConfigurationGetResponse + 108, // 115: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsEnumerate:output_type -> cc.arduino.cli.commands.v1.SettingsEnumerateResponse + 109, // 116: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsGetValue:output_type -> cc.arduino.cli.commands.v1.SettingsGetValueResponse + 110, // 117: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsSetValue:output_type -> cc.arduino.cli.commands.v1.SettingsSetValueResponse + 69, // [69:118] is the sub-list for method output_type + 20, // [20:69] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_commands_proto_init() } @@ -2211,6 +2734,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { file_cc_arduino_cli_commands_v1_monitor_proto_init() file_cc_arduino_cli_commands_v1_upload_proto_init() file_cc_arduino_cli_commands_v1_lib_proto_init() + file_cc_arduino_cli_commands_v1_settings_proto_init() if !protoimpl.UnsafeEnabled { file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateRequest); i { @@ -2345,7 +2869,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { } } file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionRequest); i { + switch v := v.(*IndexUpdateReport); i { case 0: return &v.state case 1: @@ -2357,7 +2881,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { } } file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionResponse); i { + switch v := v.(*VersionRequest); i { case 0: return &v.state case 1: @@ -2369,7 +2893,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { } } file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewSketchRequest); i { + switch v := v.(*VersionResponse); i { case 0: return &v.state case 1: @@ -2381,7 +2905,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { } } file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewSketchResponse); i { + switch v := v.(*NewSketchRequest); i { case 0: return &v.state case 1: @@ -2393,7 +2917,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { } } file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadSketchRequest); i { + switch v := v.(*NewSketchResponse); i { case 0: return &v.state case 1: @@ -2405,7 +2929,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { } } file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SketchProfile); i { + switch v := v.(*LoadSketchRequest); i { case 0: return &v.state case 1: @@ -2477,6 +3001,54 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { } } file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckForArduinoCLIUpdatesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckForArduinoCLIUpdatesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CleanDownloadCacheDirectoryRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CleanDownloadCacheDirectoryResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InitResponse_Progress); i { case 0: return &v.state @@ -2488,19 +3060,51 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateIndexResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateLibrariesIndexResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[3].OneofWrappers = []interface{}{ (*InitResponse_InitProgress)(nil), (*InitResponse_Error)(nil), (*InitResponse_Profile)(nil), } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[8].OneofWrappers = []interface{}{ + (*UpdateIndexResponse_DownloadProgress)(nil), + (*UpdateIndexResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[10].OneofWrappers = []interface{}{ + (*UpdateLibrariesIndexResponse_DownloadProgress)(nil), + (*UpdateLibrariesIndexResponse_Result_)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_commands_proto_rawDesc, - NumEnums: 1, - NumMessages: 23, + NumEnums: 2, + NumMessages: 29, NumExtensions: 0, NumServices: 1, }, diff --git a/rpc/cc/arduino/cli/commands/v1/commands.proto b/rpc/cc/arduino/cli/commands/v1/commands.proto index d16aab2c5a5..ce5aba9ed91 100644 --- a/rpc/cc/arduino/cli/commands/v1/commands.proto +++ b/rpc/cc/arduino/cli/commands/v1/commands.proto @@ -29,6 +29,7 @@ import "cc/arduino/cli/commands/v1/debug.proto"; import "cc/arduino/cli/commands/v1/monitor.proto"; import "cc/arduino/cli/commands/v1/upload.proto"; import "cc/arduino/cli/commands/v1/lib.proto"; +import "cc/arduino/cli/commands/v1/settings.proto"; // The main Arduino Platform service API service ArduinoCoreService { @@ -131,9 +132,6 @@ service ArduinoCoreService { // Search for a platform in the platforms indexes. rpc PlatformSearch(PlatformSearchRequest) returns (PlatformSearchResponse); - // List all installed platforms. - rpc PlatformList(PlatformListRequest) returns (PlatformListResponse); - // Download the archive file of an Arduino library in the libraries index to // the staging directory. rpc LibraryDownload(LibraryDownloadRequest) @@ -184,7 +182,43 @@ service ArduinoCoreService { // Start a debug session and communicate with the debugger tool. rpc Debug(stream DebugRequest) returns (stream DebugResponse) {} + // Determine if debugging is suported given a specific configuration. + rpc IsDebugSupported(IsDebugSupportedRequest) + returns (IsDebugSupportedResponse) {} + + // Query the debugger information given a specific configuration. rpc GetDebugConfig(GetDebugConfigRequest) returns (GetDebugConfigResponse) {} + + // Check for updates to the Arduino CLI. + rpc CheckForArduinoCLIUpdates(CheckForArduinoCLIUpdatesRequest) + returns (CheckForArduinoCLIUpdatesResponse); + + // Clean the download cache directory (where archives are downloaded). + rpc CleanDownloadCacheDirectory(CleanDownloadCacheDirectoryRequest) + returns (CleanDownloadCacheDirectoryResponse); + + // Writes the settings currently stored in memory in a YAML file + rpc ConfigurationSave(ConfigurationSaveRequest) + returns (ConfigurationSaveResponse); + + // Read the settings from a YAML file + rpc ConfigurationOpen(ConfigurationOpenRequest) + returns (ConfigurationOpenResponse); + + rpc ConfigurationGet(ConfigurationGetRequest) + returns (ConfigurationGetResponse); + + // Enumerate all the keys/values pairs available in the configuration + rpc SettingsEnumerate(SettingsEnumerateRequest) + returns (SettingsEnumerateResponse); + + // Get a single configuration value + rpc SettingsGetValue(SettingsGetValueRequest) + returns (SettingsGetValueResponse); + + // Set a single configuration value + rpc SettingsSetValue(SettingsSetValueRequest) + returns (SettingsSetValueResponse); } message CreateRequest {} @@ -214,7 +248,7 @@ message InitResponse { Progress init_progress = 1; google.rpc.Status error = 2; // Selected profile information - Profile profile = 3; + SketchProfile profile = 3; } } @@ -253,21 +287,63 @@ message UpdateIndexRequest { Instance instance = 1; // If set to true user defined package indexes will not be updated. bool ignore_custom_package_indexes = 2; + // Only perform index update if the index file is older than this value in + // seconds. + int64 update_if_older_than_secs = 3; } message UpdateIndexResponse { - // Progress of the package index download. - DownloadProgress download_progress = 1; + message Result { + // The result of the packages index update. + repeated IndexUpdateReport updated_indexes = 1; + } + oneof message { + // Progress of the package index download. + DownloadProgress download_progress = 1; + // The result of the index update. + Result result = 2; + } } message UpdateLibrariesIndexRequest { // Arduino Core Service instance from the Init response. Instance instance = 1; + // Only perform index update if the index file is older than this value in + // seconds. + int64 update_if_older_than_secs = 2; } message UpdateLibrariesIndexResponse { - // Progress of the libraries index download. - DownloadProgress download_progress = 1; + message Result { + // The result of the libraries index update. + IndexUpdateReport libraries_index = 1; + } + oneof message { + // Progress of the libraries index download. + DownloadProgress download_progress = 1; + // The result of the index update. + Result result = 2; + } +} + +message IndexUpdateReport { + enum Status { + // The status of the index update is unspecified. + STATUS_UNSPECIFIED = 0; + // The index has been successfully updated. + STATUS_UPDATED = 1; + // The index was already up to date. + STATUS_ALREADY_UP_TO_DATE = 2; + // The index update failed. + STATUS_FAILED = 3; + // The index update was skipped. + STATUS_SKIPPED = 4; + } + + // The URL of the index that was updated. + string index_url = 1; + // The result of the index update. + Status status = 2; } message VersionRequest {} @@ -303,35 +379,9 @@ message LoadSketchRequest { reserved 1; } -message SketchProfile { - // Name of the profile - string name = 1; - // FQBN used by the profile - string fqbn = 2; -} - message LoadSketchResponse { - // Absolute path to a main sketch files - string main_file = 1; - // Absolute path to folder that contains main_file - string location_path = 2; - // List of absolute paths to other sketch files - repeated string other_sketch_files = 3; - // List of absolute paths to additional sketch files - repeated string additional_files = 4; - // List of absolute paths to supported files in the sketch root folder, main - // file excluded - repeated string root_folder_files = 5; - // Default FQBN set in project file (sketch.yaml) - string default_fqbn = 6; - // Default Port set in project file (sketch.yaml) - string default_port = 7; - // Default Protocol set in project file (sketch.yaml) - string default_protocol = 8; - // List of profiles present in the project file (sketch.yaml) - repeated SketchProfile profiles = 9; - // Default profile set in the project file (sketch.yaml) - SketchProfile default_profile = 10; + // The loaded sketch + Sketch sketch = 1; } message ArchiveSketchRequest { @@ -357,6 +407,8 @@ message SetSketchDefaultsRequest { string default_port_address = 3; // The desired value for default_protocol in project file (sketch.yaml) string default_port_protocol = 4; + // The desired value for default_programmer in project file (sketch.yaml) + string default_programmer = 5; } message SetSketchDefaultsResponse { @@ -369,4 +421,26 @@ message SetSketchDefaultsResponse { // The value of default_protocol that has been written in project file // (sketch.yaml) string default_port_protocol = 3; + // The value of default_programmer that has been written in project file + // (sketch.yaml) + string default_programmer = 4; } + +message CheckForArduinoCLIUpdatesRequest { + // Force the check, even if the configuration says not to check for + // updates. + bool force_check = 1; +} + +message CheckForArduinoCLIUpdatesResponse { + // The latest version of Arduino CLI available, if bigger than the + // current version. + string newest_version = 1; +} + +message CleanDownloadCacheDirectoryRequest { + // The Arduino Core Service instance. + Instance instance = 1; +} + +message CleanDownloadCacheDirectoryResponse {} diff --git a/rpc/cc/arduino/cli/commands/v1/commands_grpc.pb.go b/rpc/cc/arduino/cli/commands/v1/commands_grpc.pb.go index 454d07dd5d2..b91e934cef8 100644 --- a/rpc/cc/arduino/cli/commands/v1/commands_grpc.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/commands_grpc.pb.go @@ -16,7 +16,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.24.3 +// - protoc v5.26.1 // source: cc/arduino/cli/commands/v1/commands.proto package commands @@ -60,7 +60,6 @@ const ( ArduinoCoreService_ListProgrammersAvailableForUpload_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/ListProgrammersAvailableForUpload" ArduinoCoreService_BurnBootloader_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/BurnBootloader" ArduinoCoreService_PlatformSearch_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/PlatformSearch" - ArduinoCoreService_PlatformList_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/PlatformList" ArduinoCoreService_LibraryDownload_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/LibraryDownload" ArduinoCoreService_LibraryInstall_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/LibraryInstall" ArduinoCoreService_LibraryUpgrade_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/LibraryUpgrade" @@ -74,7 +73,16 @@ const ( ArduinoCoreService_Monitor_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/Monitor" ArduinoCoreService_EnumerateMonitorPortSettings_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/EnumerateMonitorPortSettings" ArduinoCoreService_Debug_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/Debug" + ArduinoCoreService_IsDebugSupported_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/IsDebugSupported" ArduinoCoreService_GetDebugConfig_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/GetDebugConfig" + ArduinoCoreService_CheckForArduinoCLIUpdates_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/CheckForArduinoCLIUpdates" + ArduinoCoreService_CleanDownloadCacheDirectory_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/CleanDownloadCacheDirectory" + ArduinoCoreService_ConfigurationSave_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/ConfigurationSave" + ArduinoCoreService_ConfigurationOpen_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/ConfigurationOpen" + ArduinoCoreService_ConfigurationGet_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/ConfigurationGet" + ArduinoCoreService_SettingsEnumerate_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/SettingsEnumerate" + ArduinoCoreService_SettingsGetValue_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/SettingsGetValue" + ArduinoCoreService_SettingsSetValue_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/SettingsSetValue" ) // ArduinoCoreServiceClient is the client API for ArduinoCoreService service. @@ -139,8 +147,6 @@ type ArduinoCoreServiceClient interface { BurnBootloader(ctx context.Context, in *BurnBootloaderRequest, opts ...grpc.CallOption) (ArduinoCoreService_BurnBootloaderClient, error) // Search for a platform in the platforms indexes. PlatformSearch(ctx context.Context, in *PlatformSearchRequest, opts ...grpc.CallOption) (*PlatformSearchResponse, error) - // List all installed platforms. - PlatformList(ctx context.Context, in *PlatformListRequest, opts ...grpc.CallOption) (*PlatformListResponse, error) // Download the archive file of an Arduino library in the libraries index to // the staging directory. LibraryDownload(ctx context.Context, in *LibraryDownloadRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryDownloadClient, error) @@ -169,7 +175,25 @@ type ArduinoCoreServiceClient interface { EnumerateMonitorPortSettings(ctx context.Context, in *EnumerateMonitorPortSettingsRequest, opts ...grpc.CallOption) (*EnumerateMonitorPortSettingsResponse, error) // Start a debug session and communicate with the debugger tool. Debug(ctx context.Context, opts ...grpc.CallOption) (ArduinoCoreService_DebugClient, error) + // Determine if debugging is suported given a specific configuration. + IsDebugSupported(ctx context.Context, in *IsDebugSupportedRequest, opts ...grpc.CallOption) (*IsDebugSupportedResponse, error) + // Query the debugger information given a specific configuration. GetDebugConfig(ctx context.Context, in *GetDebugConfigRequest, opts ...grpc.CallOption) (*GetDebugConfigResponse, error) + // Check for updates to the Arduino CLI. + CheckForArduinoCLIUpdates(ctx context.Context, in *CheckForArduinoCLIUpdatesRequest, opts ...grpc.CallOption) (*CheckForArduinoCLIUpdatesResponse, error) + // Clean the download cache directory (where archives are downloaded). + CleanDownloadCacheDirectory(ctx context.Context, in *CleanDownloadCacheDirectoryRequest, opts ...grpc.CallOption) (*CleanDownloadCacheDirectoryResponse, error) + // Writes the settings currently stored in memory in a YAML file + ConfigurationSave(ctx context.Context, in *ConfigurationSaveRequest, opts ...grpc.CallOption) (*ConfigurationSaveResponse, error) + // Read the settings from a YAML file + ConfigurationOpen(ctx context.Context, in *ConfigurationOpenRequest, opts ...grpc.CallOption) (*ConfigurationOpenResponse, error) + ConfigurationGet(ctx context.Context, in *ConfigurationGetRequest, opts ...grpc.CallOption) (*ConfigurationGetResponse, error) + // Enumerate all the keys/values pairs available in the configuration + SettingsEnumerate(ctx context.Context, in *SettingsEnumerateRequest, opts ...grpc.CallOption) (*SettingsEnumerateResponse, error) + // Get a single configuration value + SettingsGetValue(ctx context.Context, in *SettingsGetValueRequest, opts ...grpc.CallOption) (*SettingsGetValueResponse, error) + // Set a single configuration value + SettingsSetValue(ctx context.Context, in *SettingsSetValueRequest, opts ...grpc.CallOption) (*SettingsSetValueResponse, error) } type arduinoCoreServiceClient struct { @@ -690,15 +714,6 @@ func (c *arduinoCoreServiceClient) PlatformSearch(ctx context.Context, in *Platf return out, nil } -func (c *arduinoCoreServiceClient) PlatformList(ctx context.Context, in *PlatformListRequest, opts ...grpc.CallOption) (*PlatformListResponse, error) { - out := new(PlatformListResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_PlatformList_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *arduinoCoreServiceClient) LibraryDownload(ctx context.Context, in *LibraryDownloadRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryDownloadClient, error) { stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[12], ArduinoCoreService_LibraryDownload_FullMethodName, opts...) if err != nil { @@ -1021,6 +1036,15 @@ func (x *arduinoCoreServiceDebugClient) Recv() (*DebugResponse, error) { return m, nil } +func (c *arduinoCoreServiceClient) IsDebugSupported(ctx context.Context, in *IsDebugSupportedRequest, opts ...grpc.CallOption) (*IsDebugSupportedResponse, error) { + out := new(IsDebugSupportedResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_IsDebugSupported_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *arduinoCoreServiceClient) GetDebugConfig(ctx context.Context, in *GetDebugConfigRequest, opts ...grpc.CallOption) (*GetDebugConfigResponse, error) { out := new(GetDebugConfigResponse) err := c.cc.Invoke(ctx, ArduinoCoreService_GetDebugConfig_FullMethodName, in, out, opts...) @@ -1030,6 +1054,78 @@ func (c *arduinoCoreServiceClient) GetDebugConfig(ctx context.Context, in *GetDe return out, nil } +func (c *arduinoCoreServiceClient) CheckForArduinoCLIUpdates(ctx context.Context, in *CheckForArduinoCLIUpdatesRequest, opts ...grpc.CallOption) (*CheckForArduinoCLIUpdatesResponse, error) { + out := new(CheckForArduinoCLIUpdatesResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_CheckForArduinoCLIUpdates_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *arduinoCoreServiceClient) CleanDownloadCacheDirectory(ctx context.Context, in *CleanDownloadCacheDirectoryRequest, opts ...grpc.CallOption) (*CleanDownloadCacheDirectoryResponse, error) { + out := new(CleanDownloadCacheDirectoryResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_CleanDownloadCacheDirectory_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *arduinoCoreServiceClient) ConfigurationSave(ctx context.Context, in *ConfigurationSaveRequest, opts ...grpc.CallOption) (*ConfigurationSaveResponse, error) { + out := new(ConfigurationSaveResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_ConfigurationSave_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *arduinoCoreServiceClient) ConfigurationOpen(ctx context.Context, in *ConfigurationOpenRequest, opts ...grpc.CallOption) (*ConfigurationOpenResponse, error) { + out := new(ConfigurationOpenResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_ConfigurationOpen_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *arduinoCoreServiceClient) ConfigurationGet(ctx context.Context, in *ConfigurationGetRequest, opts ...grpc.CallOption) (*ConfigurationGetResponse, error) { + out := new(ConfigurationGetResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_ConfigurationGet_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *arduinoCoreServiceClient) SettingsEnumerate(ctx context.Context, in *SettingsEnumerateRequest, opts ...grpc.CallOption) (*SettingsEnumerateResponse, error) { + out := new(SettingsEnumerateResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_SettingsEnumerate_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *arduinoCoreServiceClient) SettingsGetValue(ctx context.Context, in *SettingsGetValueRequest, opts ...grpc.CallOption) (*SettingsGetValueResponse, error) { + out := new(SettingsGetValueResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_SettingsGetValue_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *arduinoCoreServiceClient) SettingsSetValue(ctx context.Context, in *SettingsSetValueRequest, opts ...grpc.CallOption) (*SettingsSetValueResponse, error) { + out := new(SettingsSetValueResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_SettingsSetValue_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ArduinoCoreServiceServer is the server API for ArduinoCoreService service. // All implementations must embed UnimplementedArduinoCoreServiceServer // for forward compatibility @@ -1092,8 +1188,6 @@ type ArduinoCoreServiceServer interface { BurnBootloader(*BurnBootloaderRequest, ArduinoCoreService_BurnBootloaderServer) error // Search for a platform in the platforms indexes. PlatformSearch(context.Context, *PlatformSearchRequest) (*PlatformSearchResponse, error) - // List all installed platforms. - PlatformList(context.Context, *PlatformListRequest) (*PlatformListResponse, error) // Download the archive file of an Arduino library in the libraries index to // the staging directory. LibraryDownload(*LibraryDownloadRequest, ArduinoCoreService_LibraryDownloadServer) error @@ -1122,7 +1216,25 @@ type ArduinoCoreServiceServer interface { EnumerateMonitorPortSettings(context.Context, *EnumerateMonitorPortSettingsRequest) (*EnumerateMonitorPortSettingsResponse, error) // Start a debug session and communicate with the debugger tool. Debug(ArduinoCoreService_DebugServer) error + // Determine if debugging is suported given a specific configuration. + IsDebugSupported(context.Context, *IsDebugSupportedRequest) (*IsDebugSupportedResponse, error) + // Query the debugger information given a specific configuration. GetDebugConfig(context.Context, *GetDebugConfigRequest) (*GetDebugConfigResponse, error) + // Check for updates to the Arduino CLI. + CheckForArduinoCLIUpdates(context.Context, *CheckForArduinoCLIUpdatesRequest) (*CheckForArduinoCLIUpdatesResponse, error) + // Clean the download cache directory (where archives are downloaded). + CleanDownloadCacheDirectory(context.Context, *CleanDownloadCacheDirectoryRequest) (*CleanDownloadCacheDirectoryResponse, error) + // Writes the settings currently stored in memory in a YAML file + ConfigurationSave(context.Context, *ConfigurationSaveRequest) (*ConfigurationSaveResponse, error) + // Read the settings from a YAML file + ConfigurationOpen(context.Context, *ConfigurationOpenRequest) (*ConfigurationOpenResponse, error) + ConfigurationGet(context.Context, *ConfigurationGetRequest) (*ConfigurationGetResponse, error) + // Enumerate all the keys/values pairs available in the configuration + SettingsEnumerate(context.Context, *SettingsEnumerateRequest) (*SettingsEnumerateResponse, error) + // Get a single configuration value + SettingsGetValue(context.Context, *SettingsGetValueRequest) (*SettingsGetValueResponse, error) + // Set a single configuration value + SettingsSetValue(context.Context, *SettingsSetValueRequest) (*SettingsSetValueResponse, error) mustEmbedUnimplementedArduinoCoreServiceServer() } @@ -1208,9 +1320,6 @@ func (UnimplementedArduinoCoreServiceServer) BurnBootloader(*BurnBootloaderReque func (UnimplementedArduinoCoreServiceServer) PlatformSearch(context.Context, *PlatformSearchRequest) (*PlatformSearchResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PlatformSearch not implemented") } -func (UnimplementedArduinoCoreServiceServer) PlatformList(context.Context, *PlatformListRequest) (*PlatformListResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PlatformList not implemented") -} func (UnimplementedArduinoCoreServiceServer) LibraryDownload(*LibraryDownloadRequest, ArduinoCoreService_LibraryDownloadServer) error { return status.Errorf(codes.Unimplemented, "method LibraryDownload not implemented") } @@ -1250,9 +1359,36 @@ func (UnimplementedArduinoCoreServiceServer) EnumerateMonitorPortSettings(contex func (UnimplementedArduinoCoreServiceServer) Debug(ArduinoCoreService_DebugServer) error { return status.Errorf(codes.Unimplemented, "method Debug not implemented") } +func (UnimplementedArduinoCoreServiceServer) IsDebugSupported(context.Context, *IsDebugSupportedRequest) (*IsDebugSupportedResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IsDebugSupported not implemented") +} func (UnimplementedArduinoCoreServiceServer) GetDebugConfig(context.Context, *GetDebugConfigRequest) (*GetDebugConfigResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDebugConfig not implemented") } +func (UnimplementedArduinoCoreServiceServer) CheckForArduinoCLIUpdates(context.Context, *CheckForArduinoCLIUpdatesRequest) (*CheckForArduinoCLIUpdatesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CheckForArduinoCLIUpdates not implemented") +} +func (UnimplementedArduinoCoreServiceServer) CleanDownloadCacheDirectory(context.Context, *CleanDownloadCacheDirectoryRequest) (*CleanDownloadCacheDirectoryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CleanDownloadCacheDirectory not implemented") +} +func (UnimplementedArduinoCoreServiceServer) ConfigurationSave(context.Context, *ConfigurationSaveRequest) (*ConfigurationSaveResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConfigurationSave not implemented") +} +func (UnimplementedArduinoCoreServiceServer) ConfigurationOpen(context.Context, *ConfigurationOpenRequest) (*ConfigurationOpenResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConfigurationOpen not implemented") +} +func (UnimplementedArduinoCoreServiceServer) ConfigurationGet(context.Context, *ConfigurationGetRequest) (*ConfigurationGetResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConfigurationGet not implemented") +} +func (UnimplementedArduinoCoreServiceServer) SettingsEnumerate(context.Context, *SettingsEnumerateRequest) (*SettingsEnumerateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SettingsEnumerate not implemented") +} +func (UnimplementedArduinoCoreServiceServer) SettingsGetValue(context.Context, *SettingsGetValueRequest) (*SettingsGetValueResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SettingsGetValue not implemented") +} +func (UnimplementedArduinoCoreServiceServer) SettingsSetValue(context.Context, *SettingsSetValueRequest) (*SettingsSetValueResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SettingsSetValue not implemented") +} func (UnimplementedArduinoCoreServiceServer) mustEmbedUnimplementedArduinoCoreServiceServer() {} // UnsafeArduinoCoreServiceServer may be embedded to opt out of forward compatibility for this service. @@ -1770,24 +1906,6 @@ func _ArduinoCoreService_PlatformSearch_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } -func _ArduinoCoreService_PlatformList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PlatformListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ArduinoCoreServiceServer).PlatformList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: ArduinoCoreService_PlatformList_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ArduinoCoreServiceServer).PlatformList(ctx, req.(*PlatformListRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _ArduinoCoreService_LibraryDownload_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(LibraryDownloadRequest) if err := stream.RecvMsg(m); err != nil { @@ -2059,6 +2177,24 @@ func (x *arduinoCoreServiceDebugServer) Recv() (*DebugRequest, error) { return m, nil } +func _ArduinoCoreService_IsDebugSupported_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IsDebugSupportedRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).IsDebugSupported(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_IsDebugSupported_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).IsDebugSupported(ctx, req.(*IsDebugSupportedRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ArduinoCoreService_GetDebugConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetDebugConfigRequest) if err := dec(in); err != nil { @@ -2077,6 +2213,150 @@ func _ArduinoCoreService_GetDebugConfig_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } +func _ArduinoCoreService_CheckForArduinoCLIUpdates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckForArduinoCLIUpdatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).CheckForArduinoCLIUpdates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_CheckForArduinoCLIUpdates_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).CheckForArduinoCLIUpdates(ctx, req.(*CheckForArduinoCLIUpdatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArduinoCoreService_CleanDownloadCacheDirectory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CleanDownloadCacheDirectoryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).CleanDownloadCacheDirectory(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_CleanDownloadCacheDirectory_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).CleanDownloadCacheDirectory(ctx, req.(*CleanDownloadCacheDirectoryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArduinoCoreService_ConfigurationSave_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ConfigurationSaveRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).ConfigurationSave(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_ConfigurationSave_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).ConfigurationSave(ctx, req.(*ConfigurationSaveRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArduinoCoreService_ConfigurationOpen_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ConfigurationOpenRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).ConfigurationOpen(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_ConfigurationOpen_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).ConfigurationOpen(ctx, req.(*ConfigurationOpenRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArduinoCoreService_ConfigurationGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ConfigurationGetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).ConfigurationGet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_ConfigurationGet_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).ConfigurationGet(ctx, req.(*ConfigurationGetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArduinoCoreService_SettingsEnumerate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SettingsEnumerateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).SettingsEnumerate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_SettingsEnumerate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).SettingsEnumerate(ctx, req.(*SettingsEnumerateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArduinoCoreService_SettingsGetValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SettingsGetValueRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).SettingsGetValue(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_SettingsGetValue_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).SettingsGetValue(ctx, req.(*SettingsGetValueRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArduinoCoreService_SettingsSetValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SettingsSetValueRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).SettingsSetValue(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_SettingsSetValue_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).SettingsSetValue(ctx, req.(*SettingsSetValueRequest)) + } + return interceptor(ctx, in, info, handler) +} + // ArduinoCoreService_ServiceDesc is the grpc.ServiceDesc for ArduinoCoreService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -2140,10 +2420,6 @@ var ArduinoCoreService_ServiceDesc = grpc.ServiceDesc{ MethodName: "PlatformSearch", Handler: _ArduinoCoreService_PlatformSearch_Handler, }, - { - MethodName: "PlatformList", - Handler: _ArduinoCoreService_PlatformList_Handler, - }, { MethodName: "LibraryResolveDependencies", Handler: _ArduinoCoreService_LibraryResolveDependencies_Handler, @@ -2160,10 +2436,46 @@ var ArduinoCoreService_ServiceDesc = grpc.ServiceDesc{ MethodName: "EnumerateMonitorPortSettings", Handler: _ArduinoCoreService_EnumerateMonitorPortSettings_Handler, }, + { + MethodName: "IsDebugSupported", + Handler: _ArduinoCoreService_IsDebugSupported_Handler, + }, { MethodName: "GetDebugConfig", Handler: _ArduinoCoreService_GetDebugConfig_Handler, }, + { + MethodName: "CheckForArduinoCLIUpdates", + Handler: _ArduinoCoreService_CheckForArduinoCLIUpdates_Handler, + }, + { + MethodName: "CleanDownloadCacheDirectory", + Handler: _ArduinoCoreService_CleanDownloadCacheDirectory_Handler, + }, + { + MethodName: "ConfigurationSave", + Handler: _ArduinoCoreService_ConfigurationSave_Handler, + }, + { + MethodName: "ConfigurationOpen", + Handler: _ArduinoCoreService_ConfigurationOpen_Handler, + }, + { + MethodName: "ConfigurationGet", + Handler: _ArduinoCoreService_ConfigurationGet_Handler, + }, + { + MethodName: "SettingsEnumerate", + Handler: _ArduinoCoreService_SettingsEnumerate_Handler, + }, + { + MethodName: "SettingsGetValue", + Handler: _ArduinoCoreService_SettingsGetValue_Handler, + }, + { + MethodName: "SettingsSetValue", + Handler: _ArduinoCoreService_SettingsSetValue_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/rpc/cc/arduino/cli/commands/v1/common.go b/rpc/cc/arduino/cli/commands/v1/common.go index 9ef27da3e58..2e1464c3fb9 100644 --- a/rpc/cc/arduino/cli/commands/v1/common.go +++ b/rpc/cc/arduino/cli/commands/v1/common.go @@ -15,6 +15,14 @@ package commands +import ( + "sort" + + "github.com/arduino/go-properties-orderedmap" + discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2" + semver "go.bug.st/relaxed-semver" +) + // DownloadProgressCB is a callback to get updates on download progress type DownloadProgressCB func(curr *DownloadProgress) @@ -56,3 +64,73 @@ func (d DownloadProgressCB) End(success bool, message string) { // TaskProgressCB is a callback to receive progress messages type TaskProgressCB func(msg *TaskProgress) + +// InstanceCommand is an interface that represents a gRPC command with +// a gRPC Instance. +type InstanceCommand interface { + GetInstance() *Instance +} + +// GetLatestRelease returns the latest release in this PlatformSummary, +// or nil if not available. +func (s *PlatformSummary) GetLatestRelease() *PlatformRelease { + if s.GetLatestVersion() == "" { + return nil + } + return s.GetReleases()[s.GetLatestVersion()] +} + +// GetInstalledRelease returns the latest release in this PlatformSummary, +// or nil if not available. +func (s *PlatformSummary) GetInstalledRelease() *PlatformRelease { + if s.GetInstalledVersion() == "" { + return nil + } + return s.GetReleases()[s.GetInstalledVersion()] +} + +// GetSortedReleases returns the releases in order of version. +func (s *PlatformSummary) GetSortedReleases() []*PlatformRelease { + res := []*PlatformRelease{} + for _, release := range s.GetReleases() { + res = append(res, release) + } + sort.SliceStable(res, func(i, j int) bool { + return semver.ParseRelaxed(res[i].GetVersion()).LessThan(semver.ParseRelaxed(res[j].GetVersion())) + }) + return res +} + +// DiscoveryPortToRPC converts a *discovery.Port into an *rpc.Port +func DiscoveryPortToRPC(p *discovery.Port) *Port { + props := p.Properties + if props == nil { + props = properties.NewMap() + } + return &Port{ + Address: p.Address, + Label: p.AddressLabel, + Protocol: p.Protocol, + ProtocolLabel: p.ProtocolLabel, + HardwareId: p.HardwareID, + Properties: props.AsMap(), + } +} + +// DiscoveryPortFromRPCPort converts an *rpc.Port into a *discovery.Port +func DiscoveryPortFromRPCPort(o *Port) (p *discovery.Port) { + if o == nil { + return nil + } + res := &discovery.Port{ + Address: o.GetAddress(), + AddressLabel: o.GetLabel(), + Protocol: o.GetProtocol(), + ProtocolLabel: o.GetProtocolLabel(), + HardwareID: o.GetHardwareId(), + } + if o.GetProperties() != nil { + res.Properties = properties.NewFromHashmap(o.GetProperties()) + } + return res +} diff --git a/rpc/cc/arduino/cli/commands/v1/common.pb.go b/rpc/cc/arduino/cli/commands/v1/common.pb.go index 90453bd45ea..e11f43b7f0e 100644 --- a/rpc/cc/arduino/cli/commands/v1/common.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/common.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.1 +// protoc v5.26.1 // source: cc/arduino/cli/commands/v1/common.proto package commands @@ -430,9 +430,12 @@ type Programmer struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Platform name Platform string `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + // Programmer ID + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + // Programmer name + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` } func (x *Programmer) Reset() { @@ -488,53 +491,63 @@ func (x *Programmer) GetName() string { return "" } +// MissingProgrammerError is a status error detail that is returned when +// the operation can not be completed due to a missing programmer argument. +type MissingProgrammerError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MissingProgrammerError) Reset() { + *x = MissingProgrammerError{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MissingProgrammerError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MissingProgrammerError) ProtoMessage() {} + +func (x *MissingProgrammerError) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MissingProgrammerError.ProtoReflect.Descriptor instead. +func (*MissingProgrammerError) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{7} +} + +// Platform is a structure containing all the information about a single +// platform release. type Platform struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Platform ID (e.g., `arduino:avr`). - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Version of the platform. - Installed string `protobuf:"bytes,2,opt,name=installed,proto3" json:"installed,omitempty"` - // Newest available version of the platform. - Latest string `protobuf:"bytes,3,opt,name=latest,proto3" json:"latest,omitempty"` - // Name used to identify the platform to humans (e.g., "Arduino AVR Boards"). - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // Maintainer of the platform's package. - Maintainer string `protobuf:"bytes,5,opt,name=maintainer,proto3" json:"maintainer,omitempty"` - // A URL provided by the author of the platform's package, intended to point - // to their website. - Website string `protobuf:"bytes,6,opt,name=website,proto3" json:"website,omitempty"` - // Email of the maintainer of the platform's package. - Email string `protobuf:"bytes,7,opt,name=email,proto3" json:"email,omitempty"` - // List of boards provided by the platform. If the platform is installed, - // this is the boards listed in the platform's boards.txt. If the platform is - // not installed, this is an arbitrary list of board names provided by the - // platform author for display and may not match boards.txt. - Boards []*Board `protobuf:"bytes,8,rep,name=boards,proto3" json:"boards,omitempty"` - // If true this Platform has been installed manually in the user' sketchbook - // hardware folder - ManuallyInstalled bool `protobuf:"varint,9,opt,name=manually_installed,json=manuallyInstalled,proto3" json:"manually_installed,omitempty"` - // If true this Platform has been deprecated - Deprecated bool `protobuf:"varint,10,opt,name=deprecated,proto3" json:"deprecated,omitempty"` - // Type of the platform. - Type []string `protobuf:"bytes,11,rep,name=type,proto3" json:"type,omitempty"` - // A URL provided by the author of the platform's package, intended to point - // to their online help service. - Help *HelpResources `protobuf:"bytes,12,opt,name=help,proto3" json:"help,omitempty"` - // If true the platform is indexed - Indexed bool `protobuf:"varint,13,opt,name=indexed,proto3" json:"indexed,omitempty"` - // This field is true when the platform is installed with the Arduino IDE 1.8. - // If the platform is also not indexed it may fail to work correctly in some - // circumstances, and it may need to be re-installed. - MissingMetadata bool `protobuf:"varint,14,opt,name=missing_metadata,json=missingMetadata,proto3" json:"missing_metadata,omitempty"` + // Generic information about a platform + Metadata *PlatformMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Information about a specific release of a platform + Release *PlatformRelease `protobuf:"bytes,2,opt,name=release,proto3" json:"release,omitempty"` } func (x *Platform) Reset() { *x = Platform{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[7] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -547,7 +560,7 @@ func (x *Platform) String() string { func (*Platform) ProtoMessage() {} func (x *Platform) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[7] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -560,103 +573,334 @@ func (x *Platform) ProtoReflect() protoreflect.Message { // Deprecated: Use Platform.ProtoReflect.Descriptor instead. func (*Platform) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{7} + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{8} } -func (x *Platform) GetId() string { +func (x *Platform) GetMetadata() *PlatformMetadata { if x != nil { - return x.Id + return x.Metadata } - return "" + return nil } -func (x *Platform) GetInstalled() string { +func (x *Platform) GetRelease() *PlatformRelease { if x != nil { - return x.Installed + return x.Release + } + return nil +} + +// PlatformSummary is a structure containing all the information about +// a platform and all its available releases. +type PlatformSummary struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Generic information about a platform + Metadata *PlatformMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Maps version to the corresponding PlatformRelease + Releases map[string]*PlatformRelease `protobuf:"bytes,2,rep,name=releases,proto3" json:"releases,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The installed version of the platform, or empty string if none installed + InstalledVersion string `protobuf:"bytes,3,opt,name=installed_version,json=installedVersion,proto3" json:"installed_version,omitempty"` + // The latest available version of the platform that can be installable, or + // empty if none available. + LatestVersion string `protobuf:"bytes,4,opt,name=latest_version,json=latestVersion,proto3" json:"latest_version,omitempty"` +} + +func (x *PlatformSummary) Reset() { + *x = PlatformSummary{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PlatformSummary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformSummary) ProtoMessage() {} + +func (x *PlatformSummary) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlatformSummary.ProtoReflect.Descriptor instead. +func (*PlatformSummary) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{9} +} + +func (x *PlatformSummary) GetMetadata() *PlatformMetadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *PlatformSummary) GetReleases() map[string]*PlatformRelease { + if x != nil { + return x.Releases + } + return nil +} + +func (x *PlatformSummary) GetInstalledVersion() string { + if x != nil { + return x.InstalledVersion } return "" } -func (x *Platform) GetLatest() string { +func (x *PlatformSummary) GetLatestVersion() string { if x != nil { - return x.Latest + return x.LatestVersion } return "" } -func (x *Platform) GetName() string { +// PlatformMetadata contains generic information about a platform (not +// correlated to a specific release). +type PlatformMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Platform ID (e.g., `arduino:avr`). + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Maintainer of the platform's package. + Maintainer string `protobuf:"bytes,2,opt,name=maintainer,proto3" json:"maintainer,omitempty"` + // A URL provided by the author of the platform's package, intended to point + // to their website. + Website string `protobuf:"bytes,3,opt,name=website,proto3" json:"website,omitempty"` + // Email of the maintainer of the platform's package. + Email string `protobuf:"bytes,4,opt,name=email,proto3" json:"email,omitempty"` + // If true this Platform has been installed manually in the user' sketchbook + // hardware folder + ManuallyInstalled bool `protobuf:"varint,5,opt,name=manually_installed,json=manuallyInstalled,proto3" json:"manually_installed,omitempty"` + // True if the latest release of this Platform has been deprecated + Deprecated bool `protobuf:"varint,6,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + // If true the platform is indexed + Indexed bool `protobuf:"varint,7,opt,name=indexed,proto3" json:"indexed,omitempty"` +} + +func (x *PlatformMetadata) Reset() { + *x = PlatformMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PlatformMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformMetadata) ProtoMessage() {} + +func (x *PlatformMetadata) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlatformMetadata.ProtoReflect.Descriptor instead. +func (*PlatformMetadata) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{10} +} + +func (x *PlatformMetadata) GetId() string { if x != nil { - return x.Name + return x.Id } return "" } -func (x *Platform) GetMaintainer() string { +func (x *PlatformMetadata) GetMaintainer() string { if x != nil { return x.Maintainer } return "" } -func (x *Platform) GetWebsite() string { +func (x *PlatformMetadata) GetWebsite() string { if x != nil { return x.Website } return "" } -func (x *Platform) GetEmail() string { +func (x *PlatformMetadata) GetEmail() string { if x != nil { return x.Email } return "" } -func (x *Platform) GetBoards() []*Board { +func (x *PlatformMetadata) GetManuallyInstalled() bool { if x != nil { - return x.Boards + return x.ManuallyInstalled } - return nil + return false } -func (x *Platform) GetManuallyInstalled() bool { +func (x *PlatformMetadata) GetDeprecated() bool { if x != nil { - return x.ManuallyInstalled + return x.Deprecated } return false } -func (x *Platform) GetDeprecated() bool { +func (x *PlatformMetadata) GetIndexed() bool { if x != nil { - return x.Deprecated + return x.Indexed + } + return false +} + +// PlatformRelease contains information about a specific release of a platform. +type PlatformRelease struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name used to identify the platform to humans (e.g., "Arduino AVR Boards"). + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Version of the platform release + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // Type of the platform. + Types []string `protobuf:"bytes,3,rep,name=types,proto3" json:"types,omitempty"` + // True if the platform is installed + Installed bool `protobuf:"varint,4,opt,name=installed,proto3" json:"installed,omitempty"` + // List of boards provided by the platform. If the platform is installed, + // this is the boards listed in the platform's boards.txt. If the platform is + // not installed, this is an arbitrary list of board names provided by the + // platform author for display and may not match boards.txt. + Boards []*Board `protobuf:"bytes,5,rep,name=boards,proto3" json:"boards,omitempty"` + // A URL provided by the author of the platform's package, intended to point + // to their online help service. + Help *HelpResources `protobuf:"bytes,6,opt,name=help,proto3" json:"help,omitempty"` + // This field is true if the platform is missing installation metadata (this + // happens if the platform has been installed with the legacy Arduino IDE + // <=1.8.x). If the platform miss metadata and it's not indexed through a + // package index, it may fail to work correctly in some circumstances, and it + // may need to be reinstalled. This should be evaluated only when the + // PlatformRelease is `Installed` otherwise is an undefined behaviour. + MissingMetadata bool `protobuf:"varint,7,opt,name=missing_metadata,json=missingMetadata,proto3" json:"missing_metadata,omitempty"` + // True this release is deprecated + Deprecated bool `protobuf:"varint,8,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + // True if the platform dependencies are available for the current OS/ARCH. + // This also means that the platform is installable. + Compatible bool `protobuf:"varint,9,opt,name=compatible,proto3" json:"compatible,omitempty"` +} + +func (x *PlatformRelease) Reset() { + *x = PlatformRelease{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PlatformRelease) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformRelease) ProtoMessage() {} + +func (x *PlatformRelease) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlatformRelease.ProtoReflect.Descriptor instead. +func (*PlatformRelease) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{11} +} + +func (x *PlatformRelease) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PlatformRelease) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *PlatformRelease) GetTypes() []string { + if x != nil { + return x.Types + } + return nil +} + +func (x *PlatformRelease) GetInstalled() bool { + if x != nil { + return x.Installed } return false } -func (x *Platform) GetType() []string { +func (x *PlatformRelease) GetBoards() []*Board { if x != nil { - return x.Type + return x.Boards } return nil } -func (x *Platform) GetHelp() *HelpResources { +func (x *PlatformRelease) GetHelp() *HelpResources { if x != nil { return x.Help } return nil } -func (x *Platform) GetIndexed() bool { +func (x *PlatformRelease) GetMissingMetadata() bool { if x != nil { - return x.Indexed + return x.MissingMetadata } return false } -func (x *Platform) GetMissingMetadata() bool { +func (x *PlatformRelease) GetDeprecated() bool { if x != nil { - return x.MissingMetadata + return x.Deprecated + } + return false +} + +func (x *PlatformRelease) GetCompatible() bool { + if x != nil { + return x.Compatible } return false } @@ -679,7 +923,7 @@ type InstalledPlatformReference struct { func (x *InstalledPlatformReference) Reset() { *x = InstalledPlatformReference{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[8] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -692,7 +936,7 @@ func (x *InstalledPlatformReference) String() string { func (*InstalledPlatformReference) ProtoMessage() {} func (x *InstalledPlatformReference) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[8] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -705,7 +949,7 @@ func (x *InstalledPlatformReference) ProtoReflect() protoreflect.Message { // Deprecated: Use InstalledPlatformReference.ProtoReflect.Descriptor instead. func (*InstalledPlatformReference) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{8} + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{12} } func (x *InstalledPlatformReference) GetId() string { @@ -751,7 +995,7 @@ type Board struct { func (x *Board) Reset() { *x = Board{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[9] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -764,7 +1008,7 @@ func (x *Board) String() string { func (*Board) ProtoMessage() {} func (x *Board) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[9] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -777,7 +1021,7 @@ func (x *Board) ProtoReflect() protoreflect.Message { // Deprecated: Use Board.ProtoReflect.Descriptor instead. func (*Board) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{9} + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{13} } func (x *Board) GetName() string { @@ -794,34 +1038,33 @@ func (x *Board) GetFqbn() string { return "" } -type Profile struct { +type HelpResources struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Name used to identify the profile within the sketch. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // FQBN specified in the profile. - Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` + // A URL provided by the author of the platform's package, intended to point + // to their online help service. + Online string `protobuf:"bytes,1,opt,name=online,proto3" json:"online,omitempty"` } -func (x *Profile) Reset() { - *x = Profile{} +func (x *HelpResources) Reset() { + *x = HelpResources{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[10] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Profile) String() string { +func (x *HelpResources) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Profile) ProtoMessage() {} +func (*HelpResources) ProtoMessage() {} -func (x *Profile) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[10] +func (x *HelpResources) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -832,52 +1075,187 @@ func (x *Profile) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Profile.ProtoReflect.Descriptor instead. -func (*Profile) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{10} +// Deprecated: Use HelpResources.ProtoReflect.Descriptor instead. +func (*HelpResources) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{14} } -func (x *Profile) GetName() string { +func (x *HelpResources) GetOnline() string { if x != nil { - return x.Name + return x.Online + } + return "" +} + +type Sketch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Absolute path to a main sketch files + MainFile string `protobuf:"bytes,1,opt,name=main_file,json=mainFile,proto3" json:"main_file,omitempty"` + // Absolute path to folder that contains main_file + LocationPath string `protobuf:"bytes,2,opt,name=location_path,json=locationPath,proto3" json:"location_path,omitempty"` + // List of absolute paths to other sketch files + OtherSketchFiles []string `protobuf:"bytes,3,rep,name=other_sketch_files,json=otherSketchFiles,proto3" json:"other_sketch_files,omitempty"` + // List of absolute paths to additional sketch files + AdditionalFiles []string `protobuf:"bytes,4,rep,name=additional_files,json=additionalFiles,proto3" json:"additional_files,omitempty"` + // List of absolute paths to supported files in the sketch root folder, main + // file excluded + RootFolderFiles []string `protobuf:"bytes,5,rep,name=root_folder_files,json=rootFolderFiles,proto3" json:"root_folder_files,omitempty"` + // Default FQBN set in project file (sketch.yaml) + DefaultFqbn string `protobuf:"bytes,6,opt,name=default_fqbn,json=defaultFqbn,proto3" json:"default_fqbn,omitempty"` + // Default Port set in project file (sketch.yaml) + DefaultPort string `protobuf:"bytes,7,opt,name=default_port,json=defaultPort,proto3" json:"default_port,omitempty"` + // Default Protocol set in project file (sketch.yaml) + DefaultProtocol string `protobuf:"bytes,8,opt,name=default_protocol,json=defaultProtocol,proto3" json:"default_protocol,omitempty"` + // List of profiles present in the project file (sketch.yaml) + Profiles []*SketchProfile `protobuf:"bytes,9,rep,name=profiles,proto3" json:"profiles,omitempty"` + // Default profile set in the project file (sketch.yaml) + DefaultProfile *SketchProfile `protobuf:"bytes,10,opt,name=default_profile,json=defaultProfile,proto3" json:"default_profile,omitempty"` + // Default Programmer set in project file (sketch.yaml) + DefaultProgrammer string `protobuf:"bytes,11,opt,name=default_programmer,json=defaultProgrammer,proto3" json:"default_programmer,omitempty"` +} + +func (x *Sketch) Reset() { + *x = Sketch{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Sketch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Sketch) ProtoMessage() {} + +func (x *Sketch) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Sketch.ProtoReflect.Descriptor instead. +func (*Sketch) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{15} +} + +func (x *Sketch) GetMainFile() string { + if x != nil { + return x.MainFile } return "" } -func (x *Profile) GetFqbn() string { +func (x *Sketch) GetLocationPath() string { if x != nil { - return x.Fqbn + return x.LocationPath } return "" } -type HelpResources struct { +func (x *Sketch) GetOtherSketchFiles() []string { + if x != nil { + return x.OtherSketchFiles + } + return nil +} + +func (x *Sketch) GetAdditionalFiles() []string { + if x != nil { + return x.AdditionalFiles + } + return nil +} + +func (x *Sketch) GetRootFolderFiles() []string { + if x != nil { + return x.RootFolderFiles + } + return nil +} + +func (x *Sketch) GetDefaultFqbn() string { + if x != nil { + return x.DefaultFqbn + } + return "" +} + +func (x *Sketch) GetDefaultPort() string { + if x != nil { + return x.DefaultPort + } + return "" +} + +func (x *Sketch) GetDefaultProtocol() string { + if x != nil { + return x.DefaultProtocol + } + return "" +} + +func (x *Sketch) GetProfiles() []*SketchProfile { + if x != nil { + return x.Profiles + } + return nil +} + +func (x *Sketch) GetDefaultProfile() *SketchProfile { + if x != nil { + return x.DefaultProfile + } + return nil +} + +func (x *Sketch) GetDefaultProgrammer() string { + if x != nil { + return x.DefaultProgrammer + } + return "" +} + +type SketchProfile struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // A URL provided by the author of the platform's package, intended to point - // to their online help service. - Online string `protobuf:"bytes,1,opt,name=online,proto3" json:"online,omitempty"` + // Name of the profile + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // FQBN used by the profile + Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` + // Programmer used by the profile + Programmer string `protobuf:"bytes,3,opt,name=programmer,proto3" json:"programmer,omitempty"` } -func (x *HelpResources) Reset() { - *x = HelpResources{} +func (x *SketchProfile) Reset() { + *x = SketchProfile{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[11] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *HelpResources) String() string { +func (x *SketchProfile) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HelpResources) ProtoMessage() {} +func (*SketchProfile) ProtoMessage() {} -func (x *HelpResources) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[11] +func (x *SketchProfile) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -888,14 +1266,28 @@ func (x *HelpResources) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use HelpResources.ProtoReflect.Descriptor instead. -func (*HelpResources) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{11} +// Deprecated: Use SketchProfile.ProtoReflect.Descriptor instead. +func (*SketchProfile) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{16} } -func (x *HelpResources) GetOnline() string { +func (x *SketchProfile) GetName() string { if x != nil { - return x.Online + return x.Name + } + return "" +} + +func (x *SketchProfile) GetFqbn() string { + if x != nil { + return x.Fqbn + } + return "" +} + +func (x *SketchProfile) GetProgrammer() string { + if x != nil { + return x.Programmer } return "" } @@ -951,59 +1343,135 @@ var file_cc_arduino_cli_commands_v1_common_proto_rawDesc = []byte{ 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xd6, 0x03, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, - 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, - 0x39, 0x0a, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, - 0x72, 0x64, 0x52, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x6d, 0x61, - 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, - 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, - 0x04, 0x68, 0x65, 0x6c, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x4d, 0x69, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x9b, 0x01, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x48, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x45, 0x0a, 0x07, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x22, 0xf0, 0x02, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x55, + 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x68, 0x0a, 0x0d, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x6c, 0x70, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x12, 0x18, 0x0a, 0x07, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x88, 0x01, 0x0a, 0x1a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x44, 0x69, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x22, 0x2f, 0x0a, 0x05, - 0x42, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x31, 0x0a, - 0x07, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, - 0x22, 0x27, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, - 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0xdb, 0x01, 0x0a, 0x10, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, + 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, + 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, + 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2d, 0x0a, 0x12, 0x6d, 0x61, 0x6e, 0x75, + 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, + 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, + 0x64, 0x22, 0xd8, 0x02, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x06, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x3d, 0x0a, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, + 0x6c, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x04, 0x68, 0x65, 0x6c, + 0x70, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, + 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x88, 0x01, 0x0a, + 0x1a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x44, 0x69, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x22, 0x2f, 0x0a, 0x05, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x27, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x70, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, + 0x65, 0x22, 0x8a, 0x04, 0x0a, 0x06, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x0a, 0x09, + 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6d, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2c, + 0x0a, 0x12, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x5f, + 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0f, 0x72, 0x6f, 0x6f, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, + 0x71, 0x62, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x46, 0x71, 0x62, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x45, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, + 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, + 0x2d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x22, 0x57, + 0x0a, 0x0d, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, + 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1018,7 +1486,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_common_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_cc_arduino_cli_commands_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 18) var file_cc_arduino_cli_commands_v1_common_proto_goTypes = []interface{}{ (*Instance)(nil), // 0: cc.arduino.cli.commands.v1.Instance (*DownloadProgress)(nil), // 1: cc.arduino.cli.commands.v1.DownloadProgress @@ -1027,23 +1495,36 @@ var file_cc_arduino_cli_commands_v1_common_proto_goTypes = []interface{}{ (*DownloadProgressEnd)(nil), // 4: cc.arduino.cli.commands.v1.DownloadProgressEnd (*TaskProgress)(nil), // 5: cc.arduino.cli.commands.v1.TaskProgress (*Programmer)(nil), // 6: cc.arduino.cli.commands.v1.Programmer - (*Platform)(nil), // 7: cc.arduino.cli.commands.v1.Platform - (*InstalledPlatformReference)(nil), // 8: cc.arduino.cli.commands.v1.InstalledPlatformReference - (*Board)(nil), // 9: cc.arduino.cli.commands.v1.Board - (*Profile)(nil), // 10: cc.arduino.cli.commands.v1.Profile - (*HelpResources)(nil), // 11: cc.arduino.cli.commands.v1.HelpResources + (*MissingProgrammerError)(nil), // 7: cc.arduino.cli.commands.v1.MissingProgrammerError + (*Platform)(nil), // 8: cc.arduino.cli.commands.v1.Platform + (*PlatformSummary)(nil), // 9: cc.arduino.cli.commands.v1.PlatformSummary + (*PlatformMetadata)(nil), // 10: cc.arduino.cli.commands.v1.PlatformMetadata + (*PlatformRelease)(nil), // 11: cc.arduino.cli.commands.v1.PlatformRelease + (*InstalledPlatformReference)(nil), // 12: cc.arduino.cli.commands.v1.InstalledPlatformReference + (*Board)(nil), // 13: cc.arduino.cli.commands.v1.Board + (*HelpResources)(nil), // 14: cc.arduino.cli.commands.v1.HelpResources + (*Sketch)(nil), // 15: cc.arduino.cli.commands.v1.Sketch + (*SketchProfile)(nil), // 16: cc.arduino.cli.commands.v1.SketchProfile + nil, // 17: cc.arduino.cli.commands.v1.PlatformSummary.ReleasesEntry } var file_cc_arduino_cli_commands_v1_common_proto_depIdxs = []int32{ 2, // 0: cc.arduino.cli.commands.v1.DownloadProgress.start:type_name -> cc.arduino.cli.commands.v1.DownloadProgressStart 3, // 1: cc.arduino.cli.commands.v1.DownloadProgress.update:type_name -> cc.arduino.cli.commands.v1.DownloadProgressUpdate 4, // 2: cc.arduino.cli.commands.v1.DownloadProgress.end:type_name -> cc.arduino.cli.commands.v1.DownloadProgressEnd - 9, // 3: cc.arduino.cli.commands.v1.Platform.boards:type_name -> cc.arduino.cli.commands.v1.Board - 11, // 4: cc.arduino.cli.commands.v1.Platform.help:type_name -> cc.arduino.cli.commands.v1.HelpResources - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 10, // 3: cc.arduino.cli.commands.v1.Platform.metadata:type_name -> cc.arduino.cli.commands.v1.PlatformMetadata + 11, // 4: cc.arduino.cli.commands.v1.Platform.release:type_name -> cc.arduino.cli.commands.v1.PlatformRelease + 10, // 5: cc.arduino.cli.commands.v1.PlatformSummary.metadata:type_name -> cc.arduino.cli.commands.v1.PlatformMetadata + 17, // 6: cc.arduino.cli.commands.v1.PlatformSummary.releases:type_name -> cc.arduino.cli.commands.v1.PlatformSummary.ReleasesEntry + 13, // 7: cc.arduino.cli.commands.v1.PlatformRelease.boards:type_name -> cc.arduino.cli.commands.v1.Board + 14, // 8: cc.arduino.cli.commands.v1.PlatformRelease.help:type_name -> cc.arduino.cli.commands.v1.HelpResources + 16, // 9: cc.arduino.cli.commands.v1.Sketch.profiles:type_name -> cc.arduino.cli.commands.v1.SketchProfile + 16, // 10: cc.arduino.cli.commands.v1.Sketch.default_profile:type_name -> cc.arduino.cli.commands.v1.SketchProfile + 11, // 11: cc.arduino.cli.commands.v1.PlatformSummary.ReleasesEntry.value:type_name -> cc.arduino.cli.commands.v1.PlatformRelease + 12, // [12:12] is the sub-list for method output_type + 12, // [12:12] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_common_proto_init() } @@ -1137,7 +1618,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { } } file_cc_arduino_cli_commands_v1_common_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Platform); i { + switch v := v.(*MissingProgrammerError); i { case 0: return &v.state case 1: @@ -1149,7 +1630,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { } } file_cc_arduino_cli_commands_v1_common_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstalledPlatformReference); i { + switch v := v.(*Platform); i { case 0: return &v.state case 1: @@ -1161,7 +1642,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { } } file_cc_arduino_cli_commands_v1_common_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Board); i { + switch v := v.(*PlatformSummary); i { case 0: return &v.state case 1: @@ -1173,7 +1654,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { } } file_cc_arduino_cli_commands_v1_common_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Profile); i { + switch v := v.(*PlatformMetadata); i { case 0: return &v.state case 1: @@ -1185,6 +1666,42 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { } } file_cc_arduino_cli_commands_v1_common_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PlatformRelease); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InstalledPlatformReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Board); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HelpResources); i { case 0: return &v.state @@ -1196,6 +1713,30 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Sketch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SketchProfile); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_cc_arduino_cli_commands_v1_common_proto_msgTypes[1].OneofWrappers = []interface{}{ (*DownloadProgress_Start)(nil), @@ -1208,7 +1749,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_common_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 18, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/common.proto b/rpc/cc/arduino/cli/commands/v1/common.proto index 3cb0425872f..1c92e0f2a21 100644 --- a/rpc/cc/arduino/cli/commands/v1/common.proto +++ b/rpc/cc/arduino/cli/commands/v1/common.proto @@ -66,48 +66,92 @@ message TaskProgress { } message Programmer { + // Platform name string platform = 1; + // Programmer ID string id = 2; + // Programmer name string name = 3; } +// MissingProgrammerError is a status error detail that is returned when +// the operation can not be completed due to a missing programmer argument. +message MissingProgrammerError {} + +// Platform is a structure containing all the information about a single +// platform release. message Platform { + // Generic information about a platform + PlatformMetadata metadata = 1; + // Information about a specific release of a platform + PlatformRelease release = 2; +} + +// PlatformSummary is a structure containing all the information about +// a platform and all its available releases. +message PlatformSummary { + // Generic information about a platform + PlatformMetadata metadata = 1; + // Maps version to the corresponding PlatformRelease + map<string, PlatformRelease> releases = 2; + // The installed version of the platform, or empty string if none installed + string installed_version = 3; + // The latest available version of the platform that can be installable, or + // empty if none available. + string latest_version = 4; +} + +// PlatformMetadata contains generic information about a platform (not +// correlated to a specific release). +message PlatformMetadata { // Platform ID (e.g., `arduino:avr`). string id = 1; - // Version of the platform. - string installed = 2; - // Newest available version of the platform. - string latest = 3; - // Name used to identify the platform to humans (e.g., "Arduino AVR Boards"). - string name = 4; // Maintainer of the platform's package. - string maintainer = 5; + string maintainer = 2; // A URL provided by the author of the platform's package, intended to point // to their website. - string website = 6; + string website = 3; // Email of the maintainer of the platform's package. - string email = 7; + string email = 4; + // If true this Platform has been installed manually in the user' sketchbook + // hardware folder + bool manually_installed = 5; + // True if the latest release of this Platform has been deprecated + bool deprecated = 6; + // If true the platform is indexed + bool indexed = 7; +} + +// PlatformRelease contains information about a specific release of a platform. +message PlatformRelease { + // Name used to identify the platform to humans (e.g., "Arduino AVR Boards"). + string name = 1; + // Version of the platform release + string version = 2; + // Type of the platform. + repeated string types = 3; + // True if the platform is installed + bool installed = 4; // List of boards provided by the platform. If the platform is installed, // this is the boards listed in the platform's boards.txt. If the platform is // not installed, this is an arbitrary list of board names provided by the // platform author for display and may not match boards.txt. - repeated Board boards = 8; - // If true this Platform has been installed manually in the user' sketchbook - // hardware folder - bool manually_installed = 9; - // If true this Platform has been deprecated - bool deprecated = 10; - // Type of the platform. - repeated string type = 11; + repeated Board boards = 5; // A URL provided by the author of the platform's package, intended to point // to their online help service. - HelpResources help = 12; - // If true the platform is indexed - bool indexed = 13; - // This field is true when the platform is installed with the Arduino IDE 1.8. - // If the platform is also not indexed it may fail to work correctly in some - // circumstances, and it may need to be re-installed. - bool missing_metadata = 14; + HelpResources help = 6; + // This field is true if the platform is missing installation metadata (this + // happens if the platform has been installed with the legacy Arduino IDE + // <=1.8.x). If the platform miss metadata and it's not indexed through a + // package index, it may fail to work correctly in some circumstances, and it + // may need to be reinstalled. This should be evaluated only when the + // PlatformRelease is `Installed` otherwise is an undefined behaviour. + bool missing_metadata = 7; + // True this release is deprecated + bool deprecated = 8; + // True if the platform dependencies are available for the current OS/ARCH. + // This also means that the platform is installable. + bool compatible = 9; } message InstalledPlatformReference { @@ -129,15 +173,43 @@ message Board { string fqbn = 2; } -message Profile { - // Name used to identify the profile within the sketch. - string name = 1; - // FQBN specified in the profile. - string fqbn = 2; -} - message HelpResources { // A URL provided by the author of the platform's package, intended to point // to their online help service. string online = 1; } + +message Sketch { + // Absolute path to a main sketch files + string main_file = 1; + // Absolute path to folder that contains main_file + string location_path = 2; + // List of absolute paths to other sketch files + repeated string other_sketch_files = 3; + // List of absolute paths to additional sketch files + repeated string additional_files = 4; + // List of absolute paths to supported files in the sketch root folder, main + // file excluded + repeated string root_folder_files = 5; + // Default FQBN set in project file (sketch.yaml) + string default_fqbn = 6; + // Default Port set in project file (sketch.yaml) + string default_port = 7; + // Default Protocol set in project file (sketch.yaml) + string default_protocol = 8; + // List of profiles present in the project file (sketch.yaml) + repeated SketchProfile profiles = 9; + // Default profile set in the project file (sketch.yaml) + SketchProfile default_profile = 10; + // Default Programmer set in project file (sketch.yaml) + string default_programmer = 11; +} + +message SketchProfile { + // Name of the profile + string name = 1; + // FQBN used by the profile + string fqbn = 2; + // Programmer used by the profile + string programmer = 3; +} diff --git a/rpc/cc/arduino/cli/commands/v1/compile.pb.go b/rpc/cc/arduino/cli/commands/v1/compile.pb.go index 7f3a8c6801c..f64c3edf128 100644 --- a/rpc/cc/arduino/cli/commands/v1/compile.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/compile.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.1 +// protoc v5.26.1 // source: cc/arduino/cli/commands/v1/compile.proto package commands @@ -24,7 +24,6 @@ package commands import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) @@ -92,7 +91,7 @@ type CompileRequest struct { SourceOverride map[string]string `protobuf:"bytes,22,rep,name=source_override,json=sourceOverride,proto3" json:"source_override,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // When set to `true` the compiled binary will be copied to the export // directory. - ExportBinaries *wrapperspb.BoolValue `protobuf:"bytes,23,opt,name=export_binaries,json=exportBinaries,proto3" json:"export_binaries,omitempty"` + ExportBinaries *bool `protobuf:"varint,23,opt,name=export_binaries,json=exportBinaries,proto3,oneof" json:"export_binaries,omitempty"` // A list of paths to single libraries root directory. Library []string `protobuf:"bytes,24,rep,name=library,proto3" json:"library,omitempty"` // The path where to search for the custom signing key name and the encrypt @@ -111,6 +110,9 @@ type CompileRequest struct { // If set to true the returned build properties will be left unexpanded, with // the variables placeholders exactly as defined in the platform. DoNotExpandBuildProperties bool `protobuf:"varint,29,opt,name=do_not_expand_build_properties,json=doNotExpandBuildProperties,proto3" json:"do_not_expand_build_properties,omitempty"` + // Search for precompiled cores in the given paths and use them if found. + // This search is performed after the standard build_cache directory. + BuildCacheExtraPaths []string `protobuf:"bytes,30,rep,name=build_cache_extra_paths,json=buildCacheExtraPaths,proto3" json:"build_cache_extra_paths,omitempty"` } func (x *CompileRequest) Reset() { @@ -271,11 +273,11 @@ func (x *CompileRequest) GetSourceOverride() map[string]string { return nil } -func (x *CompileRequest) GetExportBinaries() *wrapperspb.BoolValue { - if x != nil { - return x.ExportBinaries +func (x *CompileRequest) GetExportBinaries() bool { + if x != nil && x.ExportBinaries != nil { + return *x.ExportBinaries } - return nil + return false } func (x *CompileRequest) GetLibrary() []string { @@ -320,29 +322,25 @@ func (x *CompileRequest) GetDoNotExpandBuildProperties() bool { return false } +func (x *CompileRequest) GetBuildCacheExtraPaths() []string { + if x != nil { + return x.BuildCacheExtraPaths + } + return nil +} + type CompileResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The output of the compilation process (stream) - OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3" json:"out_stream,omitempty"` - // The error output of the compilation process (stream) - ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3" json:"err_stream,omitempty"` - // The compiler build path - BuildPath string `protobuf:"bytes,3,opt,name=build_path,json=buildPath,proto3" json:"build_path,omitempty"` - // The libraries used in the build - UsedLibraries []*Library `protobuf:"bytes,4,rep,name=used_libraries,json=usedLibraries,proto3" json:"used_libraries,omitempty"` - // The size of the executable split by sections - ExecutableSectionsSize []*ExecutableSectionSize `protobuf:"bytes,5,rep,name=executable_sections_size,json=executableSectionsSize,proto3" json:"executable_sections_size,omitempty"` - // The platform where the board is defined - BoardPlatform *InstalledPlatformReference `protobuf:"bytes,6,opt,name=board_platform,json=boardPlatform,proto3" json:"board_platform,omitempty"` - // The platform used for the build (if referenced from the board platform) - BuildPlatform *InstalledPlatformReference `protobuf:"bytes,7,opt,name=build_platform,json=buildPlatform,proto3" json:"build_platform,omitempty"` - // Completions reports of the compilation process (stream) - Progress *TaskProgress `protobuf:"bytes,8,opt,name=progress,proto3" json:"progress,omitempty"` - // Build properties used for compiling - BuildProperties []string `protobuf:"bytes,9,rep,name=build_properties,json=buildProperties,proto3" json:"build_properties,omitempty"` + // Types that are assignable to Message: + // + // *CompileResponse_OutStream + // *CompileResponse_ErrStream + // *CompileResponse_Progress + // *CompileResponse_Result + Message isCompileResponse_Message `protobuf_oneof:"message"` } func (x *CompileResponse) Reset() { @@ -377,65 +375,209 @@ func (*CompileResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{1} } +func (m *CompileResponse) GetMessage() isCompileResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *CompileResponse) GetOutStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*CompileResponse_OutStream); ok { return x.OutStream } return nil } func (x *CompileResponse) GetErrStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*CompileResponse_ErrStream); ok { return x.ErrStream } return nil } -func (x *CompileResponse) GetBuildPath() string { +func (x *CompileResponse) GetProgress() *TaskProgress { + if x, ok := x.GetMessage().(*CompileResponse_Progress); ok { + return x.Progress + } + return nil +} + +func (x *CompileResponse) GetResult() *BuilderResult { + if x, ok := x.GetMessage().(*CompileResponse_Result); ok { + return x.Result + } + return nil +} + +type isCompileResponse_Message interface { + isCompileResponse_Message() +} + +type CompileResponse_OutStream struct { + // The output of the compilation process (stream) + OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3,oneof"` +} + +type CompileResponse_ErrStream struct { + // The error output of the compilation process (stream) + ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3,oneof"` +} + +type CompileResponse_Progress struct { + // Completions reports of the compilation process (stream) + Progress *TaskProgress `protobuf:"bytes,3,opt,name=progress,proto3,oneof"` +} + +type CompileResponse_Result struct { + // The compilation result + Result *BuilderResult `protobuf:"bytes,4,opt,name=result,proto3,oneof"` +} + +func (*CompileResponse_OutStream) isCompileResponse_Message() {} + +func (*CompileResponse_ErrStream) isCompileResponse_Message() {} + +func (*CompileResponse_Progress) isCompileResponse_Message() {} + +func (*CompileResponse_Result) isCompileResponse_Message() {} + +type InstanceNeedsReinitializationError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *InstanceNeedsReinitializationError) Reset() { + *x = InstanceNeedsReinitializationError{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InstanceNeedsReinitializationError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InstanceNeedsReinitializationError) ProtoMessage() {} + +func (x *InstanceNeedsReinitializationError) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InstanceNeedsReinitializationError.ProtoReflect.Descriptor instead. +func (*InstanceNeedsReinitializationError) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{2} +} + +type BuilderResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The compiler build path + BuildPath string `protobuf:"bytes,1,opt,name=build_path,json=buildPath,proto3" json:"build_path,omitempty"` + // The libraries used in the build + UsedLibraries []*Library `protobuf:"bytes,2,rep,name=used_libraries,json=usedLibraries,proto3" json:"used_libraries,omitempty"` + // The size of the executable split by sections + ExecutableSectionsSize []*ExecutableSectionSize `protobuf:"bytes,3,rep,name=executable_sections_size,json=executableSectionsSize,proto3" json:"executable_sections_size,omitempty"` + // The platform where the board is defined + BoardPlatform *InstalledPlatformReference `protobuf:"bytes,4,opt,name=board_platform,json=boardPlatform,proto3" json:"board_platform,omitempty"` + // The platform used for the build (if referenced from the board platform) + BuildPlatform *InstalledPlatformReference `protobuf:"bytes,5,opt,name=build_platform,json=buildPlatform,proto3" json:"build_platform,omitempty"` + // Build properties used for compiling + BuildProperties []string `protobuf:"bytes,7,rep,name=build_properties,json=buildProperties,proto3" json:"build_properties,omitempty"` + // Compiler errors and warnings + Diagnostics []*CompileDiagnostic `protobuf:"bytes,8,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"` +} + +func (x *BuilderResult) Reset() { + *x = BuilderResult{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BuilderResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BuilderResult) ProtoMessage() {} + +func (x *BuilderResult) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BuilderResult.ProtoReflect.Descriptor instead. +func (*BuilderResult) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{3} +} + +func (x *BuilderResult) GetBuildPath() string { if x != nil { return x.BuildPath } return "" } -func (x *CompileResponse) GetUsedLibraries() []*Library { +func (x *BuilderResult) GetUsedLibraries() []*Library { if x != nil { return x.UsedLibraries } return nil } -func (x *CompileResponse) GetExecutableSectionsSize() []*ExecutableSectionSize { +func (x *BuilderResult) GetExecutableSectionsSize() []*ExecutableSectionSize { if x != nil { return x.ExecutableSectionsSize } return nil } -func (x *CompileResponse) GetBoardPlatform() *InstalledPlatformReference { +func (x *BuilderResult) GetBoardPlatform() *InstalledPlatformReference { if x != nil { return x.BoardPlatform } return nil } -func (x *CompileResponse) GetBuildPlatform() *InstalledPlatformReference { +func (x *BuilderResult) GetBuildPlatform() *InstalledPlatformReference { if x != nil { return x.BuildPlatform } return nil } -func (x *CompileResponse) GetProgress() *TaskProgress { +func (x *BuilderResult) GetBuildProperties() []string { if x != nil { - return x.Progress + return x.BuildProperties } return nil } -func (x *CompileResponse) GetBuildProperties() []string { +func (x *BuilderResult) GetDiagnostics() []*CompileDiagnostic { if x != nil { - return x.BuildProperties + return x.Diagnostics } return nil } @@ -453,7 +595,7 @@ type ExecutableSectionSize struct { func (x *ExecutableSectionSize) Reset() { *x = ExecutableSectionSize{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[2] + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -466,7 +608,7 @@ func (x *ExecutableSectionSize) String() string { func (*ExecutableSectionSize) ProtoMessage() {} func (x *ExecutableSectionSize) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[2] + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -479,7 +621,7 @@ func (x *ExecutableSectionSize) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecutableSectionSize.ProtoReflect.Descriptor instead. func (*ExecutableSectionSize) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{2} + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{4} } func (x *ExecutableSectionSize) GetName() string { @@ -503,6 +645,260 @@ func (x *ExecutableSectionSize) GetMaxSize() int64 { return 0 } +type CompileDiagnostic struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Severity of the diagnostic + Severity string `protobuf:"bytes,1,opt,name=severity,proto3" json:"severity,omitempty"` + // The explanation of the diagnostic (it may be multiple preformatted lines) + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + // The file containing the diagnostic + File string `protobuf:"bytes,3,opt,name=file,proto3" json:"file,omitempty"` + // The line of the diagnostic if available (starts from 1) + Line int64 `protobuf:"varint,4,opt,name=line,proto3" json:"line,omitempty"` + // The column of the diagnostic if available (starts from 1) + Column int64 `protobuf:"varint,5,opt,name=column,proto3" json:"column,omitempty"` + // The context where this diagnostic is found (it may be multiple files that + // represents a chain of includes, or a text describing where the diagnostic + // is found) + Context []*CompileDiagnosticContext `protobuf:"bytes,6,rep,name=context,proto3" json:"context,omitempty"` + // Annotations or suggestions to the diagnostic made by the compiler + Notes []*CompileDiagnosticNote `protobuf:"bytes,7,rep,name=notes,proto3" json:"notes,omitempty"` +} + +func (x *CompileDiagnostic) Reset() { + *x = CompileDiagnostic{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompileDiagnostic) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompileDiagnostic) ProtoMessage() {} + +func (x *CompileDiagnostic) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CompileDiagnostic.ProtoReflect.Descriptor instead. +func (*CompileDiagnostic) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{5} +} + +func (x *CompileDiagnostic) GetSeverity() string { + if x != nil { + return x.Severity + } + return "" +} + +func (x *CompileDiagnostic) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *CompileDiagnostic) GetFile() string { + if x != nil { + return x.File + } + return "" +} + +func (x *CompileDiagnostic) GetLine() int64 { + if x != nil { + return x.Line + } + return 0 +} + +func (x *CompileDiagnostic) GetColumn() int64 { + if x != nil { + return x.Column + } + return 0 +} + +func (x *CompileDiagnostic) GetContext() []*CompileDiagnosticContext { + if x != nil { + return x.Context + } + return nil +} + +func (x *CompileDiagnostic) GetNotes() []*CompileDiagnosticNote { + if x != nil { + return x.Notes + } + return nil +} + +type CompileDiagnosticContext struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The message describing the context reference + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + // The file of the context reference + File string `protobuf:"bytes,2,opt,name=file,proto3" json:"file,omitempty"` + // The line of the context reference + Line int64 `protobuf:"varint,3,opt,name=line,proto3" json:"line,omitempty"` + // The column of the context reference + Column int64 `protobuf:"varint,4,opt,name=column,proto3" json:"column,omitempty"` +} + +func (x *CompileDiagnosticContext) Reset() { + *x = CompileDiagnosticContext{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompileDiagnosticContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompileDiagnosticContext) ProtoMessage() {} + +func (x *CompileDiagnosticContext) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CompileDiagnosticContext.ProtoReflect.Descriptor instead. +func (*CompileDiagnosticContext) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{6} +} + +func (x *CompileDiagnosticContext) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *CompileDiagnosticContext) GetFile() string { + if x != nil { + return x.File + } + return "" +} + +func (x *CompileDiagnosticContext) GetLine() int64 { + if x != nil { + return x.Line + } + return 0 +} + +func (x *CompileDiagnosticContext) GetColumn() int64 { + if x != nil { + return x.Column + } + return 0 +} + +type CompileDiagnosticNote struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The message describing the compiler note + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + // The file of the compiler note + File string `protobuf:"bytes,2,opt,name=file,proto3" json:"file,omitempty"` + // The line of the compiler note + Line int64 `protobuf:"varint,3,opt,name=line,proto3" json:"line,omitempty"` + // The column of the compiler note + Column int64 `protobuf:"varint,4,opt,name=column,proto3" json:"column,omitempty"` +} + +func (x *CompileDiagnosticNote) Reset() { + *x = CompileDiagnosticNote{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompileDiagnosticNote) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompileDiagnosticNote) ProtoMessage() {} + +func (x *CompileDiagnosticNote) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CompileDiagnosticNote.ProtoReflect.Descriptor instead. +func (*CompileDiagnosticNote) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{7} +} + +func (x *CompileDiagnosticNote) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *CompileDiagnosticNote) GetFile() string { + if x != nil { + return x.File + } + return "" +} + +func (x *CompileDiagnosticNote) GetLine() int64 { + if x != nil { + return x.Line + } + return 0 +} + +func (x *CompileDiagnosticNote) GetColumn() int64 { + if x != nil { + return x.Column + } + return 0 +} + var File_cc_arduino_cli_commands_v1_compile_proto protoreflect.FileDescriptor var file_cc_arduino_cli_commands_v1_compile_proto_rawDesc = []byte{ @@ -510,14 +906,12 @@ var file_cc_arduino_cli_commands_v1_compile_proto_rawDesc = []byte{ 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x27, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x62, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd8, 0x08, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8c, 0x09, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, @@ -563,79 +957,129 @@ var file_cc_arduino_cli_commands_v1_compile_proto_rawDesc = []byte{ 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, - 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x69, - 0x65, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x69, 0x6e, 0x61, - 0x72, 0x69, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x18, - 0x18, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x23, - 0x0a, 0x0d, 0x6b, 0x65, 0x79, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, - 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x4b, 0x65, 0x79, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x1f, - 0x0a, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x1b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x12, - 0x38, 0x0a, 0x18, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, - 0x73, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x1c, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x16, 0x73, 0x6b, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x12, 0x42, 0x0a, 0x1e, 0x64, 0x6f, 0x5f, - 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x1a, 0x64, 0x6f, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x41, 0x0a, + 0x2c, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x69, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, + 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x18, 0x18, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, + 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x6b, 0x65, 0x79, 0x73, 0x5f, + 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x6b, 0x65, 0x79, 0x73, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, + 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x18, 0x73, 0x6b, 0x69, 0x70, + 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x73, 0x6b, 0x69, 0x70, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x12, 0x42, 0x0a, 0x1e, 0x64, 0x6f, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x70, + 0x61, 0x6e, 0x64, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x64, 0x6f, 0x4e, 0x6f, + 0x74, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, + 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x50, 0x61, 0x74, 0x68, 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xd6, 0x04, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x72, 0x72, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x4a, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x0d, - 0x75, 0x73, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x6b, 0x0a, - 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, - 0x7a, 0x65, 0x52, 0x16, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x69, 0x65, 0x73, 0x22, 0xeb, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, + 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1f, 0x0a, 0x0a, 0x65, 0x72, 0x72, + 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, + 0x09, 0x65, 0x72, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0d, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x5d, 0x0a, 0x0e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x44, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x24, 0x0a, 0x22, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x65, + 0x65, 0x64, 0x73, 0x52, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa1, 0x04, 0x0a, 0x0d, 0x42, 0x75, 0x69, + 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x4a, 0x0a, 0x0e, 0x75, 0x73, 0x65, + 0x64, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x6b, 0x0a, 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x16, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x29, - 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x5a, 0x0a, 0x15, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, - 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, - 0x78, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, + 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x0d, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x5d, 0x0a, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x29, 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x0b, 0x64, + 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, + 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x5a, 0x0a, 0x15, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xa2, 0x02, 0x0a, 0x11, 0x43, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x12, 0x1a, + 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x4e, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, + 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x12, 0x47, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, + 0x69, 0x63, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x22, 0x74, 0x0a, + 0x18, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, + 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x22, 0x71, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x44, 0x69, + 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, + 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -650,32 +1094,39 @@ func file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_compile_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_compile_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_cc_arduino_cli_commands_v1_compile_proto_msgTypes = make([]protoimpl.MessageInfo, 9) var file_cc_arduino_cli_commands_v1_compile_proto_goTypes = []interface{}{ - (*CompileRequest)(nil), // 0: cc.arduino.cli.commands.v1.CompileRequest - (*CompileResponse)(nil), // 1: cc.arduino.cli.commands.v1.CompileResponse - (*ExecutableSectionSize)(nil), // 2: cc.arduino.cli.commands.v1.ExecutableSectionSize - nil, // 3: cc.arduino.cli.commands.v1.CompileRequest.SourceOverrideEntry - (*Instance)(nil), // 4: cc.arduino.cli.commands.v1.Instance - (*wrapperspb.BoolValue)(nil), // 5: google.protobuf.BoolValue - (*Library)(nil), // 6: cc.arduino.cli.commands.v1.Library - (*InstalledPlatformReference)(nil), // 7: cc.arduino.cli.commands.v1.InstalledPlatformReference - (*TaskProgress)(nil), // 8: cc.arduino.cli.commands.v1.TaskProgress + (*CompileRequest)(nil), // 0: cc.arduino.cli.commands.v1.CompileRequest + (*CompileResponse)(nil), // 1: cc.arduino.cli.commands.v1.CompileResponse + (*InstanceNeedsReinitializationError)(nil), // 2: cc.arduino.cli.commands.v1.InstanceNeedsReinitializationError + (*BuilderResult)(nil), // 3: cc.arduino.cli.commands.v1.BuilderResult + (*ExecutableSectionSize)(nil), // 4: cc.arduino.cli.commands.v1.ExecutableSectionSize + (*CompileDiagnostic)(nil), // 5: cc.arduino.cli.commands.v1.CompileDiagnostic + (*CompileDiagnosticContext)(nil), // 6: cc.arduino.cli.commands.v1.CompileDiagnosticContext + (*CompileDiagnosticNote)(nil), // 7: cc.arduino.cli.commands.v1.CompileDiagnosticNote + nil, // 8: cc.arduino.cli.commands.v1.CompileRequest.SourceOverrideEntry + (*Instance)(nil), // 9: cc.arduino.cli.commands.v1.Instance + (*TaskProgress)(nil), // 10: cc.arduino.cli.commands.v1.TaskProgress + (*Library)(nil), // 11: cc.arduino.cli.commands.v1.Library + (*InstalledPlatformReference)(nil), // 12: cc.arduino.cli.commands.v1.InstalledPlatformReference } var file_cc_arduino_cli_commands_v1_compile_proto_depIdxs = []int32{ - 4, // 0: cc.arduino.cli.commands.v1.CompileRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 3, // 1: cc.arduino.cli.commands.v1.CompileRequest.source_override:type_name -> cc.arduino.cli.commands.v1.CompileRequest.SourceOverrideEntry - 5, // 2: cc.arduino.cli.commands.v1.CompileRequest.export_binaries:type_name -> google.protobuf.BoolValue - 6, // 3: cc.arduino.cli.commands.v1.CompileResponse.used_libraries:type_name -> cc.arduino.cli.commands.v1.Library - 2, // 4: cc.arduino.cli.commands.v1.CompileResponse.executable_sections_size:type_name -> cc.arduino.cli.commands.v1.ExecutableSectionSize - 7, // 5: cc.arduino.cli.commands.v1.CompileResponse.board_platform:type_name -> cc.arduino.cli.commands.v1.InstalledPlatformReference - 7, // 6: cc.arduino.cli.commands.v1.CompileResponse.build_platform:type_name -> cc.arduino.cli.commands.v1.InstalledPlatformReference - 8, // 7: cc.arduino.cli.commands.v1.CompileResponse.progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 8, // [8:8] is the sub-list for method output_type - 8, // [8:8] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 9, // 0: cc.arduino.cli.commands.v1.CompileRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 8, // 1: cc.arduino.cli.commands.v1.CompileRequest.source_override:type_name -> cc.arduino.cli.commands.v1.CompileRequest.SourceOverrideEntry + 10, // 2: cc.arduino.cli.commands.v1.CompileResponse.progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 3, // 3: cc.arduino.cli.commands.v1.CompileResponse.result:type_name -> cc.arduino.cli.commands.v1.BuilderResult + 11, // 4: cc.arduino.cli.commands.v1.BuilderResult.used_libraries:type_name -> cc.arduino.cli.commands.v1.Library + 4, // 5: cc.arduino.cli.commands.v1.BuilderResult.executable_sections_size:type_name -> cc.arduino.cli.commands.v1.ExecutableSectionSize + 12, // 6: cc.arduino.cli.commands.v1.BuilderResult.board_platform:type_name -> cc.arduino.cli.commands.v1.InstalledPlatformReference + 12, // 7: cc.arduino.cli.commands.v1.BuilderResult.build_platform:type_name -> cc.arduino.cli.commands.v1.InstalledPlatformReference + 5, // 8: cc.arduino.cli.commands.v1.BuilderResult.diagnostics:type_name -> cc.arduino.cli.commands.v1.CompileDiagnostic + 6, // 9: cc.arduino.cli.commands.v1.CompileDiagnostic.context:type_name -> cc.arduino.cli.commands.v1.CompileDiagnosticContext + 7, // 10: cc.arduino.cli.commands.v1.CompileDiagnostic.notes:type_name -> cc.arduino.cli.commands.v1.CompileDiagnosticNote + 11, // [11:11] is the sub-list for method output_type + 11, // [11:11] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_compile_proto_init() } @@ -711,6 +1162,30 @@ func file_cc_arduino_cli_commands_v1_compile_proto_init() { } } file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InstanceNeedsReinitializationError); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BuilderResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExecutableSectionSize); i { case 0: return &v.state @@ -722,6 +1197,49 @@ func file_cc_arduino_cli_commands_v1_compile_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CompileDiagnostic); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CompileDiagnosticContext); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CompileDiagnosticNote); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*CompileResponse_OutStream)(nil), + (*CompileResponse_ErrStream)(nil), + (*CompileResponse_Progress)(nil), + (*CompileResponse_Result)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -729,7 +1247,7 @@ func file_cc_arduino_cli_commands_v1_compile_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_compile_proto_rawDesc, NumEnums: 0, - NumMessages: 4, + NumMessages: 9, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/compile.proto b/rpc/cc/arduino/cli/commands/v1/compile.proto index ff160ba1c01..a51810d1980 100644 --- a/rpc/cc/arduino/cli/commands/v1/compile.proto +++ b/rpc/cc/arduino/cli/commands/v1/compile.proto @@ -19,7 +19,6 @@ package cc.arduino.cli.commands.v1; option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; -import "google/protobuf/wrappers.proto"; import "cc/arduino/cli/commands/v1/common.proto"; import "cc/arduino/cli/commands/v1/lib.proto"; @@ -75,7 +74,7 @@ message CompileRequest { map<string, string> source_override = 22; // When set to `true` the compiled binary will be copied to the export // directory. - google.protobuf.BoolValue export_binaries = 23; + optional bool export_binaries = 23; // A list of paths to single libraries root directory. repeated string library = 24; // The path where to search for the custom signing key name and the encrypt @@ -94,27 +93,41 @@ message CompileRequest { // If set to true the returned build properties will be left unexpanded, with // the variables placeholders exactly as defined in the platform. bool do_not_expand_build_properties = 29; + // Search for precompiled cores in the given paths and use them if found. + // This search is performed after the standard build_cache directory. + repeated string build_cache_extra_paths = 30; } message CompileResponse { - // The output of the compilation process (stream) - bytes out_stream = 1; - // The error output of the compilation process (stream) - bytes err_stream = 2; + oneof message { + // The output of the compilation process (stream) + bytes out_stream = 1; + // The error output of the compilation process (stream) + bytes err_stream = 2; + // Completions reports of the compilation process (stream) + TaskProgress progress = 3; + // The compilation result + BuilderResult result = 4; + } +} + +message InstanceNeedsReinitializationError {} + +message BuilderResult { // The compiler build path - string build_path = 3; + string build_path = 1; // The libraries used in the build - repeated Library used_libraries = 4; + repeated Library used_libraries = 2; // The size of the executable split by sections - repeated ExecutableSectionSize executable_sections_size = 5; + repeated ExecutableSectionSize executable_sections_size = 3; // The platform where the board is defined - InstalledPlatformReference board_platform = 6; + InstalledPlatformReference board_platform = 4; // The platform used for the build (if referenced from the board platform) - InstalledPlatformReference build_platform = 7; - // Completions reports of the compilation process (stream) - TaskProgress progress = 8; + InstalledPlatformReference build_platform = 5; // Build properties used for compiling - repeated string build_properties = 9; + repeated string build_properties = 7; + // Compiler errors and warnings + repeated CompileDiagnostic diagnostics = 8; } message ExecutableSectionSize { @@ -122,3 +135,44 @@ message ExecutableSectionSize { int64 size = 2; int64 max_size = 3; } + +message CompileDiagnostic { + // Severity of the diagnostic + string severity = 1; + // The explanation of the diagnostic (it may be multiple preformatted lines) + string message = 2; + // The file containing the diagnostic + string file = 3; + // The line of the diagnostic if available (starts from 1) + int64 line = 4; + // The column of the diagnostic if available (starts from 1) + int64 column = 5; + // The context where this diagnostic is found (it may be multiple files that + // represents a chain of includes, or a text describing where the diagnostic + // is found) + repeated CompileDiagnosticContext context = 6; + // Annotations or suggestions to the diagnostic made by the compiler + repeated CompileDiagnosticNote notes = 7; +} + +message CompileDiagnosticContext { + // The message describing the context reference + string message = 1; + // The file of the context reference + string file = 2; + // The line of the context reference + int64 line = 3; + // The column of the context reference + int64 column = 4; +} + +message CompileDiagnosticNote { + // The message describing the compiler note + string message = 1; + // The file of the compiler note + string file = 2; + // The line of the compiler note + int64 line = 3; + // The column of the compiler note + int64 column = 4; +} diff --git a/rpc/cc/arduino/cli/commands/v1/core.pb.go b/rpc/cc/arduino/cli/commands/v1/core.pb.go index c12b21374d0..b3ea05a7bd2 100644 --- a/rpc/cc/arduino/cli/commands/v1/core.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/core.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.1 +// protoc v5.26.1 // source: cc/arduino/cli/commands/v1/core.proto package commands @@ -145,10 +145,12 @@ type PlatformInstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the downloads of the platform and tool files. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` - // Description of the current stage of the installation. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *PlatformInstallResponse_Progress + // *PlatformInstallResponse_TaskProgress + // *PlatformInstallResponse_Result_ + Message isPlatformInstallResponse_Message `protobuf_oneof:"message"` } func (x *PlatformInstallResponse) Reset() { @@ -183,20 +185,59 @@ func (*PlatformInstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{1} } +func (m *PlatformInstallResponse) GetMessage() isPlatformInstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *PlatformInstallResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformInstallResponse_Progress); ok { return x.Progress } return nil } func (x *PlatformInstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformInstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *PlatformInstallResponse) GetResult() *PlatformInstallResponse_Result { + if x, ok := x.GetMessage().(*PlatformInstallResponse_Result_); ok { + return x.Result + } + return nil +} + +type isPlatformInstallResponse_Message interface { + isPlatformInstallResponse_Message() +} + +type PlatformInstallResponse_Progress struct { + // Progress of the downloads of the platform and tool files. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type PlatformInstallResponse_TaskProgress struct { + // Description of the current stage of the installation. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type PlatformInstallResponse_Result_ struct { + // The installation result. + Result *PlatformInstallResponse_Result `protobuf:"bytes,3,opt,name=result,proto3,oneof"` +} + +func (*PlatformInstallResponse_Progress) isPlatformInstallResponse_Message() {} + +func (*PlatformInstallResponse_TaskProgress) isPlatformInstallResponse_Message() {} + +func (*PlatformInstallResponse_Result_) isPlatformInstallResponse_Message() {} + type PlatformLoadingError struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -314,8 +355,11 @@ type PlatformDownloadResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the downloads of platform and tool files. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` + // Types that are assignable to Message: + // + // *PlatformDownloadResponse_Progress + // *PlatformDownloadResponse_Result_ + Message isPlatformDownloadResponse_Message `protobuf_oneof:"message"` } func (x *PlatformDownloadResponse) Reset() { @@ -350,13 +394,45 @@ func (*PlatformDownloadResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{4} } +func (m *PlatformDownloadResponse) GetMessage() isPlatformDownloadResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *PlatformDownloadResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformDownloadResponse_Progress); ok { return x.Progress } return nil } +func (x *PlatformDownloadResponse) GetResult() *PlatformDownloadResponse_Result { + if x, ok := x.GetMessage().(*PlatformDownloadResponse_Result_); ok { + return x.Result + } + return nil +} + +type isPlatformDownloadResponse_Message interface { + isPlatformDownloadResponse_Message() +} + +type PlatformDownloadResponse_Progress struct { + // Progress of the downloads of platform and tool files. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type PlatformDownloadResponse_Result_ struct { + // The download result. + Result *PlatformDownloadResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*PlatformDownloadResponse_Progress) isPlatformDownloadResponse_Message() {} + +func (*PlatformDownloadResponse_Result_) isPlatformDownloadResponse_Message() {} + type PlatformUninstallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -438,8 +514,11 @@ type PlatformUninstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Description of the current stage of the uninstall. - TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *PlatformUninstallResponse_TaskProgress + // *PlatformUninstallResponse_Result_ + Message isPlatformUninstallResponse_Message `protobuf_oneof:"message"` } func (x *PlatformUninstallResponse) Reset() { @@ -474,13 +553,45 @@ func (*PlatformUninstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{6} } +func (m *PlatformUninstallResponse) GetMessage() isPlatformUninstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *PlatformUninstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformUninstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *PlatformUninstallResponse) GetResult() *PlatformUninstallResponse_Result { + if x, ok := x.GetMessage().(*PlatformUninstallResponse_Result_); ok { + return x.Result + } + return nil +} + +type isPlatformUninstallResponse_Message interface { + isPlatformUninstallResponse_Message() +} + +type PlatformUninstallResponse_TaskProgress struct { + // Description of the current stage of the uninstall. + TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type PlatformUninstallResponse_Result_ struct { + // The uninstall result. + Result *PlatformUninstallResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*PlatformUninstallResponse_TaskProgress) isPlatformUninstallResponse_Message() {} + +func (*PlatformUninstallResponse_Result_) isPlatformUninstallResponse_Message() {} + // AlreadyAtLatestVersionError is returned when an upgrade is not possible // because already at latest version. type AlreadyAtLatestVersionError struct { @@ -612,12 +723,12 @@ type PlatformUpgradeResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the downloads of the platform and tool files. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` - // Description of the current stage of the upgrade. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` - // The upgraded platform. - Platform *Platform `protobuf:"bytes,3,opt,name=platform,proto3" json:"platform,omitempty"` + // Types that are assignable to Message: + // + // *PlatformUpgradeResponse_Progress + // *PlatformUpgradeResponse_TaskProgress + // *PlatformUpgradeResponse_Result_ + Message isPlatformUpgradeResponse_Message `protobuf_oneof:"message"` } func (x *PlatformUpgradeResponse) Reset() { @@ -652,27 +763,59 @@ func (*PlatformUpgradeResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{9} } +func (m *PlatformUpgradeResponse) GetMessage() isPlatformUpgradeResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *PlatformUpgradeResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformUpgradeResponse_Progress); ok { return x.Progress } return nil } func (x *PlatformUpgradeResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformUpgradeResponse_TaskProgress); ok { return x.TaskProgress } return nil } -func (x *PlatformUpgradeResponse) GetPlatform() *Platform { - if x != nil { - return x.Platform +func (x *PlatformUpgradeResponse) GetResult() *PlatformUpgradeResponse_Result { + if x, ok := x.GetMessage().(*PlatformUpgradeResponse_Result_); ok { + return x.Result } return nil } +type isPlatformUpgradeResponse_Message interface { + isPlatformUpgradeResponse_Message() +} + +type PlatformUpgradeResponse_Progress struct { + // Progress of the downloads of the platform and tool files. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type PlatformUpgradeResponse_TaskProgress struct { + // Description of the current stage of the upgrade. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type PlatformUpgradeResponse_Result_ struct { + // The upgrade result. + Result *PlatformUpgradeResponse_Result `protobuf:"bytes,3,opt,name=result,proto3,oneof"` +} + +func (*PlatformUpgradeResponse_Progress) isPlatformUpgradeResponse_Message() {} + +func (*PlatformUpgradeResponse_TaskProgress) isPlatformUpgradeResponse_Message() {} + +func (*PlatformUpgradeResponse_Result_) isPlatformUpgradeResponse_Message() {} + type PlatformSearchRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -682,9 +825,9 @@ type PlatformSearchRequest struct { Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` // Keywords for the search. SearchArgs string `protobuf:"bytes,2,opt,name=search_args,json=searchArgs,proto3" json:"search_args,omitempty"` - // Whether to show all available versions. `false` causes only the newest - // versions of the cores to be listed in the search results. - AllVersions bool `protobuf:"varint,3,opt,name=all_versions,json=allVersions,proto3" json:"all_versions,omitempty"` + // Whether to show manually installed platforms. `false` causes to skip + // manually installed platforms. + ManuallyInstalled bool `protobuf:"varint,3,opt,name=manually_installed,json=manuallyInstalled,proto3" json:"manually_installed,omitempty"` } func (x *PlatformSearchRequest) Reset() { @@ -733,9 +876,9 @@ func (x *PlatformSearchRequest) GetSearchArgs() string { return "" } -func (x *PlatformSearchRequest) GetAllVersions() bool { +func (x *PlatformSearchRequest) GetManuallyInstalled() bool { if x != nil { - return x.AllVersions + return x.ManuallyInstalled } return false } @@ -746,7 +889,7 @@ type PlatformSearchResponse struct { unknownFields protoimpl.UnknownFields // Results of the search. - SearchOutput []*Platform `protobuf:"bytes,1,rep,name=search_output,json=searchOutput,proto3" json:"search_output,omitempty"` + SearchOutput []*PlatformSummary `protobuf:"bytes,1,rep,name=search_output,json=searchOutput,proto3" json:"search_output,omitempty"` } func (x *PlatformSearchResponse) Reset() { @@ -781,31 +924,21 @@ func (*PlatformSearchResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{11} } -func (x *PlatformSearchResponse) GetSearchOutput() []*Platform { +func (x *PlatformSearchResponse) GetSearchOutput() []*PlatformSummary { if x != nil { return x.SearchOutput } return nil } -type PlatformListRequest struct { +type PlatformInstallResponse_Result struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // Arduino Core Service instance from the `Init` response. - Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - // Set to true to only list platforms which have a newer version available - // than the one currently installed. - UpdatableOnly bool `protobuf:"varint,2,opt,name=updatable_only,json=updatableOnly,proto3" json:"updatable_only,omitempty"` - // Set to true to list platforms installed manually in the user' sketchbook - // hardware folder, installed with the PlatformManager through the CLI or - // IDE and that are available to install - All bool `protobuf:"varint,3,opt,name=all,proto3" json:"all,omitempty"` } -func (x *PlatformListRequest) Reset() { - *x = PlatformListRequest{} +func (x *PlatformInstallResponse_Result) Reset() { + *x = PlatformInstallResponse_Result{} if protoimpl.UnsafeEnabled { mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -813,13 +946,13 @@ func (x *PlatformListRequest) Reset() { } } -func (x *PlatformListRequest) String() string { +func (x *PlatformInstallResponse_Result) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PlatformListRequest) ProtoMessage() {} +func (*PlatformInstallResponse_Result) ProtoMessage() {} -func (x *PlatformListRequest) ProtoReflect() protoreflect.Message { +func (x *PlatformInstallResponse_Result) ProtoReflect() protoreflect.Message { mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -831,58 +964,113 @@ func (x *PlatformListRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PlatformListRequest.ProtoReflect.Descriptor instead. -func (*PlatformListRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{12} +// Deprecated: Use PlatformInstallResponse_Result.ProtoReflect.Descriptor instead. +func (*PlatformInstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{1, 0} } -func (x *PlatformListRequest) GetInstance() *Instance { - if x != nil { - return x.Instance +type PlatformDownloadResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *PlatformDownloadResponse_Result) Reset() { + *x = PlatformDownloadResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *PlatformListRequest) GetUpdatableOnly() bool { - if x != nil { - return x.UpdatableOnly +func (x *PlatformDownloadResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformDownloadResponse_Result) ProtoMessage() {} + +func (x *PlatformDownloadResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return false + return mi.MessageOf(x) } -func (x *PlatformListRequest) GetAll() bool { - if x != nil { - return x.All +// Deprecated: Use PlatformDownloadResponse_Result.ProtoReflect.Descriptor instead. +func (*PlatformDownloadResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{4, 0} +} + +type PlatformUninstallResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *PlatformUninstallResponse_Result) Reset() { + *x = PlatformUninstallResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return false } -type PlatformListResponse struct { +func (x *PlatformUninstallResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformUninstallResponse_Result) ProtoMessage() {} + +func (x *PlatformUninstallResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlatformUninstallResponse_Result.ProtoReflect.Descriptor instead. +func (*PlatformUninstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{6, 0} +} + +type PlatformUpgradeResponse_Result struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The installed platforms. - InstalledPlatforms []*Platform `protobuf:"bytes,1,rep,name=installed_platforms,json=installedPlatforms,proto3" json:"installed_platforms,omitempty"` + // The upgraded platform. + Platform *Platform `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"` } -func (x *PlatformListResponse) Reset() { - *x = PlatformListResponse{} +func (x *PlatformUpgradeResponse_Result) Reset() { + *x = PlatformUpgradeResponse_Result{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[13] + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *PlatformListResponse) String() string { +func (x *PlatformUpgradeResponse_Result) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PlatformListResponse) ProtoMessage() {} +func (*PlatformUpgradeResponse_Result) ProtoMessage() {} -func (x *PlatformListResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[13] +func (x *PlatformUpgradeResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -893,14 +1081,14 @@ func (x *PlatformListResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PlatformListResponse.ProtoReflect.Descriptor instead. -func (*PlatformListResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{13} +// Deprecated: Use PlatformUpgradeResponse_Result.ProtoReflect.Descriptor instead. +func (*PlatformUpgradeResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{9, 0} } -func (x *PlatformListResponse) GetInstalledPlatforms() []*Platform { +func (x *PlatformUpgradeResponse_Result) GetPlatform() *Platform { if x != nil { - return x.InstalledPlatforms + return x.Platform } return nil } @@ -935,130 +1123,143 @@ var file_cc_arduino_cli_commands_v1_core_proto_rawDesc = []byte{ 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x22, - 0xb2, 0x01, 0x0a, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, + 0xa1, 0x02, 0x0a, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x4c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xc4, 0x01, 0x0a, - 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, - 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x64, 0x0a, 0x18, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, + 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x54, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, + 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xc4, 0x01, 0x0a, 0x17, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, + 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0xd2, 0x01, 0x0a, 0x18, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x48, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0xd9, 0x01, 0x0a, 0x18, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, + 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xd9, 0x01, 0x0a, 0x18, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x70, 0x72, + 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x22, 0xd9, 0x01, 0x0a, 0x19, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, - 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x5f, - 0x70, 0x72, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x55, 0x6e, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x22, 0x6a, 0x0a, 0x19, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x41, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x41, 0x74, 0x4c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x83, 0x02, 0x0a, 0x16, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, - 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, - 0x10, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, - 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x11, - 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x6f, 0x73, - 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, - 0x5f, 0x70, 0x72, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x55, 0x6e, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x22, 0xf4, 0x01, 0x0a, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x56, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x1d, 0x0a, 0x1b, 0x41, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x41, 0x74, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x83, + 0x02, 0x0a, 0x16, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, + 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, + 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, + 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6b, + 0x69, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x6f, 0x73, 0x74, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x70, + 0x72, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x55, 0x6e, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x22, 0xe3, 0x02, 0x0a, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, - 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, + 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x54, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x9d, 0x01, - 0x0a, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x72, 0x67, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6c, - 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x63, 0x0a, - 0x16, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x22, 0x90, 0x01, 0x0a, 0x13, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4f, - 0x6e, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x6d, 0x0a, 0x14, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, - 0x13, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x52, 0x12, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x73, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x1a, 0x4a, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x40, 0x0a, + 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, + 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa9, 0x01, 0x0a, 0x15, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x6d, 0x61, 0x6e, 0x75, 0x61, + 0x6c, 0x6c, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x22, 0x6a, 0x0a, 0x16, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x50, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1073,48 +1274,53 @@ func file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_core_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_core_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_cc_arduino_cli_commands_v1_core_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_cc_arduino_cli_commands_v1_core_proto_goTypes = []interface{}{ - (*PlatformInstallRequest)(nil), // 0: cc.arduino.cli.commands.v1.PlatformInstallRequest - (*PlatformInstallResponse)(nil), // 1: cc.arduino.cli.commands.v1.PlatformInstallResponse - (*PlatformLoadingError)(nil), // 2: cc.arduino.cli.commands.v1.PlatformLoadingError - (*PlatformDownloadRequest)(nil), // 3: cc.arduino.cli.commands.v1.PlatformDownloadRequest - (*PlatformDownloadResponse)(nil), // 4: cc.arduino.cli.commands.v1.PlatformDownloadResponse - (*PlatformUninstallRequest)(nil), // 5: cc.arduino.cli.commands.v1.PlatformUninstallRequest - (*PlatformUninstallResponse)(nil), // 6: cc.arduino.cli.commands.v1.PlatformUninstallResponse - (*AlreadyAtLatestVersionError)(nil), // 7: cc.arduino.cli.commands.v1.AlreadyAtLatestVersionError - (*PlatformUpgradeRequest)(nil), // 8: cc.arduino.cli.commands.v1.PlatformUpgradeRequest - (*PlatformUpgradeResponse)(nil), // 9: cc.arduino.cli.commands.v1.PlatformUpgradeResponse - (*PlatformSearchRequest)(nil), // 10: cc.arduino.cli.commands.v1.PlatformSearchRequest - (*PlatformSearchResponse)(nil), // 11: cc.arduino.cli.commands.v1.PlatformSearchResponse - (*PlatformListRequest)(nil), // 12: cc.arduino.cli.commands.v1.PlatformListRequest - (*PlatformListResponse)(nil), // 13: cc.arduino.cli.commands.v1.PlatformListResponse - (*Instance)(nil), // 14: cc.arduino.cli.commands.v1.Instance - (*DownloadProgress)(nil), // 15: cc.arduino.cli.commands.v1.DownloadProgress - (*TaskProgress)(nil), // 16: cc.arduino.cli.commands.v1.TaskProgress - (*Platform)(nil), // 17: cc.arduino.cli.commands.v1.Platform + (*PlatformInstallRequest)(nil), // 0: cc.arduino.cli.commands.v1.PlatformInstallRequest + (*PlatformInstallResponse)(nil), // 1: cc.arduino.cli.commands.v1.PlatformInstallResponse + (*PlatformLoadingError)(nil), // 2: cc.arduino.cli.commands.v1.PlatformLoadingError + (*PlatformDownloadRequest)(nil), // 3: cc.arduino.cli.commands.v1.PlatformDownloadRequest + (*PlatformDownloadResponse)(nil), // 4: cc.arduino.cli.commands.v1.PlatformDownloadResponse + (*PlatformUninstallRequest)(nil), // 5: cc.arduino.cli.commands.v1.PlatformUninstallRequest + (*PlatformUninstallResponse)(nil), // 6: cc.arduino.cli.commands.v1.PlatformUninstallResponse + (*AlreadyAtLatestVersionError)(nil), // 7: cc.arduino.cli.commands.v1.AlreadyAtLatestVersionError + (*PlatformUpgradeRequest)(nil), // 8: cc.arduino.cli.commands.v1.PlatformUpgradeRequest + (*PlatformUpgradeResponse)(nil), // 9: cc.arduino.cli.commands.v1.PlatformUpgradeResponse + (*PlatformSearchRequest)(nil), // 10: cc.arduino.cli.commands.v1.PlatformSearchRequest + (*PlatformSearchResponse)(nil), // 11: cc.arduino.cli.commands.v1.PlatformSearchResponse + (*PlatformInstallResponse_Result)(nil), // 12: cc.arduino.cli.commands.v1.PlatformInstallResponse.Result + (*PlatformDownloadResponse_Result)(nil), // 13: cc.arduino.cli.commands.v1.PlatformDownloadResponse.Result + (*PlatformUninstallResponse_Result)(nil), // 14: cc.arduino.cli.commands.v1.PlatformUninstallResponse.Result + (*PlatformUpgradeResponse_Result)(nil), // 15: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.Result + (*Instance)(nil), // 16: cc.arduino.cli.commands.v1.Instance + (*DownloadProgress)(nil), // 17: cc.arduino.cli.commands.v1.DownloadProgress + (*TaskProgress)(nil), // 18: cc.arduino.cli.commands.v1.TaskProgress + (*PlatformSummary)(nil), // 19: cc.arduino.cli.commands.v1.PlatformSummary + (*Platform)(nil), // 20: cc.arduino.cli.commands.v1.Platform } var file_cc_arduino_cli_commands_v1_core_proto_depIdxs = []int32{ - 14, // 0: cc.arduino.cli.commands.v1.PlatformInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 15, // 1: cc.arduino.cli.commands.v1.PlatformInstallResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 16, // 2: cc.arduino.cli.commands.v1.PlatformInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 14, // 3: cc.arduino.cli.commands.v1.PlatformDownloadRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 15, // 4: cc.arduino.cli.commands.v1.PlatformDownloadResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 14, // 5: cc.arduino.cli.commands.v1.PlatformUninstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 16, // 6: cc.arduino.cli.commands.v1.PlatformUninstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 14, // 7: cc.arduino.cli.commands.v1.PlatformUpgradeRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 15, // 8: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 16, // 9: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 17, // 10: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.platform:type_name -> cc.arduino.cli.commands.v1.Platform - 14, // 11: cc.arduino.cli.commands.v1.PlatformSearchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 17, // 12: cc.arduino.cli.commands.v1.PlatformSearchResponse.search_output:type_name -> cc.arduino.cli.commands.v1.Platform - 14, // 13: cc.arduino.cli.commands.v1.PlatformListRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 17, // 14: cc.arduino.cli.commands.v1.PlatformListResponse.installed_platforms:type_name -> cc.arduino.cli.commands.v1.Platform - 15, // [15:15] is the sub-list for method output_type - 15, // [15:15] is the sub-list for method input_type - 15, // [15:15] is the sub-list for extension type_name - 15, // [15:15] is the sub-list for extension extendee - 0, // [0:15] is the sub-list for field type_name + 16, // 0: cc.arduino.cli.commands.v1.PlatformInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 17, // 1: cc.arduino.cli.commands.v1.PlatformInstallResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 18, // 2: cc.arduino.cli.commands.v1.PlatformInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 12, // 3: cc.arduino.cli.commands.v1.PlatformInstallResponse.result:type_name -> cc.arduino.cli.commands.v1.PlatformInstallResponse.Result + 16, // 4: cc.arduino.cli.commands.v1.PlatformDownloadRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 17, // 5: cc.arduino.cli.commands.v1.PlatformDownloadResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 13, // 6: cc.arduino.cli.commands.v1.PlatformDownloadResponse.result:type_name -> cc.arduino.cli.commands.v1.PlatformDownloadResponse.Result + 16, // 7: cc.arduino.cli.commands.v1.PlatformUninstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 18, // 8: cc.arduino.cli.commands.v1.PlatformUninstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 14, // 9: cc.arduino.cli.commands.v1.PlatformUninstallResponse.result:type_name -> cc.arduino.cli.commands.v1.PlatformUninstallResponse.Result + 16, // 10: cc.arduino.cli.commands.v1.PlatformUpgradeRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 17, // 11: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 18, // 12: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 15, // 13: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.result:type_name -> cc.arduino.cli.commands.v1.PlatformUpgradeResponse.Result + 16, // 14: cc.arduino.cli.commands.v1.PlatformSearchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 19, // 15: cc.arduino.cli.commands.v1.PlatformSearchResponse.search_output:type_name -> cc.arduino.cli.commands.v1.PlatformSummary + 20, // 16: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.Result.platform:type_name -> cc.arduino.cli.commands.v1.Platform + 17, // [17:17] is the sub-list for method output_type + 17, // [17:17] is the sub-list for method input_type + 17, // [17:17] is the sub-list for extension type_name + 17, // [17:17] is the sub-list for extension extendee + 0, // [0:17] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_core_proto_init() } @@ -1269,7 +1475,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { } } file_cc_arduino_cli_commands_v1_core_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlatformListRequest); i { + switch v := v.(*PlatformInstallResponse_Result); i { case 0: return &v.state case 1: @@ -1281,7 +1487,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { } } file_cc_arduino_cli_commands_v1_core_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlatformListResponse); i { + switch v := v.(*PlatformDownloadResponse_Result); i { case 0: return &v.state case 1: @@ -1292,6 +1498,48 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PlatformUninstallResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PlatformUpgradeResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*PlatformInstallResponse_Progress)(nil), + (*PlatformInstallResponse_TaskProgress)(nil), + (*PlatformInstallResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[4].OneofWrappers = []interface{}{ + (*PlatformDownloadResponse_Progress)(nil), + (*PlatformDownloadResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[6].OneofWrappers = []interface{}{ + (*PlatformUninstallResponse_TaskProgress)(nil), + (*PlatformUninstallResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[9].OneofWrappers = []interface{}{ + (*PlatformUpgradeResponse_Progress)(nil), + (*PlatformUpgradeResponse_TaskProgress)(nil), + (*PlatformUpgradeResponse_Result_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -1299,7 +1547,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_core_proto_rawDesc, NumEnums: 0, - NumMessages: 14, + NumMessages: 16, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/core.proto b/rpc/cc/arduino/cli/commands/v1/core.proto index 70ec4d46886..a1f0325c4e3 100644 --- a/rpc/cc/arduino/cli/commands/v1/core.proto +++ b/rpc/cc/arduino/cli/commands/v1/core.proto @@ -42,10 +42,17 @@ message PlatformInstallRequest { } message PlatformInstallResponse { - // Progress of the downloads of the platform and tool files. - DownloadProgress progress = 1; - // Description of the current stage of the installation. - TaskProgress task_progress = 2; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the downloads of the platform and tool files. + DownloadProgress progress = 1; + // Description of the current stage of the installation. + TaskProgress task_progress = 2; + // The installation result. + Result result = 3; + } } message PlatformLoadingError {} @@ -61,8 +68,15 @@ message PlatformDownloadRequest { } message PlatformDownloadResponse { - // Progress of the downloads of platform and tool files. - DownloadProgress progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the downloads of platform and tool files. + DownloadProgress progress = 1; + // The download result. + Result result = 2; + } } message PlatformUninstallRequest { @@ -78,8 +92,15 @@ message PlatformUninstallRequest { } message PlatformUninstallResponse { - // Description of the current stage of the uninstall. - TaskProgress task_progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Description of the current stage of the uninstall. + TaskProgress task_progress = 1; + // The uninstall result. + Result result = 2; + } } // AlreadyAtLatestVersionError is returned when an upgrade is not possible @@ -102,12 +123,18 @@ message PlatformUpgradeRequest { } message PlatformUpgradeResponse { - // Progress of the downloads of the platform and tool files. - DownloadProgress progress = 1; - // Description of the current stage of the upgrade. - TaskProgress task_progress = 2; - // The upgraded platform. - Platform platform = 3; + message Result { + // The upgraded platform. + Platform platform = 1; + } + oneof message { + // Progress of the downloads of the platform and tool files. + DownloadProgress progress = 1; + // Description of the current stage of the upgrade. + TaskProgress task_progress = 2; + // The upgrade result. + Result result = 3; + } } message PlatformSearchRequest { @@ -115,29 +142,12 @@ message PlatformSearchRequest { Instance instance = 1; // Keywords for the search. string search_args = 2; - // Whether to show all available versions. `false` causes only the newest - // versions of the cores to be listed in the search results. - bool all_versions = 3; + // Whether to show manually installed platforms. `false` causes to skip + // manually installed platforms. + bool manually_installed = 3; } message PlatformSearchResponse { // Results of the search. - repeated Platform search_output = 1; -} - -message PlatformListRequest { - // Arduino Core Service instance from the `Init` response. - Instance instance = 1; - // Set to true to only list platforms which have a newer version available - // than the one currently installed. - bool updatable_only = 2; - // Set to true to list platforms installed manually in the user' sketchbook - // hardware folder, installed with the PlatformManager through the CLI or - // IDE and that are available to install - bool all = 3; -} - -message PlatformListResponse { - // The installed platforms. - repeated Platform installed_platforms = 1; + repeated PlatformSummary search_output = 1; } diff --git a/rpc/cc/arduino/cli/commands/v1/debug.pb.go b/rpc/cc/arduino/cli/commands/v1/debug.pb.go index 4dc46f0b13a..30aa64246b0 100644 --- a/rpc/cc/arduino/cli/commands/v1/debug.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/debug.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.1 +// protoc v5.26.1 // source: cc/arduino/cli/commands/v1/debug.proto package commands @@ -109,49 +109,126 @@ func (x *DebugRequest) GetSendInterrupt() bool { return false } -type GetDebugConfigRequest struct { +// The streaming response may contain chunks of data from the debugger or an +// error. +type DebugResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Message: + // + // *DebugResponse_Data + // *DebugResponse_Result_ + Message isDebugResponse_Message `protobuf_oneof:"message"` +} + +func (x *DebugResponse) Reset() { + *x = DebugResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DebugResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DebugResponse) ProtoMessage() {} + +func (x *DebugResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DebugResponse.ProtoReflect.Descriptor instead. +func (*DebugResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{1} +} + +func (m *DebugResponse) GetMessage() isDebugResponse_Message { + if m != nil { + return m.Message + } + return nil +} + +func (x *DebugResponse) GetData() []byte { + if x, ok := x.GetMessage().(*DebugResponse_Data); ok { + return x.Data + } + return nil +} + +func (x *DebugResponse) GetResult() *DebugResponse_Result { + if x, ok := x.GetMessage().(*DebugResponse_Result_); ok { + return x.Result + } + return nil +} + +type isDebugResponse_Message interface { + isDebugResponse_Message() +} + +type DebugResponse_Data struct { + // Incoming data from the debugger tool. + Data []byte `protobuf:"bytes,1,opt,name=data,proto3,oneof"` +} + +type DebugResponse_Result_ struct { + // Debugging result. + Result *DebugResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*DebugResponse_Data) isDebugResponse_Message() {} + +func (*DebugResponse_Result_) isDebugResponse_Message() {} + +type IsDebugSupportedRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Arduino Core Service instance from the `Init` response. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - // Fully qualified board name of the board in use - // (e.g., `arduino:samd:mkr1000`). If this is omitted, the FQBN attached to - // the sketch will be used. + // Fully qualified board name of the board in use (e.g., + // `arduino:samd:mkr1000`). Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` - // Path to the sketch that is running on the board. The compiled executable - // is expected to be located under this path. - SketchPath string `protobuf:"bytes,3,opt,name=sketch_path,json=sketchPath,proto3" json:"sketch_path,omitempty"` // Port of the debugger (optional). - Port *Port `protobuf:"bytes,4,opt,name=port,proto3" json:"port,omitempty"` + Port *Port `protobuf:"bytes,3,opt,name=port,proto3" json:"port,omitempty"` // Which GDB command interpreter to use. - Interpreter string `protobuf:"bytes,5,opt,name=interpreter,proto3" json:"interpreter,omitempty"` - // Directory containing the compiled executable. If `import_dir` is not - // specified, the executable is assumed to be in - // `{sketch_path}/build/{fqbn}/`. - ImportDir string `protobuf:"bytes,8,opt,name=import_dir,json=importDir,proto3" json:"import_dir,omitempty"` + Interpreter string `protobuf:"bytes,4,opt,name=interpreter,proto3" json:"interpreter,omitempty"` // The programmer to use for debugging. - Programmer string `protobuf:"bytes,9,opt,name=programmer,proto3" json:"programmer,omitempty"` + Programmer string `protobuf:"bytes,5,opt,name=programmer,proto3" json:"programmer,omitempty"` } -func (x *GetDebugConfigRequest) Reset() { - *x = GetDebugConfigRequest{} +func (x *IsDebugSupportedRequest) Reset() { + *x = IsDebugSupportedRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetDebugConfigRequest) String() string { +func (x *IsDebugSupportedRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetDebugConfigRequest) ProtoMessage() {} +func (*IsDebugSupportedRequest) ProtoMessage() {} -func (x *GetDebugConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1] +func (x *IsDebugSupportedRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -162,88 +239,149 @@ func (x *GetDebugConfigRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetDebugConfigRequest.ProtoReflect.Descriptor instead. -func (*GetDebugConfigRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{1} +// Deprecated: Use IsDebugSupportedRequest.ProtoReflect.Descriptor instead. +func (*IsDebugSupportedRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{2} } -func (x *GetDebugConfigRequest) GetInstance() *Instance { +func (x *IsDebugSupportedRequest) GetInstance() *Instance { if x != nil { return x.Instance } return nil } -func (x *GetDebugConfigRequest) GetFqbn() string { +func (x *IsDebugSupportedRequest) GetFqbn() string { if x != nil { return x.Fqbn } return "" } -func (x *GetDebugConfigRequest) GetSketchPath() string { - if x != nil { - return x.SketchPath - } - return "" -} - -func (x *GetDebugConfigRequest) GetPort() *Port { +func (x *IsDebugSupportedRequest) GetPort() *Port { if x != nil { return x.Port } return nil } -func (x *GetDebugConfigRequest) GetInterpreter() string { +func (x *IsDebugSupportedRequest) GetInterpreter() string { if x != nil { return x.Interpreter } return "" } -func (x *GetDebugConfigRequest) GetImportDir() string { +func (x *IsDebugSupportedRequest) GetProgrammer() string { if x != nil { - return x.ImportDir + return x.Programmer } return "" } -func (x *GetDebugConfigRequest) GetProgrammer() string { +type IsDebugSupportedResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // True if debugging is supported + DebuggingSupported bool `protobuf:"varint,1,opt,name=debugging_supported,json=debuggingSupported,proto3" json:"debugging_supported,omitempty"` + // This is the same FQBN given in the IsDebugSupportedRequest but cleaned + // up of the board options that do not affect the debugger configuration. + // It may be used by clients/IDE to group slightly different boards option + // selections under the same debug configuration. + DebugFqbn string `protobuf:"bytes,2,opt,name=debug_fqbn,json=debugFqbn,proto3" json:"debug_fqbn,omitempty"` +} + +func (x *IsDebugSupportedResponse) Reset() { + *x = IsDebugSupportedResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IsDebugSupportedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IsDebugSupportedResponse) ProtoMessage() {} + +func (x *IsDebugSupportedResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IsDebugSupportedResponse.ProtoReflect.Descriptor instead. +func (*IsDebugSupportedResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{3} +} + +func (x *IsDebugSupportedResponse) GetDebuggingSupported() bool { if x != nil { - return x.Programmer + return x.DebuggingSupported + } + return false +} + +func (x *IsDebugSupportedResponse) GetDebugFqbn() string { + if x != nil { + return x.DebugFqbn } return "" } -type DebugResponse struct { +type GetDebugConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Incoming data from the debugger tool. - Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - // Incoming error output from the debugger tool. - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + // Arduino Core Service instance from the `Init` response. + Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` + // Fully qualified board name of the board in use + // (e.g., `arduino:samd:mkr1000`). If this is omitted, the FQBN attached to + // the sketch will be used. + Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` + // Path to the sketch that is running on the board. The compiled executable + // is expected to be located under this path. + SketchPath string `protobuf:"bytes,3,opt,name=sketch_path,json=sketchPath,proto3" json:"sketch_path,omitempty"` + // Port of the debugger (optional). + Port *Port `protobuf:"bytes,4,opt,name=port,proto3" json:"port,omitempty"` + // Which GDB command interpreter to use. + Interpreter string `protobuf:"bytes,5,opt,name=interpreter,proto3" json:"interpreter,omitempty"` + // Directory containing the compiled executable. If `import_dir` is not + // specified, the executable is assumed to be in + // `{sketch_path}/build/{fqbn}/`. + ImportDir string `protobuf:"bytes,8,opt,name=import_dir,json=importDir,proto3" json:"import_dir,omitempty"` + // The programmer to use for debugging. + Programmer string `protobuf:"bytes,9,opt,name=programmer,proto3" json:"programmer,omitempty"` } -func (x *DebugResponse) Reset() { - *x = DebugResponse{} +func (x *GetDebugConfigRequest) Reset() { + *x = GetDebugConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[2] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *DebugResponse) String() string { +func (x *GetDebugConfigRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DebugResponse) ProtoMessage() {} +func (*GetDebugConfigRequest) ProtoMessage() {} -func (x *DebugResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[2] +func (x *GetDebugConfigRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -254,21 +392,56 @@ func (x *DebugResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DebugResponse.ProtoReflect.Descriptor instead. -func (*DebugResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{2} +// Deprecated: Use GetDebugConfigRequest.ProtoReflect.Descriptor instead. +func (*GetDebugConfigRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{4} } -func (x *DebugResponse) GetData() []byte { +func (x *GetDebugConfigRequest) GetInstance() *Instance { if x != nil { - return x.Data + return x.Instance } return nil } -func (x *DebugResponse) GetError() string { +func (x *GetDebugConfigRequest) GetFqbn() string { if x != nil { - return x.Error + return x.Fqbn + } + return "" +} + +func (x *GetDebugConfigRequest) GetSketchPath() string { + if x != nil { + return x.SketchPath + } + return "" +} + +func (x *GetDebugConfigRequest) GetPort() *Port { + if x != nil { + return x.Port + } + return nil +} + +func (x *GetDebugConfigRequest) GetInterpreter() string { + if x != nil { + return x.Interpreter + } + return "" +} + +func (x *GetDebugConfigRequest) GetImportDir() string { + if x != nil { + return x.ImportDir + } + return "" +} + +func (x *GetDebugConfigRequest) GetProgrammer() string { + if x != nil { + return x.Programmer } return "" } @@ -284,7 +457,7 @@ type GetDebugConfigResponse struct { Toolchain string `protobuf:"bytes,2,opt,name=toolchain,proto3" json:"toolchain,omitempty"` // The toolchain directory ToolchainPath string `protobuf:"bytes,3,opt,name=toolchain_path,json=toolchainPath,proto3" json:"toolchain_path,omitempty"` - // The toolchain architecture prefix (for example "arm-none-eabi-") + // The toolchain architecture prefix (for example "arm-none-eabi") ToolchainPrefix string `protobuf:"bytes,4,opt,name=toolchain_prefix,json=toolchainPrefix,proto3" json:"toolchain_prefix,omitempty"` // The GDB server type used to connect to the programmer/board (for example // "openocd") @@ -295,17 +468,21 @@ type GetDebugConfigResponse struct { ToolchainConfiguration *anypb.Any `protobuf:"bytes,7,opt,name=toolchain_configuration,json=toolchainConfiguration,proto3" json:"toolchain_configuration,omitempty"` // Extra configuration parameters wrt GDB server ServerConfiguration *anypb.Any `protobuf:"bytes,8,opt,name=server_configuration,json=serverConfiguration,proto3" json:"server_configuration,omitempty"` - // cortex-debug custom JSON configuration, it is provided as is from - // the platform developers. - CortexDebugCustomJson string `protobuf:"bytes,9,opt,name=cortex_debug_custom_json,json=cortexDebugCustomJson,proto3" json:"cortex_debug_custom_json,omitempty"` + // Custom debugger configurations (not handled directly by Arduino CLI but + // provided for 3rd party plugins/debuggers). The map keys identifies which + // 3rd party plugin/debugger is referred, the map string values contains a + // JSON configuration for it. + CustomConfigs map[string]string `protobuf:"bytes,9,rep,name=custom_configs,json=customConfigs,proto3" json:"custom_configs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // the SVD file to use SvdFile string `protobuf:"bytes,10,opt,name=svd_file,json=svdFile,proto3" json:"svd_file,omitempty"` + // The programmer specified in the request + Programmer string `protobuf:"bytes,11,opt,name=programmer,proto3" json:"programmer,omitempty"` } func (x *GetDebugConfigResponse) Reset() { *x = GetDebugConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[3] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -318,7 +495,7 @@ func (x *GetDebugConfigResponse) String() string { func (*GetDebugConfigResponse) ProtoMessage() {} func (x *GetDebugConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[3] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -331,7 +508,7 @@ func (x *GetDebugConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDebugConfigResponse.ProtoReflect.Descriptor instead. func (*GetDebugConfigResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{3} + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{5} } func (x *GetDebugConfigResponse) GetExecutable() string { @@ -390,11 +567,11 @@ func (x *GetDebugConfigResponse) GetServerConfiguration() *anypb.Any { return nil } -func (x *GetDebugConfigResponse) GetCortexDebugCustomJson() string { +func (x *GetDebugConfigResponse) GetCustomConfigs() map[string]string { if x != nil { - return x.CortexDebugCustomJson + return x.CustomConfigs } - return "" + return nil } func (x *GetDebugConfigResponse) GetSvdFile() string { @@ -404,6 +581,13 @@ func (x *GetDebugConfigResponse) GetSvdFile() string { return "" } +func (x *GetDebugConfigResponse) GetProgrammer() string { + if x != nil { + return x.Programmer + } + return "" +} + // Configurations specific for the 'gcc' toolchain type DebugGCCToolchainConfiguration struct { state protoimpl.MessageState @@ -414,7 +598,7 @@ type DebugGCCToolchainConfiguration struct { func (x *DebugGCCToolchainConfiguration) Reset() { *x = DebugGCCToolchainConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[4] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -427,7 +611,7 @@ func (x *DebugGCCToolchainConfiguration) String() string { func (*DebugGCCToolchainConfiguration) ProtoMessage() {} func (x *DebugGCCToolchainConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[4] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -440,7 +624,7 @@ func (x *DebugGCCToolchainConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugGCCToolchainConfiguration.ProtoReflect.Descriptor instead. func (*DebugGCCToolchainConfiguration) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{4} + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{6} } // Configuration specific for the 'openocd` server @@ -460,7 +644,7 @@ type DebugOpenOCDServerConfiguration struct { func (x *DebugOpenOCDServerConfiguration) Reset() { *x = DebugOpenOCDServerConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[5] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -473,7 +657,7 @@ func (x *DebugOpenOCDServerConfiguration) String() string { func (*DebugOpenOCDServerConfiguration) ProtoMessage() {} func (x *DebugOpenOCDServerConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[5] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -486,7 +670,7 @@ func (x *DebugOpenOCDServerConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugOpenOCDServerConfiguration.ProtoReflect.Descriptor instead. func (*DebugOpenOCDServerConfiguration) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{5} + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{7} } func (x *DebugOpenOCDServerConfiguration) GetPath() string { @@ -510,6 +694,54 @@ func (x *DebugOpenOCDServerConfiguration) GetScripts() []string { return nil } +type DebugResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Incoming error output from the debugger tool. + Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *DebugResponse_Result) Reset() { + *x = DebugResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DebugResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DebugResponse_Result) ProtoMessage() {} + +func (x *DebugResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DebugResponse_Result.ProtoReflect.Descriptor instead. +func (*DebugResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *DebugResponse_Result) GetError() string { + if x != nil { + return x.Error + } + return "" +} + var File_cc_arduino_cli_commands_v1_debug_proto protoreflect.FileDescriptor var file_cc_arduino_cli_commands_v1_debug_proto_rawDesc = []byte{ @@ -534,72 +766,109 @@ var file_cc_arduino_cli_commands_v1_debug_proto_rawDesc = []byte{ 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, - 0x75, 0x70, 0x74, 0x22, 0xa5, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, - 0x71, 0x62, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, - 0x50, 0x61, 0x74, 0x68, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x75, 0x70, 0x74, 0x22, 0x9c, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4a, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x1e, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0xe7, 0x01, 0x0a, 0x17, 0x49, 0x73, 0x44, 0x65, 0x62, 0x75, 0x67, 0x53, 0x75, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, + 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x66, 0x71, 0x62, 0x6e, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, - 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x22, 0x39, 0x0a, 0x0d, 0x44, - 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xcd, 0x03, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, - 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, 0x4d, 0x0a, 0x17, 0x74, 0x6f, - 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x16, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x14, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x13, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x18, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x64, 0x65, 0x62, - 0x75, 0x67, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x44, 0x65, 0x62, 0x75, - 0x67, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, - 0x76, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, - 0x76, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x47, - 0x43, 0x43, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x1f, 0x44, 0x65, 0x62, 0x75, - 0x67, 0x4f, 0x70, 0x65, 0x6e, 0x4f, 0x43, 0x44, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, - 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x44, 0x69, 0x72, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, - 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x22, 0x6a, 0x0a, 0x18, + 0x49, 0x73, 0x44, 0x65, 0x62, 0x75, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x64, 0x65, 0x62, 0x75, + 0x67, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, + 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x62, + 0x75, 0x67, 0x5f, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, + 0x65, 0x62, 0x75, 0x67, 0x46, 0x71, 0x62, 0x6e, 0x22, 0xa5, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, + 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, + 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x72, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, + 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, + 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, + 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, + 0x22, 0xe4, 0x04, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x6f, + 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x74, 0x68, + 0x12, 0x29, 0x0a, 0x10, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x6f, 0x6f, 0x6c, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x50, 0x61, 0x74, 0x68, 0x12, 0x4d, 0x0a, 0x17, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x16, 0x74, 0x6f, 0x6f, + 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6c, 0x0a, 0x0e, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x63, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x76, + 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x76, + 0x64, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, + 0x6d, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x1a, 0x40, 0x0a, 0x12, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x20, 0x0a, 0x1e, 0x44, 0x65, 0x62, 0x75, 0x67, + 0x47, 0x43, 0x43, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x1f, 0x44, 0x65, 0x62, + 0x75, 0x67, 0x4f, 0x70, 0x65, 0x6e, 0x4f, 0x43, 0x44, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x44, 0x69, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x07, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x42, 0x48, 0x5a, 0x46, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, + 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -614,29 +883,37 @@ func file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_debug_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_debug_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_cc_arduino_cli_commands_v1_debug_proto_msgTypes = make([]protoimpl.MessageInfo, 10) var file_cc_arduino_cli_commands_v1_debug_proto_goTypes = []interface{}{ (*DebugRequest)(nil), // 0: cc.arduino.cli.commands.v1.DebugRequest - (*GetDebugConfigRequest)(nil), // 1: cc.arduino.cli.commands.v1.GetDebugConfigRequest - (*DebugResponse)(nil), // 2: cc.arduino.cli.commands.v1.DebugResponse - (*GetDebugConfigResponse)(nil), // 3: cc.arduino.cli.commands.v1.GetDebugConfigResponse - (*DebugGCCToolchainConfiguration)(nil), // 4: cc.arduino.cli.commands.v1.DebugGCCToolchainConfiguration - (*DebugOpenOCDServerConfiguration)(nil), // 5: cc.arduino.cli.commands.v1.DebugOpenOCDServerConfiguration - (*Instance)(nil), // 6: cc.arduino.cli.commands.v1.Instance - (*Port)(nil), // 7: cc.arduino.cli.commands.v1.Port - (*anypb.Any)(nil), // 8: google.protobuf.Any + (*DebugResponse)(nil), // 1: cc.arduino.cli.commands.v1.DebugResponse + (*IsDebugSupportedRequest)(nil), // 2: cc.arduino.cli.commands.v1.IsDebugSupportedRequest + (*IsDebugSupportedResponse)(nil), // 3: cc.arduino.cli.commands.v1.IsDebugSupportedResponse + (*GetDebugConfigRequest)(nil), // 4: cc.arduino.cli.commands.v1.GetDebugConfigRequest + (*GetDebugConfigResponse)(nil), // 5: cc.arduino.cli.commands.v1.GetDebugConfigResponse + (*DebugGCCToolchainConfiguration)(nil), // 6: cc.arduino.cli.commands.v1.DebugGCCToolchainConfiguration + (*DebugOpenOCDServerConfiguration)(nil), // 7: cc.arduino.cli.commands.v1.DebugOpenOCDServerConfiguration + (*DebugResponse_Result)(nil), // 8: cc.arduino.cli.commands.v1.DebugResponse.Result + nil, // 9: cc.arduino.cli.commands.v1.GetDebugConfigResponse.CustomConfigsEntry + (*Instance)(nil), // 10: cc.arduino.cli.commands.v1.Instance + (*Port)(nil), // 11: cc.arduino.cli.commands.v1.Port + (*anypb.Any)(nil), // 12: google.protobuf.Any } var file_cc_arduino_cli_commands_v1_debug_proto_depIdxs = []int32{ - 1, // 0: cc.arduino.cli.commands.v1.DebugRequest.debug_request:type_name -> cc.arduino.cli.commands.v1.GetDebugConfigRequest - 6, // 1: cc.arduino.cli.commands.v1.GetDebugConfigRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 7, // 2: cc.arduino.cli.commands.v1.GetDebugConfigRequest.port:type_name -> cc.arduino.cli.commands.v1.Port - 8, // 3: cc.arduino.cli.commands.v1.GetDebugConfigResponse.toolchain_configuration:type_name -> google.protobuf.Any - 8, // 4: cc.arduino.cli.commands.v1.GetDebugConfigResponse.server_configuration:type_name -> google.protobuf.Any - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 4, // 0: cc.arduino.cli.commands.v1.DebugRequest.debug_request:type_name -> cc.arduino.cli.commands.v1.GetDebugConfigRequest + 8, // 1: cc.arduino.cli.commands.v1.DebugResponse.result:type_name -> cc.arduino.cli.commands.v1.DebugResponse.Result + 10, // 2: cc.arduino.cli.commands.v1.IsDebugSupportedRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 11, // 3: cc.arduino.cli.commands.v1.IsDebugSupportedRequest.port:type_name -> cc.arduino.cli.commands.v1.Port + 10, // 4: cc.arduino.cli.commands.v1.GetDebugConfigRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 11, // 5: cc.arduino.cli.commands.v1.GetDebugConfigRequest.port:type_name -> cc.arduino.cli.commands.v1.Port + 12, // 6: cc.arduino.cli.commands.v1.GetDebugConfigResponse.toolchain_configuration:type_name -> google.protobuf.Any + 12, // 7: cc.arduino.cli.commands.v1.GetDebugConfigResponse.server_configuration:type_name -> google.protobuf.Any + 9, // 8: cc.arduino.cli.commands.v1.GetDebugConfigResponse.custom_configs:type_name -> cc.arduino.cli.commands.v1.GetDebugConfigResponse.CustomConfigsEntry + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_debug_proto_init() } @@ -660,7 +937,7 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { } } file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDebugConfigRequest); i { + switch v := v.(*DebugResponse); i { case 0: return &v.state case 1: @@ -672,7 +949,7 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { } } file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DebugResponse); i { + switch v := v.(*IsDebugSupportedRequest); i { case 0: return &v.state case 1: @@ -684,7 +961,7 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { } } file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDebugConfigResponse); i { + switch v := v.(*IsDebugSupportedResponse); i { case 0: return &v.state case 1: @@ -696,7 +973,7 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { } } file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DebugGCCToolchainConfiguration); i { + switch v := v.(*GetDebugConfigRequest); i { case 0: return &v.state case 1: @@ -708,6 +985,30 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { } } file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDebugConfigResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DebugGCCToolchainConfiguration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DebugOpenOCDServerConfiguration); i { case 0: return &v.state @@ -719,6 +1020,22 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DebugResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*DebugResponse_Data)(nil), + (*DebugResponse_Result_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -726,7 +1043,7 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_debug_proto_rawDesc, NumEnums: 0, - NumMessages: 6, + NumMessages: 10, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/debug.proto b/rpc/cc/arduino/cli/commands/v1/debug.proto index b183abb0410..2f022fd7a35 100644 --- a/rpc/cc/arduino/cli/commands/v1/debug.proto +++ b/rpc/cc/arduino/cli/commands/v1/debug.proto @@ -43,6 +43,45 @@ message DebugRequest { bool send_interrupt = 3; } +// The streaming response may contain chunks of data from the debugger or an +// error. +message DebugResponse { + message Result { + // Incoming error output from the debugger tool. + string error = 1; + } + oneof message { + // Incoming data from the debugger tool. + bytes data = 1; + // Debugging result. + Result result = 2; + } +} + +message IsDebugSupportedRequest { + // Arduino Core Service instance from the `Init` response. + Instance instance = 1; + // Fully qualified board name of the board in use (e.g., + // `arduino:samd:mkr1000`). + string fqbn = 2; + // Port of the debugger (optional). + Port port = 3; + // Which GDB command interpreter to use. + string interpreter = 4; + // The programmer to use for debugging. + string programmer = 5; +} + +message IsDebugSupportedResponse { + // True if debugging is supported + bool debugging_supported = 1; + // This is the same FQBN given in the IsDebugSupportedRequest but cleaned + // up of the board options that do not affect the debugger configuration. + // It may be used by clients/IDE to group slightly different boards option + // selections under the same debug configuration. + string debug_fqbn = 2; +} + message GetDebugConfigRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; @@ -65,14 +104,6 @@ message GetDebugConfigRequest { string programmer = 9; } -// -message DebugResponse { - // Incoming data from the debugger tool. - bytes data = 1; - // Incoming error output from the debugger tool. - string error = 2; -} - message GetDebugConfigResponse { // The executable binary to debug string executable = 1; @@ -80,7 +111,7 @@ message GetDebugConfigResponse { string toolchain = 2; // The toolchain directory string toolchain_path = 3; - // The toolchain architecture prefix (for example "arm-none-eabi-") + // The toolchain architecture prefix (for example "arm-none-eabi") string toolchain_prefix = 4; // The GDB server type used to connect to the programmer/board (for example // "openocd") @@ -91,11 +122,15 @@ message GetDebugConfigResponse { google.protobuf.Any toolchain_configuration = 7; // Extra configuration parameters wrt GDB server google.protobuf.Any server_configuration = 8; - // cortex-debug custom JSON configuration, it is provided as is from - // the platform developers. - string cortex_debug_custom_json = 9; + // Custom debugger configurations (not handled directly by Arduino CLI but + // provided for 3rd party plugins/debuggers). The map keys identifies which + // 3rd party plugin/debugger is referred, the map string values contains a + // JSON configuration for it. + map<string, string> custom_configs = 9; // the SVD file to use string svd_file = 10; + // The programmer specified in the request + string programmer = 11; } // Configurations specific for the 'gcc' toolchain diff --git a/rpc/cc/arduino/cli/commands/v1/lib.pb.go b/rpc/cc/arduino/cli/commands/v1/lib.pb.go index 252d31df51e..4d5de28a1d0 100644 --- a/rpc/cc/arduino/cli/commands/v1/lib.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/lib.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.1 +// protoc v5.26.1 // source: cc/arduino/cli/commands/v1/lib.proto package commands @@ -313,8 +313,11 @@ type LibraryDownloadResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the library download. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` + // Types that are assignable to Message: + // + // *LibraryDownloadResponse_Progress + // *LibraryDownloadResponse_Result_ + Message isLibraryDownloadResponse_Message `protobuf_oneof:"message"` } func (x *LibraryDownloadResponse) Reset() { @@ -349,13 +352,45 @@ func (*LibraryDownloadResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{1} } +func (m *LibraryDownloadResponse) GetMessage() isLibraryDownloadResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *LibraryDownloadResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryDownloadResponse_Progress); ok { return x.Progress } return nil } +func (x *LibraryDownloadResponse) GetResult() *LibraryDownloadResponse_Result { + if x, ok := x.GetMessage().(*LibraryDownloadResponse_Result_); ok { + return x.Result + } + return nil +} + +type isLibraryDownloadResponse_Message interface { + isLibraryDownloadResponse_Message() +} + +type LibraryDownloadResponse_Progress struct { + // Progress of the library download. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type LibraryDownloadResponse_Result_ struct { + // Download result. + Result *LibraryDownloadResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*LibraryDownloadResponse_Progress) isLibraryDownloadResponse_Message() {} + +func (*LibraryDownloadResponse_Result_) isLibraryDownloadResponse_Message() {} + type LibraryInstallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -456,10 +491,12 @@ type LibraryInstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the library download. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` - // Description of the current stage of the installation. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *LibraryInstallResponse_Progress + // *LibraryInstallResponse_TaskProgress + // *LibraryInstallResponse_Result_ + Message isLibraryInstallResponse_Message `protobuf_oneof:"message"` } func (x *LibraryInstallResponse) Reset() { @@ -494,20 +531,59 @@ func (*LibraryInstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{3} } +func (m *LibraryInstallResponse) GetMessage() isLibraryInstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *LibraryInstallResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryInstallResponse_Progress); ok { return x.Progress } return nil } func (x *LibraryInstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryInstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *LibraryInstallResponse) GetResult() *LibraryInstallResponse_Result { + if x, ok := x.GetMessage().(*LibraryInstallResponse_Result_); ok { + return x.Result + } + return nil +} + +type isLibraryInstallResponse_Message interface { + isLibraryInstallResponse_Message() +} + +type LibraryInstallResponse_Progress struct { + // Progress of the library download. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type LibraryInstallResponse_TaskProgress struct { + // Description of the current stage of the installation. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type LibraryInstallResponse_Result_ struct { + // Download result. + Result *LibraryInstallResponse_Result `protobuf:"bytes,3,opt,name=result,proto3,oneof"` +} + +func (*LibraryInstallResponse_Progress) isLibraryInstallResponse_Message() {} + +func (*LibraryInstallResponse_TaskProgress) isLibraryInstallResponse_Message() {} + +func (*LibraryInstallResponse_Result_) isLibraryInstallResponse_Message() {} + type LibraryUpgradeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -580,10 +656,12 @@ type LibraryUpgradeResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the library download. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` - // Description of the current stage of the installation. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *LibraryUpgradeResponse_Progress + // *LibraryUpgradeResponse_TaskProgress + // *LibraryUpgradeResponse_Result_ + Message isLibraryUpgradeResponse_Message `protobuf_oneof:"message"` } func (x *LibraryUpgradeResponse) Reset() { @@ -618,20 +696,59 @@ func (*LibraryUpgradeResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{5} } +func (m *LibraryUpgradeResponse) GetMessage() isLibraryUpgradeResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *LibraryUpgradeResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryUpgradeResponse_Progress); ok { return x.Progress } return nil } func (x *LibraryUpgradeResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryUpgradeResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *LibraryUpgradeResponse) GetResult() *LibraryUpgradeResponse_Result { + if x, ok := x.GetMessage().(*LibraryUpgradeResponse_Result_); ok { + return x.Result + } + return nil +} + +type isLibraryUpgradeResponse_Message interface { + isLibraryUpgradeResponse_Message() +} + +type LibraryUpgradeResponse_Progress struct { + // Progress of the library download. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type LibraryUpgradeResponse_TaskProgress struct { + // Description of the current stage of the installation. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type LibraryUpgradeResponse_Result_ struct { + // Download result. + Result *LibraryUpgradeResponse_Result `protobuf:"bytes,3,opt,name=result,proto3,oneof"` +} + +func (*LibraryUpgradeResponse_Progress) isLibraryUpgradeResponse_Message() {} + +func (*LibraryUpgradeResponse_TaskProgress) isLibraryUpgradeResponse_Message() {} + +func (*LibraryUpgradeResponse_Result_) isLibraryUpgradeResponse_Message() {} + type LibraryUninstallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -703,8 +820,11 @@ type LibraryUninstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Description of the current stage of the uninstallation. - TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *LibraryUninstallResponse_TaskProgress + // *LibraryUninstallResponse_Result_ + Message isLibraryUninstallResponse_Message `protobuf_oneof:"message"` } func (x *LibraryUninstallResponse) Reset() { @@ -739,13 +859,45 @@ func (*LibraryUninstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{7} } +func (m *LibraryUninstallResponse) GetMessage() isLibraryUninstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *LibraryUninstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryUninstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *LibraryUninstallResponse) GetResult() *LibraryUninstallResponse_Result { + if x, ok := x.GetMessage().(*LibraryUninstallResponse_Result_); ok { + return x.Result + } + return nil +} + +type isLibraryUninstallResponse_Message interface { + isLibraryUninstallResponse_Message() +} + +type LibraryUninstallResponse_TaskProgress struct { + // Description of the current stage of the uninstallation. + TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type LibraryUninstallResponse_Result_ struct { + // Uninstall result. + Result *LibraryUninstallResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*LibraryUninstallResponse_TaskProgress) isLibraryUninstallResponse_Message() {} + +func (*LibraryUninstallResponse_Result_) isLibraryUninstallResponse_Message() {} + type LibraryUpgradeAllRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -799,10 +951,12 @@ type LibraryUpgradeAllResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the downloads of files needed for the upgrades. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` - // Description of the current stage of the upgrade. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *LibraryUpgradeAllResponse_Progress + // *LibraryUpgradeAllResponse_TaskProgress + // *LibraryUpgradeAllResponse_Result_ + Message isLibraryUpgradeAllResponse_Message `protobuf_oneof:"message"` } func (x *LibraryUpgradeAllResponse) Reset() { @@ -837,20 +991,59 @@ func (*LibraryUpgradeAllResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{9} } +func (m *LibraryUpgradeAllResponse) GetMessage() isLibraryUpgradeAllResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *LibraryUpgradeAllResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryUpgradeAllResponse_Progress); ok { return x.Progress } return nil } func (x *LibraryUpgradeAllResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryUpgradeAllResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *LibraryUpgradeAllResponse) GetResult() *LibraryUpgradeAllResponse_Result { + if x, ok := x.GetMessage().(*LibraryUpgradeAllResponse_Result_); ok { + return x.Result + } + return nil +} + +type isLibraryUpgradeAllResponse_Message interface { + isLibraryUpgradeAllResponse_Message() +} + +type LibraryUpgradeAllResponse_Progress struct { + // Progress of the downloads of files needed for the upgrades. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type LibraryUpgradeAllResponse_TaskProgress struct { + // Description of the current stage of the upgrade. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type LibraryUpgradeAllResponse_Result_ struct { + // Upgrade result. + Result *LibraryUpgradeAllResponse_Result `protobuf:"bytes,3,opt,name=result,proto3,oneof"` +} + +func (*LibraryUpgradeAllResponse_Progress) isLibraryUpgradeAllResponse_Message() {} + +func (*LibraryUpgradeAllResponse_TaskProgress) isLibraryUpgradeAllResponse_Message() {} + +func (*LibraryUpgradeAllResponse_Result_) isLibraryUpgradeAllResponse_Message() {} + type LibraryResolveDependenciesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -863,6 +1056,9 @@ type LibraryResolveDependenciesRequest struct { // The version of the library to check dependencies of. If no version is // specified, dependencies of the newest version will be listed. Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + // If true the computed solution will try to keep exising libraries + // at their current version. + DoNotUpdateInstalledLibraries bool `protobuf:"varint,4,opt,name=do_not_update_installed_libraries,json=doNotUpdateInstalledLibraries,proto3" json:"do_not_update_installed_libraries,omitempty"` } func (x *LibraryResolveDependenciesRequest) Reset() { @@ -918,6 +1114,13 @@ func (x *LibraryResolveDependenciesRequest) GetVersion() string { return "" } +func (x *LibraryResolveDependenciesRequest) GetDoNotUpdateInstalledLibraries() bool { + if x != nil { + return x.DoNotUpdateInstalledLibraries + } + return false +} + type LibraryResolveDependenciesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1039,15 +1242,11 @@ type LibrarySearchRequest struct { // Arduino Core Service instance from the `Init` response. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - // Deprecated. Use search_args instead. - // - // Deprecated: Marked as deprecated in cc/arduino/cli/commands/v1/lib.proto. - Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` // Set to true to not populate the releases field in the response (may save a // lot of bandwidth/CPU). - OmitReleasesDetails bool `protobuf:"varint,3,opt,name=omit_releases_details,json=omitReleasesDetails,proto3" json:"omit_releases_details,omitempty"` + OmitReleasesDetails bool `protobuf:"varint,2,opt,name=omit_releases_details,json=omitReleasesDetails,proto3" json:"omit_releases_details,omitempty"` // Keywords for the search. - SearchArgs string `protobuf:"bytes,4,opt,name=search_args,json=searchArgs,proto3" json:"search_args,omitempty"` + SearchArgs string `protobuf:"bytes,3,opt,name=search_args,json=searchArgs,proto3" json:"search_args,omitempty"` } func (x *LibrarySearchRequest) Reset() { @@ -1089,14 +1288,6 @@ func (x *LibrarySearchRequest) GetInstance() *Instance { return nil } -// Deprecated: Marked as deprecated in cc/arduino/cli/commands/v1/lib.proto. -func (x *LibrarySearchRequest) GetQuery() string { - if x != nil { - return x.Query - } - return "" -} - func (x *LibrarySearchRequest) GetOmitReleasesDetails() bool { if x != nil { return x.OmitReleasesDetails @@ -2092,8 +2283,11 @@ type ZipLibraryInstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Description of the current stage of the installation. - TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *ZipLibraryInstallResponse_TaskProgress + // *ZipLibraryInstallResponse_Result_ + Message isZipLibraryInstallResponse_Message `protobuf_oneof:"message"` } func (x *ZipLibraryInstallResponse) Reset() { @@ -2128,13 +2322,45 @@ func (*ZipLibraryInstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{24} } +func (m *ZipLibraryInstallResponse) GetMessage() isZipLibraryInstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *ZipLibraryInstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*ZipLibraryInstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *ZipLibraryInstallResponse) GetResult() *ZipLibraryInstallResponse_Result { + if x, ok := x.GetMessage().(*ZipLibraryInstallResponse_Result_); ok { + return x.Result + } + return nil +} + +type isZipLibraryInstallResponse_Message interface { + isZipLibraryInstallResponse_Message() +} + +type ZipLibraryInstallResponse_TaskProgress struct { + // Description of the current stage of the installation. + TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type ZipLibraryInstallResponse_Result_ struct { + // Installation result. + Result *ZipLibraryInstallResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*ZipLibraryInstallResponse_TaskProgress) isZipLibraryInstallResponse_Message() {} + +func (*ZipLibraryInstallResponse_Result_) isZipLibraryInstallResponse_Message() {} + type GitLibraryInstallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2207,8 +2433,11 @@ type GitLibraryInstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Description of the current stage of the installation. - TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *GitLibraryInstallResponse_TaskProgress + // *GitLibraryInstallResponse_Result_ + Message isGitLibraryInstallResponse_Message `protobuf_oneof:"message"` } func (x *GitLibraryInstallResponse) Reset() { @@ -2243,420 +2472,770 @@ func (*GitLibraryInstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{26} } +func (m *GitLibraryInstallResponse) GetMessage() isGitLibraryInstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *GitLibraryInstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*GitLibraryInstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } -var File_cc_arduino_cli_commands_v1_lib_proto protoreflect.FileDescriptor +func (x *GitLibraryInstallResponse) GetResult() *GitLibraryInstallResponse_Result { + if x, ok := x.GetMessage().(*GitLibraryInstallResponse_Result_); ok { + return x.Result + } + return nil +} -var file_cc_arduino_cli_commands_v1_lib_proto_rawDesc = []byte{ - 0x0a, 0x24, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, - 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x62, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x1a, 0x27, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, - 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x88, 0x01, 0x0a, 0x16, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x63, 0x0a, 0x17, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, - 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0xa2, 0x02, 0x0a, 0x15, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x44, 0x65, 0x70, 0x73, 0x12, 0x21, - 0x0a, 0x0c, 0x6e, 0x6f, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0xb1, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, - 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x44, 0x65, 0x70, 0x73, 0x22, 0xb1, 0x01, - 0x0a, 0x16, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x22, 0x89, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x69, 0x0a, - 0x18, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, - 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x5c, 0x0a, 0x18, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, - 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x93, 0x01, - 0x0a, 0x21, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x22, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, - 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x2b, 0x0a, - 0x11, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x22, 0xc7, 0x01, 0x0a, 0x14, 0x4c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x32, 0x0a, 0x15, 0x6f, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, - 0x6f, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x72, - 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x41, 0x72, 0x67, 0x73, 0x22, 0xab, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, - 0x0a, 0x09, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x09, - 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0xd8, 0x02, 0x0a, 0x0f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x64, 0x4c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x55, 0x0a, 0x08, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x73, 0x12, 0x42, 0x0a, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x06, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x67, 0x0a, 0x0d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf4, 0x03, - 0x0a, 0x0e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x18, 0x0a, 0x07, - 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, - 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, - 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4a, - 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, - 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x73, 0x12, 0x51, 0x0a, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, - 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x22, 0x56, 0x0a, 0x11, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, - 0x12, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, - 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x22, 0x9e, 0x01, 0x0a, - 0x10, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x75, 0x72, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x5f, 0x66, - 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, - 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0xae, 0x01, - 0x0a, 0x12, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, - 0x62, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x74, - 0x0a, 0x13, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x13, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x52, 0x12, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x69, 0x65, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x3d, 0x0a, 0x07, 0x6c, 0x69, 0x62, - 0x72, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, - 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0xf8, - 0x08, 0x0a, 0x07, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, - 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, - 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x69, - 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x44, 0x69, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x69, - 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, - 0x69, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x69, - 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x44, 0x69, 0x72, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x64, 0x6f, 0x74, 0x5f, 0x61, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, - 0x61, 0x67, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x6f, 0x74, 0x41, 0x4c, - 0x69, 0x6e, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x64, 0x5f, 0x66, - 0x6c, 0x61, 0x67, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x64, 0x46, 0x6c, - 0x61, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x08, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x06, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x19, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x06, 0x6c, - 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x5f, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x12, 0x60, - 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x57, 0x69, 0x74, 0x68, - 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x44, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, - 0x69, 0x62, 0x6c, 0x65, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8e, 0x01, 0x0a, 0x18, 0x5a, 0x69, - 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, - 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x22, 0x6a, 0x0a, 0x19, 0x5a, 0x69, - 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x18, 0x47, 0x69, 0x74, 0x4c, 0x69, - 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x22, 0x6a, 0x0a, 0x19, 0x47, 0x69, 0x74, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x2a, 0x61, 0x0a, 0x16, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x1d, 0x4c, - 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x4c, - 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x00, 0x12, 0x24, - 0x0a, 0x20, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, - 0x4c, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, - 0x49, 0x4e, 0x10, 0x01, 0x2a, 0x5a, 0x0a, 0x13, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x1c, 0x4c, - 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, - 0x1d, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, - 0x2a, 0x46, 0x0a, 0x0d, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x61, 0x79, 0x6f, 0x75, - 0x74, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x41, 0x59, - 0x4f, 0x55, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x54, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x49, - 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x41, 0x59, 0x4f, 0x55, 0x54, 0x5f, 0x52, 0x45, 0x43, - 0x55, 0x52, 0x53, 0x49, 0x56, 0x45, 0x10, 0x01, 0x2a, 0xc3, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x62, - 0x72, 0x61, 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x18, - 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, - 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, - 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, - 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, - 0x52, 0x4d, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x30, 0x0a, 0x2c, - 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x52, 0x45, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x43, 0x45, 0x44, 0x5f, 0x50, 0x4c, 0x41, 0x54, - 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x03, 0x12, 0x1e, - 0x0a, 0x1a, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x10, 0x04, 0x42, 0x48, - 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, - 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +type isGitLibraryInstallResponse_Message interface { + isGitLibraryInstallResponse_Message() } -var ( - file_cc_arduino_cli_commands_v1_lib_proto_rawDescOnce sync.Once - file_cc_arduino_cli_commands_v1_lib_proto_rawDescData = file_cc_arduino_cli_commands_v1_lib_proto_rawDesc -) +type GitLibraryInstallResponse_TaskProgress struct { + // Description of the current stage of the installation. + TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} -func file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP() []byte { - file_cc_arduino_cli_commands_v1_lib_proto_rawDescOnce.Do(func() { - file_cc_arduino_cli_commands_v1_lib_proto_rawDescData = protoimpl.X.CompressGZIP(file_cc_arduino_cli_commands_v1_lib_proto_rawDescData) - }) - return file_cc_arduino_cli_commands_v1_lib_proto_rawDescData +type GitLibraryInstallResponse_Result_ struct { + // Installation result. + Result *GitLibraryInstallResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` } -var file_cc_arduino_cli_commands_v1_lib_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_cc_arduino_cli_commands_v1_lib_proto_msgTypes = make([]protoimpl.MessageInfo, 30) -var file_cc_arduino_cli_commands_v1_lib_proto_goTypes = []interface{}{ +func (*GitLibraryInstallResponse_TaskProgress) isGitLibraryInstallResponse_Message() {} + +func (*GitLibraryInstallResponse_Result_) isGitLibraryInstallResponse_Message() {} + +type LibraryDownloadResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LibraryDownloadResponse_Result) Reset() { + *x = LibraryDownloadResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LibraryDownloadResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LibraryDownloadResponse_Result) ProtoMessage() {} + +func (x *LibraryDownloadResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LibraryDownloadResponse_Result.ProtoReflect.Descriptor instead. +func (*LibraryDownloadResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{1, 0} +} + +type LibraryInstallResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LibraryInstallResponse_Result) Reset() { + *x = LibraryInstallResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LibraryInstallResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LibraryInstallResponse_Result) ProtoMessage() {} + +func (x *LibraryInstallResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LibraryInstallResponse_Result.ProtoReflect.Descriptor instead. +func (*LibraryInstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{3, 0} +} + +type LibraryUpgradeResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LibraryUpgradeResponse_Result) Reset() { + *x = LibraryUpgradeResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LibraryUpgradeResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LibraryUpgradeResponse_Result) ProtoMessage() {} + +func (x *LibraryUpgradeResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LibraryUpgradeResponse_Result.ProtoReflect.Descriptor instead. +func (*LibraryUpgradeResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{5, 0} +} + +type LibraryUninstallResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LibraryUninstallResponse_Result) Reset() { + *x = LibraryUninstallResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LibraryUninstallResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LibraryUninstallResponse_Result) ProtoMessage() {} + +func (x *LibraryUninstallResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LibraryUninstallResponse_Result.ProtoReflect.Descriptor instead. +func (*LibraryUninstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{7, 0} +} + +type LibraryUpgradeAllResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LibraryUpgradeAllResponse_Result) Reset() { + *x = LibraryUpgradeAllResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LibraryUpgradeAllResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LibraryUpgradeAllResponse_Result) ProtoMessage() {} + +func (x *LibraryUpgradeAllResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LibraryUpgradeAllResponse_Result.ProtoReflect.Descriptor instead. +func (*LibraryUpgradeAllResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{9, 0} +} + +type ZipLibraryInstallResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ZipLibraryInstallResponse_Result) Reset() { + *x = ZipLibraryInstallResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZipLibraryInstallResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZipLibraryInstallResponse_Result) ProtoMessage() {} + +func (x *ZipLibraryInstallResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ZipLibraryInstallResponse_Result.ProtoReflect.Descriptor instead. +func (*ZipLibraryInstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{24, 0} +} + +type GitLibraryInstallResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GitLibraryInstallResponse_Result) Reset() { + *x = GitLibraryInstallResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GitLibraryInstallResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GitLibraryInstallResponse_Result) ProtoMessage() {} + +func (x *GitLibraryInstallResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GitLibraryInstallResponse_Result.ProtoReflect.Descriptor instead. +func (*GitLibraryInstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{26, 0} +} + +var File_cc_arduino_cli_commands_v1_lib_proto protoreflect.FileDescriptor + +var file_cc_arduino_cli_commands_v1_lib_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x62, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x1a, 0x27, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, + 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x88, 0x01, 0x0a, 0x16, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd0, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x54, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa2, 0x02, 0x0a, 0x15, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x44, 0x65, 0x70, 0x73, 0x12, 0x21, 0x0a, 0x0c, + 0x6e, 0x6f, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, + 0x5d, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9f, + 0x02, 0x0a, 0x16, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x53, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x86, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, + 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x44, 0x65, 0x70, 0x73, 0x22, 0x9f, 0x02, 0x0a, 0x16, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x53, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x89, 0x01, 0x0a, 0x17, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd7, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x5c, 0x0a, 0x18, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, + 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, + 0xa5, 0x02, 0x0a, 0x19, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, + 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, + 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, + 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, + 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x56, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xdd, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, + 0x21, 0x64, 0x6f, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x64, 0x6f, 0x4e, 0x6f, 0x74, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x22, 0x7d, 0x0a, 0x22, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, + 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, + 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x22, 0xad, + 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x6d, 0x69, + 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6f, 0x6d, 0x69, 0x74, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1f, 0x0a, + 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x72, 0x67, 0x73, 0x22, 0xab, + 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x09, 0x6c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, + 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x09, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, + 0x69, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd8, 0x02, 0x0a, + 0x0f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x55, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x06, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, + 0x2d, 0x0a, 0x12, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x67, + 0x0a, 0x0d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x40, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf4, 0x03, 0x0a, 0x0e, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, + 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x61, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, + 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0d, + 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x2b, + 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x73, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x0c, 0x64, + 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, + 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x56, + 0x0a, 0x11, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x6e, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x10, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, + 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x29, 0x0a, + 0x10, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, + 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0xae, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, + 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, + 0x6c, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x74, 0x0a, 0x13, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5d, 0x0a, 0x13, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x62, + 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x22, 0x97, + 0x01, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x12, 0x3d, 0x0a, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, + 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0xf8, 0x08, 0x0a, 0x07, 0x4c, 0x69, 0x62, + 0x72, 0x61, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, + 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, + 0x73, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, + 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x44, 0x69, 0x72, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x69, 0x72, 0x12, 0x1f, 0x0a, 0x0b, + 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x69, 0x72, 0x12, 0x2d, 0x0a, + 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0d, + 0x64, 0x6f, 0x74, 0x5f, 0x61, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x6f, 0x74, 0x41, 0x4c, 0x69, 0x6e, 0x6b, 0x61, 0x67, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x64, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x69, 0x73, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x53, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x17, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x06, + 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, + 0x79, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, + 0x18, 0x1b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, + 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x12, 0x60, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x18, 0x1c, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x57, 0x69, 0x74, 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, + 0x5f, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x1d, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, + 0x74, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x41, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x8e, 0x01, 0x0a, 0x18, 0x5a, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x22, 0xd9, 0x01, 0x0a, 0x19, 0x5a, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x56, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x5a, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x8c, 0x01, 0x0a, 0x18, 0x47, 0x69, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x22, + 0xd9, 0x01, 0x0a, 0x19, 0x47, 0x69, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, + 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, + 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x56, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x4c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0x61, 0x0a, 0x16, 0x4c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x1d, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, + 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x4c, 0x49, 0x42, 0x52, + 0x41, 0x52, 0x59, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x4c, 0x4f, 0x43, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x01, 0x2a, 0x5a, + 0x0a, 0x13, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x1c, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, + 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, + 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x4c, 0x49, 0x42, 0x52, 0x41, + 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x2a, 0x46, 0x0a, 0x0d, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x17, 0x0a, 0x13, 0x4c, + 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x41, 0x59, 0x4f, 0x55, 0x54, 0x5f, 0x46, 0x4c, + 0x41, 0x54, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, + 0x4c, 0x41, 0x59, 0x4f, 0x55, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x55, 0x52, 0x53, 0x49, 0x56, 0x45, + 0x10, 0x01, 0x2a, 0xc3, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, + 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, + 0x49, 0x4e, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, + 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, + 0x25, 0x0a, 0x21, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x42, 0x55, 0x49, + 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x30, 0x0a, 0x2c, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, + 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x46, 0x45, 0x52, + 0x45, 0x4e, 0x43, 0x45, 0x44, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x42, + 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x4c, 0x49, 0x42, 0x52, + 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4d, + 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x10, 0x04, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, + 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_cc_arduino_cli_commands_v1_lib_proto_rawDescOnce sync.Once + file_cc_arduino_cli_commands_v1_lib_proto_rawDescData = file_cc_arduino_cli_commands_v1_lib_proto_rawDesc +) + +func file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP() []byte { + file_cc_arduino_cli_commands_v1_lib_proto_rawDescOnce.Do(func() { + file_cc_arduino_cli_commands_v1_lib_proto_rawDescData = protoimpl.X.CompressGZIP(file_cc_arduino_cli_commands_v1_lib_proto_rawDescData) + }) + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescData +} + +var file_cc_arduino_cli_commands_v1_lib_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_cc_arduino_cli_commands_v1_lib_proto_msgTypes = make([]protoimpl.MessageInfo, 37) +var file_cc_arduino_cli_commands_v1_lib_proto_goTypes = []interface{}{ (LibraryInstallLocation)(0), // 0: cc.arduino.cli.commands.v1.LibraryInstallLocation (LibrarySearchStatus)(0), // 1: cc.arduino.cli.commands.v1.LibrarySearchStatus (LibraryLayout)(0), // 2: cc.arduino.cli.commands.v1.LibraryLayout @@ -2688,55 +3267,69 @@ var file_cc_arduino_cli_commands_v1_lib_proto_goTypes = []interface{}{ (*ZipLibraryInstallResponse)(nil), // 28: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse (*GitLibraryInstallRequest)(nil), // 29: cc.arduino.cli.commands.v1.GitLibraryInstallRequest (*GitLibraryInstallResponse)(nil), // 30: cc.arduino.cli.commands.v1.GitLibraryInstallResponse - nil, // 31: cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry - nil, // 32: cc.arduino.cli.commands.v1.Library.PropertiesEntry - nil, // 33: cc.arduino.cli.commands.v1.Library.CompatibleWithEntry - (*Instance)(nil), // 34: cc.arduino.cli.commands.v1.Instance - (*DownloadProgress)(nil), // 35: cc.arduino.cli.commands.v1.DownloadProgress - (*TaskProgress)(nil), // 36: cc.arduino.cli.commands.v1.TaskProgress + (*LibraryDownloadResponse_Result)(nil), // 31: cc.arduino.cli.commands.v1.LibraryDownloadResponse.Result + (*LibraryInstallResponse_Result)(nil), // 32: cc.arduino.cli.commands.v1.LibraryInstallResponse.Result + (*LibraryUpgradeResponse_Result)(nil), // 33: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.Result + (*LibraryUninstallResponse_Result)(nil), // 34: cc.arduino.cli.commands.v1.LibraryUninstallResponse.Result + (*LibraryUpgradeAllResponse_Result)(nil), // 35: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.Result + nil, // 36: cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry + nil, // 37: cc.arduino.cli.commands.v1.Library.PropertiesEntry + nil, // 38: cc.arduino.cli.commands.v1.Library.CompatibleWithEntry + (*ZipLibraryInstallResponse_Result)(nil), // 39: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse.Result + (*GitLibraryInstallResponse_Result)(nil), // 40: cc.arduino.cli.commands.v1.GitLibraryInstallResponse.Result + (*Instance)(nil), // 41: cc.arduino.cli.commands.v1.Instance + (*DownloadProgress)(nil), // 42: cc.arduino.cli.commands.v1.DownloadProgress + (*TaskProgress)(nil), // 43: cc.arduino.cli.commands.v1.TaskProgress } var file_cc_arduino_cli_commands_v1_lib_proto_depIdxs = []int32{ - 34, // 0: cc.arduino.cli.commands.v1.LibraryDownloadRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 35, // 1: cc.arduino.cli.commands.v1.LibraryDownloadResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 34, // 2: cc.arduino.cli.commands.v1.LibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 0, // 3: cc.arduino.cli.commands.v1.LibraryInstallRequest.install_location:type_name -> cc.arduino.cli.commands.v1.LibraryInstallLocation - 35, // 4: cc.arduino.cli.commands.v1.LibraryInstallResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 36, // 5: cc.arduino.cli.commands.v1.LibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 34, // 6: cc.arduino.cli.commands.v1.LibraryUpgradeRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 35, // 7: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 36, // 8: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 34, // 9: cc.arduino.cli.commands.v1.LibraryUninstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 36, // 10: cc.arduino.cli.commands.v1.LibraryUninstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 34, // 11: cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 35, // 12: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 36, // 13: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 34, // 14: cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 16, // 15: cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse.dependencies:type_name -> cc.arduino.cli.commands.v1.LibraryDependencyStatus - 34, // 16: cc.arduino.cli.commands.v1.LibrarySearchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 19, // 17: cc.arduino.cli.commands.v1.LibrarySearchResponse.libraries:type_name -> cc.arduino.cli.commands.v1.SearchedLibrary - 1, // 18: cc.arduino.cli.commands.v1.LibrarySearchResponse.status:type_name -> cc.arduino.cli.commands.v1.LibrarySearchStatus - 31, // 19: cc.arduino.cli.commands.v1.SearchedLibrary.releases:type_name -> cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry - 20, // 20: cc.arduino.cli.commands.v1.SearchedLibrary.latest:type_name -> cc.arduino.cli.commands.v1.LibraryRelease - 22, // 21: cc.arduino.cli.commands.v1.LibraryRelease.resources:type_name -> cc.arduino.cli.commands.v1.DownloadResource - 21, // 22: cc.arduino.cli.commands.v1.LibraryRelease.dependencies:type_name -> cc.arduino.cli.commands.v1.LibraryDependency - 34, // 23: cc.arduino.cli.commands.v1.LibraryListRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 25, // 24: cc.arduino.cli.commands.v1.LibraryListResponse.installed_libraries:type_name -> cc.arduino.cli.commands.v1.InstalledLibrary - 26, // 25: cc.arduino.cli.commands.v1.InstalledLibrary.library:type_name -> cc.arduino.cli.commands.v1.Library - 20, // 26: cc.arduino.cli.commands.v1.InstalledLibrary.release:type_name -> cc.arduino.cli.commands.v1.LibraryRelease - 32, // 27: cc.arduino.cli.commands.v1.Library.properties:type_name -> cc.arduino.cli.commands.v1.Library.PropertiesEntry - 3, // 28: cc.arduino.cli.commands.v1.Library.location:type_name -> cc.arduino.cli.commands.v1.LibraryLocation - 2, // 29: cc.arduino.cli.commands.v1.Library.layout:type_name -> cc.arduino.cli.commands.v1.LibraryLayout - 33, // 30: cc.arduino.cli.commands.v1.Library.compatible_with:type_name -> cc.arduino.cli.commands.v1.Library.CompatibleWithEntry - 34, // 31: cc.arduino.cli.commands.v1.ZipLibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 36, // 32: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 34, // 33: cc.arduino.cli.commands.v1.GitLibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 36, // 34: cc.arduino.cli.commands.v1.GitLibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 20, // 35: cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry.value:type_name -> cc.arduino.cli.commands.v1.LibraryRelease - 36, // [36:36] is the sub-list for method output_type - 36, // [36:36] is the sub-list for method input_type - 36, // [36:36] is the sub-list for extension type_name - 36, // [36:36] is the sub-list for extension extendee - 0, // [0:36] is the sub-list for field type_name + 41, // 0: cc.arduino.cli.commands.v1.LibraryDownloadRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 42, // 1: cc.arduino.cli.commands.v1.LibraryDownloadResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 31, // 2: cc.arduino.cli.commands.v1.LibraryDownloadResponse.result:type_name -> cc.arduino.cli.commands.v1.LibraryDownloadResponse.Result + 41, // 3: cc.arduino.cli.commands.v1.LibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 0, // 4: cc.arduino.cli.commands.v1.LibraryInstallRequest.install_location:type_name -> cc.arduino.cli.commands.v1.LibraryInstallLocation + 42, // 5: cc.arduino.cli.commands.v1.LibraryInstallResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 43, // 6: cc.arduino.cli.commands.v1.LibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 32, // 7: cc.arduino.cli.commands.v1.LibraryInstallResponse.result:type_name -> cc.arduino.cli.commands.v1.LibraryInstallResponse.Result + 41, // 8: cc.arduino.cli.commands.v1.LibraryUpgradeRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 42, // 9: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 43, // 10: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 33, // 11: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.result:type_name -> cc.arduino.cli.commands.v1.LibraryUpgradeResponse.Result + 41, // 12: cc.arduino.cli.commands.v1.LibraryUninstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 43, // 13: cc.arduino.cli.commands.v1.LibraryUninstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 34, // 14: cc.arduino.cli.commands.v1.LibraryUninstallResponse.result:type_name -> cc.arduino.cli.commands.v1.LibraryUninstallResponse.Result + 41, // 15: cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 42, // 16: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 43, // 17: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 35, // 18: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.result:type_name -> cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.Result + 41, // 19: cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 16, // 20: cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse.dependencies:type_name -> cc.arduino.cli.commands.v1.LibraryDependencyStatus + 41, // 21: cc.arduino.cli.commands.v1.LibrarySearchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 19, // 22: cc.arduino.cli.commands.v1.LibrarySearchResponse.libraries:type_name -> cc.arduino.cli.commands.v1.SearchedLibrary + 1, // 23: cc.arduino.cli.commands.v1.LibrarySearchResponse.status:type_name -> cc.arduino.cli.commands.v1.LibrarySearchStatus + 36, // 24: cc.arduino.cli.commands.v1.SearchedLibrary.releases:type_name -> cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry + 20, // 25: cc.arduino.cli.commands.v1.SearchedLibrary.latest:type_name -> cc.arduino.cli.commands.v1.LibraryRelease + 22, // 26: cc.arduino.cli.commands.v1.LibraryRelease.resources:type_name -> cc.arduino.cli.commands.v1.DownloadResource + 21, // 27: cc.arduino.cli.commands.v1.LibraryRelease.dependencies:type_name -> cc.arduino.cli.commands.v1.LibraryDependency + 41, // 28: cc.arduino.cli.commands.v1.LibraryListRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 25, // 29: cc.arduino.cli.commands.v1.LibraryListResponse.installed_libraries:type_name -> cc.arduino.cli.commands.v1.InstalledLibrary + 26, // 30: cc.arduino.cli.commands.v1.InstalledLibrary.library:type_name -> cc.arduino.cli.commands.v1.Library + 20, // 31: cc.arduino.cli.commands.v1.InstalledLibrary.release:type_name -> cc.arduino.cli.commands.v1.LibraryRelease + 37, // 32: cc.arduino.cli.commands.v1.Library.properties:type_name -> cc.arduino.cli.commands.v1.Library.PropertiesEntry + 3, // 33: cc.arduino.cli.commands.v1.Library.location:type_name -> cc.arduino.cli.commands.v1.LibraryLocation + 2, // 34: cc.arduino.cli.commands.v1.Library.layout:type_name -> cc.arduino.cli.commands.v1.LibraryLayout + 38, // 35: cc.arduino.cli.commands.v1.Library.compatible_with:type_name -> cc.arduino.cli.commands.v1.Library.CompatibleWithEntry + 41, // 36: cc.arduino.cli.commands.v1.ZipLibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 43, // 37: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 39, // 38: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse.result:type_name -> cc.arduino.cli.commands.v1.ZipLibraryInstallResponse.Result + 41, // 39: cc.arduino.cli.commands.v1.GitLibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 43, // 40: cc.arduino.cli.commands.v1.GitLibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 40, // 41: cc.arduino.cli.commands.v1.GitLibraryInstallResponse.result:type_name -> cc.arduino.cli.commands.v1.GitLibraryInstallResponse.Result + 20, // 42: cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry.value:type_name -> cc.arduino.cli.commands.v1.LibraryRelease + 43, // [43:43] is the sub-list for method output_type + 43, // [43:43] is the sub-list for method input_type + 43, // [43:43] is the sub-list for extension type_name + 43, // [43:43] is the sub-list for extension extendee + 0, // [0:43] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_lib_proto_init() } @@ -3070,6 +3663,121 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LibraryDownloadResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LibraryInstallResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LibraryUpgradeResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LibraryUninstallResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LibraryUpgradeAllResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZipLibraryInstallResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GitLibraryInstallResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*LibraryDownloadResponse_Progress)(nil), + (*LibraryDownloadResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[3].OneofWrappers = []interface{}{ + (*LibraryInstallResponse_Progress)(nil), + (*LibraryInstallResponse_TaskProgress)(nil), + (*LibraryInstallResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*LibraryUpgradeResponse_Progress)(nil), + (*LibraryUpgradeResponse_TaskProgress)(nil), + (*LibraryUpgradeResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*LibraryUninstallResponse_TaskProgress)(nil), + (*LibraryUninstallResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[9].OneofWrappers = []interface{}{ + (*LibraryUpgradeAllResponse_Progress)(nil), + (*LibraryUpgradeAllResponse_TaskProgress)(nil), + (*LibraryUpgradeAllResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[24].OneofWrappers = []interface{}{ + (*ZipLibraryInstallResponse_TaskProgress)(nil), + (*ZipLibraryInstallResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[26].OneofWrappers = []interface{}{ + (*GitLibraryInstallResponse_TaskProgress)(nil), + (*GitLibraryInstallResponse_Result_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -3077,7 +3785,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_lib_proto_rawDesc, NumEnums: 4, - NumMessages: 30, + NumMessages: 37, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/lib.proto b/rpc/cc/arduino/cli/commands/v1/lib.proto index dffcf886153..17e157f6b7c 100644 --- a/rpc/cc/arduino/cli/commands/v1/lib.proto +++ b/rpc/cc/arduino/cli/commands/v1/lib.proto @@ -31,8 +31,15 @@ message LibraryDownloadRequest { } message LibraryDownloadResponse { - // Progress of the library download. - DownloadProgress progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the library download. + DownloadProgress progress = 1; + // Download result. + Result result = 2; + } } message LibraryInstallRequest { @@ -61,10 +68,17 @@ enum LibraryInstallLocation { } message LibraryInstallResponse { - // Progress of the library download. - DownloadProgress progress = 1; - // Description of the current stage of the installation. - TaskProgress task_progress = 2; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the library download. + DownloadProgress progress = 1; + // Description of the current stage of the installation. + TaskProgress task_progress = 2; + // Download result. + Result result = 3; + } } message LibraryUpgradeRequest { @@ -78,10 +92,17 @@ message LibraryUpgradeRequest { } message LibraryUpgradeResponse { - // Progress of the library download. - DownloadProgress progress = 1; - // Description of the current stage of the installation. - TaskProgress task_progress = 2; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the library download. + DownloadProgress progress = 1; + // Description of the current stage of the installation. + TaskProgress task_progress = 2; + // Download result. + Result result = 3; + } } message LibraryUninstallRequest { @@ -94,8 +115,15 @@ message LibraryUninstallRequest { } message LibraryUninstallResponse { - // Description of the current stage of the uninstallation. - TaskProgress task_progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Description of the current stage of the uninstallation. + TaskProgress task_progress = 1; + // Uninstall result. + Result result = 2; + } } message LibraryUpgradeAllRequest { @@ -104,10 +132,17 @@ message LibraryUpgradeAllRequest { } message LibraryUpgradeAllResponse { - // Progress of the downloads of files needed for the upgrades. - DownloadProgress progress = 1; - // Description of the current stage of the upgrade. - TaskProgress task_progress = 2; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the downloads of files needed for the upgrades. + DownloadProgress progress = 1; + // Description of the current stage of the upgrade. + TaskProgress task_progress = 2; + // Upgrade result. + Result result = 3; + } } message LibraryResolveDependenciesRequest { @@ -118,6 +153,9 @@ message LibraryResolveDependenciesRequest { // The version of the library to check dependencies of. If no version is // specified, dependencies of the newest version will be listed. string version = 3; + // If true the computed solution will try to keep exising libraries + // at their current version. + bool do_not_update_installed_libraries = 4; } message LibraryResolveDependenciesResponse { @@ -137,13 +175,11 @@ message LibraryDependencyStatus { message LibrarySearchRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; - // Deprecated. Use search_args instead. - string query = 2 [ deprecated = true ]; // Set to true to not populate the releases field in the response (may save a // lot of bandwidth/CPU). - bool omit_releases_details = 3; + bool omit_releases_details = 2; // Keywords for the search. - string search_args = 4; + string search_args = 3; } enum LibrarySearchStatus { @@ -351,8 +387,15 @@ message ZipLibraryInstallRequest { } message ZipLibraryInstallResponse { - // Description of the current stage of the installation. - TaskProgress task_progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Description of the current stage of the installation. + TaskProgress task_progress = 1; + // Installation result. + Result result = 2; + } } message GitLibraryInstallRequest { @@ -366,6 +409,13 @@ message GitLibraryInstallRequest { } message GitLibraryInstallResponse { - // Description of the current stage of the installation. - TaskProgress task_progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Description of the current stage of the installation. + TaskProgress task_progress = 1; + // Installation result. + Result result = 2; + } } diff --git a/rpc/cc/arduino/cli/commands/v1/monitor.pb.go b/rpc/cc/arduino/cli/commands/v1/monitor.pb.go index 39ce46f4784..0f1c91ead0e 100644 --- a/rpc/cc/arduino/cli/commands/v1/monitor.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/monitor.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.1 +// protoc v5.26.1 // source: cc/arduino/cli/commands/v1/monitor.proto package commands @@ -40,18 +40,13 @@ type MonitorRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Arduino Core Service instance from the `Init` response. - Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - // Port to open, must be filled only on the first request - Port *Port `protobuf:"bytes,2,opt,name=port,proto3" json:"port,omitempty"` - // The board FQBN we are trying to connect to. This is optional, and it's - // needed to disambiguate if more than one platform provides the pluggable - // monitor for a given port protocol. - Fqbn string `protobuf:"bytes,3,opt,name=fqbn,proto3" json:"fqbn,omitempty"` - // Data to send to the port - TxData []byte `protobuf:"bytes,4,opt,name=tx_data,json=txData,proto3" json:"tx_data,omitempty"` - // Port configuration, optional, contains settings of the port to be applied - PortConfiguration *MonitorPortConfiguration `protobuf:"bytes,5,opt,name=port_configuration,json=portConfiguration,proto3" json:"port_configuration,omitempty"` + // Types that are assignable to Message: + // + // *MonitorRequest_OpenRequest + // *MonitorRequest_TxData + // *MonitorRequest_UpdatedConfiguration + // *MonitorRequest_Close + Message isMonitorRequest_Message `protobuf_oneof:"message"` } func (x *MonitorRequest) Reset() { @@ -86,35 +81,146 @@ func (*MonitorRequest) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{0} } -func (x *MonitorRequest) GetInstance() *Instance { +func (m *MonitorRequest) GetMessage() isMonitorRequest_Message { + if m != nil { + return m.Message + } + return nil +} + +func (x *MonitorRequest) GetOpenRequest() *MonitorPortOpenRequest { + if x, ok := x.GetMessage().(*MonitorRequest_OpenRequest); ok { + return x.OpenRequest + } + return nil +} + +func (x *MonitorRequest) GetTxData() []byte { + if x, ok := x.GetMessage().(*MonitorRequest_TxData); ok { + return x.TxData + } + return nil +} + +func (x *MonitorRequest) GetUpdatedConfiguration() *MonitorPortConfiguration { + if x, ok := x.GetMessage().(*MonitorRequest_UpdatedConfiguration); ok { + return x.UpdatedConfiguration + } + return nil +} + +func (x *MonitorRequest) GetClose() bool { + if x, ok := x.GetMessage().(*MonitorRequest_Close); ok { + return x.Close + } + return false +} + +type isMonitorRequest_Message interface { + isMonitorRequest_Message() +} + +type MonitorRequest_OpenRequest struct { + // Open request, it must be the first incoming message + OpenRequest *MonitorPortOpenRequest `protobuf:"bytes,1,opt,name=open_request,json=openRequest,proto3,oneof"` +} + +type MonitorRequest_TxData struct { + // Data to send to the port + TxData []byte `protobuf:"bytes,2,opt,name=tx_data,json=txData,proto3,oneof"` +} + +type MonitorRequest_UpdatedConfiguration struct { + // Port configuration, contains settings of the port to be changed + UpdatedConfiguration *MonitorPortConfiguration `protobuf:"bytes,3,opt,name=updated_configuration,json=updatedConfiguration,proto3,oneof"` +} + +type MonitorRequest_Close struct { + // Close message, set to true to gracefully close a port (this ensure + // that the gRPC streaming call is closed by the daemon AFTER the port + // has been successfully closed) + Close bool `protobuf:"varint,4,opt,name=close,proto3,oneof"` +} + +func (*MonitorRequest_OpenRequest) isMonitorRequest_Message() {} + +func (*MonitorRequest_TxData) isMonitorRequest_Message() {} + +func (*MonitorRequest_UpdatedConfiguration) isMonitorRequest_Message() {} + +func (*MonitorRequest_Close) isMonitorRequest_Message() {} + +type MonitorPortOpenRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Arduino Core Service instance from the `Init` response. + Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` + // Port to open, must be filled only on the first request + Port *Port `protobuf:"bytes,2,opt,name=port,proto3" json:"port,omitempty"` + // The board FQBN we are trying to connect to. This is optional, and it's + // needed to disambiguate if more than one platform provides the pluggable + // monitor for a given port protocol. + Fqbn string `protobuf:"bytes,3,opt,name=fqbn,proto3" json:"fqbn,omitempty"` + // Port configuration, optional, contains settings of the port to be applied + PortConfiguration *MonitorPortConfiguration `protobuf:"bytes,4,opt,name=port_configuration,json=portConfiguration,proto3" json:"port_configuration,omitempty"` +} + +func (x *MonitorPortOpenRequest) Reset() { + *x = MonitorPortOpenRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MonitorPortOpenRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MonitorPortOpenRequest) ProtoMessage() {} + +func (x *MonitorPortOpenRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MonitorPortOpenRequest.ProtoReflect.Descriptor instead. +func (*MonitorPortOpenRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{1} +} + +func (x *MonitorPortOpenRequest) GetInstance() *Instance { if x != nil { return x.Instance } return nil } -func (x *MonitorRequest) GetPort() *Port { +func (x *MonitorPortOpenRequest) GetPort() *Port { if x != nil { return x.Port } return nil } -func (x *MonitorRequest) GetFqbn() string { +func (x *MonitorPortOpenRequest) GetFqbn() string { if x != nil { return x.Fqbn } return "" } -func (x *MonitorRequest) GetTxData() []byte { - if x != nil { - return x.TxData - } - return nil -} - -func (x *MonitorRequest) GetPortConfiguration() *MonitorPortConfiguration { +func (x *MonitorPortOpenRequest) GetPortConfiguration() *MonitorPortConfiguration { if x != nil { return x.PortConfiguration } @@ -126,14 +232,14 @@ type MonitorPortConfiguration struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The port configuration parameters to configure + // The port configuration parameters Settings []*MonitorPortSetting `protobuf:"bytes,1,rep,name=settings,proto3" json:"settings,omitempty"` } func (x *MonitorPortConfiguration) Reset() { *x = MonitorPortConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[1] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -146,7 +252,7 @@ func (x *MonitorPortConfiguration) String() string { func (*MonitorPortConfiguration) ProtoMessage() {} func (x *MonitorPortConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[1] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -159,7 +265,7 @@ func (x *MonitorPortConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use MonitorPortConfiguration.ProtoReflect.Descriptor instead. func (*MonitorPortConfiguration) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{1} + return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{2} } func (x *MonitorPortConfiguration) GetSettings() []*MonitorPortSetting { @@ -174,23 +280,19 @@ type MonitorResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Eventual errors dealing with monitor port - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - // Data received from the port - RxData []byte `protobuf:"bytes,2,opt,name=rx_data,json=rxData,proto3" json:"rx_data,omitempty"` - // Settings applied to the port, may be returned after a port is opened (to - // report the default settings) or after a new port_configuration is sent - // (to report the new settings applied) - AppliedSettings []*MonitorPortSetting `protobuf:"bytes,3,rep,name=applied_settings,json=appliedSettings,proto3" json:"applied_settings,omitempty"` - // A message with this field set to true is sent as soon as the port is - // succesfully opened - Success bool `protobuf:"varint,4,opt,name=success,proto3" json:"success,omitempty"` + // Types that are assignable to Message: + // + // *MonitorResponse_Error + // *MonitorResponse_RxData + // *MonitorResponse_AppliedSettings + // *MonitorResponse_Success + Message isMonitorResponse_Message `protobuf_oneof:"message"` } func (x *MonitorResponse) Reset() { *x = MonitorResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[2] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -203,7 +305,7 @@ func (x *MonitorResponse) String() string { func (*MonitorResponse) ProtoMessage() {} func (x *MonitorResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[2] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -216,37 +318,79 @@ func (x *MonitorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MonitorResponse.ProtoReflect.Descriptor instead. func (*MonitorResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{2} + return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{3} +} + +func (m *MonitorResponse) GetMessage() isMonitorResponse_Message { + if m != nil { + return m.Message + } + return nil } func (x *MonitorResponse) GetError() string { - if x != nil { + if x, ok := x.GetMessage().(*MonitorResponse_Error); ok { return x.Error } return "" } func (x *MonitorResponse) GetRxData() []byte { - if x != nil { + if x, ok := x.GetMessage().(*MonitorResponse_RxData); ok { return x.RxData } return nil } -func (x *MonitorResponse) GetAppliedSettings() []*MonitorPortSetting { - if x != nil { +func (x *MonitorResponse) GetAppliedSettings() *MonitorPortConfiguration { + if x, ok := x.GetMessage().(*MonitorResponse_AppliedSettings); ok { return x.AppliedSettings } return nil } func (x *MonitorResponse) GetSuccess() bool { - if x != nil { + if x, ok := x.GetMessage().(*MonitorResponse_Success); ok { return x.Success } return false } +type isMonitorResponse_Message interface { + isMonitorResponse_Message() +} + +type MonitorResponse_Error struct { + // Eventual errors dealing with monitor port + Error string `protobuf:"bytes,1,opt,name=error,proto3,oneof"` +} + +type MonitorResponse_RxData struct { + // Data received from the port + RxData []byte `protobuf:"bytes,2,opt,name=rx_data,json=rxData,proto3,oneof"` +} + +type MonitorResponse_AppliedSettings struct { + // Settings applied to the port, may be returned after a port is opened (to + // report the default settings) or after a new port_configuration is sent + // (to report the new settings applied) + AppliedSettings *MonitorPortConfiguration `protobuf:"bytes,3,opt,name=applied_settings,json=appliedSettings,proto3,oneof"` +} + +type MonitorResponse_Success struct { + // A message with this field set to true is sent as soon as the port is + // succesfully opened + Success bool `protobuf:"varint,4,opt,name=success,proto3,oneof"` +} + +func (*MonitorResponse_Error) isMonitorResponse_Message() {} + +func (*MonitorResponse_RxData) isMonitorResponse_Message() {} + +func (*MonitorResponse_AppliedSettings) isMonitorResponse_Message() {} + +func (*MonitorResponse_Success) isMonitorResponse_Message() {} + type MonitorPortSetting struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -259,7 +403,7 @@ type MonitorPortSetting struct { func (x *MonitorPortSetting) Reset() { *x = MonitorPortSetting{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -272,7 +416,7 @@ func (x *MonitorPortSetting) String() string { func (*MonitorPortSetting) ProtoMessage() {} func (x *MonitorPortSetting) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -285,7 +429,7 @@ func (x *MonitorPortSetting) ProtoReflect() protoreflect.Message { // Deprecated: Use MonitorPortSetting.ProtoReflect.Descriptor instead. func (*MonitorPortSetting) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{3} + return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{4} } func (x *MonitorPortSetting) GetSettingId() string { @@ -320,7 +464,7 @@ type EnumerateMonitorPortSettingsRequest struct { func (x *EnumerateMonitorPortSettingsRequest) Reset() { *x = EnumerateMonitorPortSettingsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[4] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -333,7 +477,7 @@ func (x *EnumerateMonitorPortSettingsRequest) String() string { func (*EnumerateMonitorPortSettingsRequest) ProtoMessage() {} func (x *EnumerateMonitorPortSettingsRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[4] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -346,7 +490,7 @@ func (x *EnumerateMonitorPortSettingsRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use EnumerateMonitorPortSettingsRequest.ProtoReflect.Descriptor instead. func (*EnumerateMonitorPortSettingsRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{4} + return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{5} } func (x *EnumerateMonitorPortSettingsRequest) GetInstance() *Instance { @@ -383,7 +527,7 @@ type EnumerateMonitorPortSettingsResponse struct { func (x *EnumerateMonitorPortSettingsResponse) Reset() { *x = EnumerateMonitorPortSettingsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[5] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -396,7 +540,7 @@ func (x *EnumerateMonitorPortSettingsResponse) String() string { func (*EnumerateMonitorPortSettingsResponse) ProtoMessage() {} func (x *EnumerateMonitorPortSettingsResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[5] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -409,7 +553,7 @@ func (x *EnumerateMonitorPortSettingsResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use EnumerateMonitorPortSettingsResponse.ProtoReflect.Descriptor instead. func (*EnumerateMonitorPortSettingsResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{5} + return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{6} } func (x *EnumerateMonitorPortSettingsResponse) GetSettings() []*MonitorPortSettingDescriptor { @@ -439,7 +583,7 @@ type MonitorPortSettingDescriptor struct { func (x *MonitorPortSettingDescriptor) Reset() { *x = MonitorPortSettingDescriptor{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[6] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -452,7 +596,7 @@ func (x *MonitorPortSettingDescriptor) String() string { func (*MonitorPortSettingDescriptor) ProtoMessage() {} func (x *MonitorPortSettingDescriptor) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[6] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -465,7 +609,7 @@ func (x *MonitorPortSettingDescriptor) ProtoReflect() protoreflect.Message { // Deprecated: Use MonitorPortSettingDescriptor.ProtoReflect.Descriptor instead. func (*MonitorPortSettingDescriptor) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{6} + return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{7} } func (x *MonitorPortSettingDescriptor) GetSettingId() string { @@ -515,81 +659,99 @@ var file_cc_arduino_cli_commands_v1_monitor_proto_rawDesc = []byte{ 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9a, 0x02, 0x0a, 0x0e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x44, 0x61, 0x74, 0x61, 0x12, 0x63, - 0x0a, 0x12, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x94, 0x02, 0x0a, 0x0e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x0c, 0x6f, 0x70, 0x65, + 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x06, 0x74, 0x78, 0x44, 0x61, 0x74, 0x61, 0x12, 0x6b, 0x0a, + 0x15, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x50, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x14, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x05, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x89, 0x02, + 0x0a, 0x16, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, - 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x11, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x18, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, - 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x4a, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xb5, 0x01, 0x0a, 0x0f, - 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x72, 0x78, 0x44, 0x61, 0x74, 0x61, 0x12, 0x59, - 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, - 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, - 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x22, 0x49, 0x0a, 0x12, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, - 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa0, - 0x01, 0x0a, 0x23, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x6e, 0x69, - 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6f, 0x72, 0x74, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x12, 0x0a, - 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, - 0x6e, 0x22, 0x7c, 0x0a, 0x24, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, - 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x08, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, - 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, - 0x9e, 0x01, 0x0a, 0x1c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x75, - 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, - 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, - 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x66, 0x71, 0x62, 0x6e, 0x12, 0x63, 0x0a, 0x12, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x18, 0x4d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x22, 0xce, 0x01, 0x0a, 0x0f, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x19, 0x0a, + 0x07, 0x72, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, + 0x52, 0x06, 0x72, 0x78, 0x44, 0x61, 0x74, 0x61, 0x12, 0x61, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x07, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x49, 0x0a, 0x12, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, + 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa0, 0x01, + 0x0a, 0x23, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6f, 0x72, 0x74, 0x5f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, + 0x66, 0x71, 0x62, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, + 0x22, 0x7c, 0x0a, 0x24, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, + 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x9e, + 0x01, 0x0a, 0x1c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, + 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x75, 0x6d, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, + 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, + 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, + 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -604,31 +766,34 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes = make([]protoimpl.MessageInfo, 8) var file_cc_arduino_cli_commands_v1_monitor_proto_goTypes = []interface{}{ (*MonitorRequest)(nil), // 0: cc.arduino.cli.commands.v1.MonitorRequest - (*MonitorPortConfiguration)(nil), // 1: cc.arduino.cli.commands.v1.MonitorPortConfiguration - (*MonitorResponse)(nil), // 2: cc.arduino.cli.commands.v1.MonitorResponse - (*MonitorPortSetting)(nil), // 3: cc.arduino.cli.commands.v1.MonitorPortSetting - (*EnumerateMonitorPortSettingsRequest)(nil), // 4: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest - (*EnumerateMonitorPortSettingsResponse)(nil), // 5: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse - (*MonitorPortSettingDescriptor)(nil), // 6: cc.arduino.cli.commands.v1.MonitorPortSettingDescriptor - (*Instance)(nil), // 7: cc.arduino.cli.commands.v1.Instance - (*Port)(nil), // 8: cc.arduino.cli.commands.v1.Port + (*MonitorPortOpenRequest)(nil), // 1: cc.arduino.cli.commands.v1.MonitorPortOpenRequest + (*MonitorPortConfiguration)(nil), // 2: cc.arduino.cli.commands.v1.MonitorPortConfiguration + (*MonitorResponse)(nil), // 3: cc.arduino.cli.commands.v1.MonitorResponse + (*MonitorPortSetting)(nil), // 4: cc.arduino.cli.commands.v1.MonitorPortSetting + (*EnumerateMonitorPortSettingsRequest)(nil), // 5: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest + (*EnumerateMonitorPortSettingsResponse)(nil), // 6: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse + (*MonitorPortSettingDescriptor)(nil), // 7: cc.arduino.cli.commands.v1.MonitorPortSettingDescriptor + (*Instance)(nil), // 8: cc.arduino.cli.commands.v1.Instance + (*Port)(nil), // 9: cc.arduino.cli.commands.v1.Port } var file_cc_arduino_cli_commands_v1_monitor_proto_depIdxs = []int32{ - 7, // 0: cc.arduino.cli.commands.v1.MonitorRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 8, // 1: cc.arduino.cli.commands.v1.MonitorRequest.port:type_name -> cc.arduino.cli.commands.v1.Port - 1, // 2: cc.arduino.cli.commands.v1.MonitorRequest.port_configuration:type_name -> cc.arduino.cli.commands.v1.MonitorPortConfiguration - 3, // 3: cc.arduino.cli.commands.v1.MonitorPortConfiguration.settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortSetting - 3, // 4: cc.arduino.cli.commands.v1.MonitorResponse.applied_settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortSetting - 7, // 5: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 6, // 6: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse.settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortSettingDescriptor - 7, // [7:7] is the sub-list for method output_type - 7, // [7:7] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 1, // 0: cc.arduino.cli.commands.v1.MonitorRequest.open_request:type_name -> cc.arduino.cli.commands.v1.MonitorPortOpenRequest + 2, // 1: cc.arduino.cli.commands.v1.MonitorRequest.updated_configuration:type_name -> cc.arduino.cli.commands.v1.MonitorPortConfiguration + 8, // 2: cc.arduino.cli.commands.v1.MonitorPortOpenRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 9, // 3: cc.arduino.cli.commands.v1.MonitorPortOpenRequest.port:type_name -> cc.arduino.cli.commands.v1.Port + 2, // 4: cc.arduino.cli.commands.v1.MonitorPortOpenRequest.port_configuration:type_name -> cc.arduino.cli.commands.v1.MonitorPortConfiguration + 4, // 5: cc.arduino.cli.commands.v1.MonitorPortConfiguration.settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortSetting + 2, // 6: cc.arduino.cli.commands.v1.MonitorResponse.applied_settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortConfiguration + 8, // 7: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 7, // 8: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse.settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortSettingDescriptor + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_monitor_proto_init() } @@ -652,7 +817,7 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { } } file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MonitorPortConfiguration); i { + switch v := v.(*MonitorPortOpenRequest); i { case 0: return &v.state case 1: @@ -664,7 +829,7 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { } } file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MonitorResponse); i { + switch v := v.(*MonitorPortConfiguration); i { case 0: return &v.state case 1: @@ -676,7 +841,7 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { } } file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MonitorPortSetting); i { + switch v := v.(*MonitorResponse); i { case 0: return &v.state case 1: @@ -688,7 +853,7 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { } } file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnumerateMonitorPortSettingsRequest); i { + switch v := v.(*MonitorPortSetting); i { case 0: return &v.state case 1: @@ -700,7 +865,7 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { } } file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnumerateMonitorPortSettingsResponse); i { + switch v := v.(*EnumerateMonitorPortSettingsRequest); i { case 0: return &v.state case 1: @@ -712,6 +877,18 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { } } file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EnumerateMonitorPortSettingsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MonitorPortSettingDescriptor); i { case 0: return &v.state @@ -724,13 +901,25 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { } } } + file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*MonitorRequest_OpenRequest)(nil), + (*MonitorRequest_TxData)(nil), + (*MonitorRequest_UpdatedConfiguration)(nil), + (*MonitorRequest_Close)(nil), + } + file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3].OneofWrappers = []interface{}{ + (*MonitorResponse_Error)(nil), + (*MonitorResponse_RxData)(nil), + (*MonitorResponse_AppliedSettings)(nil), + (*MonitorResponse_Success)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_monitor_proto_rawDesc, NumEnums: 0, - NumMessages: 7, + NumMessages: 8, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/monitor.proto b/rpc/cc/arduino/cli/commands/v1/monitor.proto index 68d52fa02ae..dbda9635610 100644 --- a/rpc/cc/arduino/cli/commands/v1/monitor.proto +++ b/rpc/cc/arduino/cli/commands/v1/monitor.proto @@ -23,6 +23,21 @@ import "cc/arduino/cli/commands/v1/common.proto"; import "cc/arduino/cli/commands/v1/port.proto"; message MonitorRequest { + oneof message { + // Open request, it must be the first incoming message + MonitorPortOpenRequest open_request = 1; + // Data to send to the port + bytes tx_data = 2; + // Port configuration, contains settings of the port to be changed + MonitorPortConfiguration updated_configuration = 3; + // Close message, set to true to gracefully close a port (this ensure + // that the gRPC streaming call is closed by the daemon AFTER the port + // has been successfully closed) + bool close = 4; + } +} + +message MonitorPortOpenRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; // Port to open, must be filled only on the first request @@ -31,29 +46,29 @@ message MonitorRequest { // needed to disambiguate if more than one platform provides the pluggable // monitor for a given port protocol. string fqbn = 3; - // Data to send to the port - bytes tx_data = 4; // Port configuration, optional, contains settings of the port to be applied - MonitorPortConfiguration port_configuration = 5; + MonitorPortConfiguration port_configuration = 4; } message MonitorPortConfiguration { - // The port configuration parameters to configure + // The port configuration parameters repeated MonitorPortSetting settings = 1; } message MonitorResponse { - // Eventual errors dealing with monitor port - string error = 1; - // Data received from the port - bytes rx_data = 2; - // Settings applied to the port, may be returned after a port is opened (to - // report the default settings) or after a new port_configuration is sent - // (to report the new settings applied) - repeated MonitorPortSetting applied_settings = 3; - // A message with this field set to true is sent as soon as the port is - // succesfully opened - bool success = 4; + oneof message { + // Eventual errors dealing with monitor port + string error = 1; + // Data received from the port + bytes rx_data = 2; + // Settings applied to the port, may be returned after a port is opened (to + // report the default settings) or after a new port_configuration is sent + // (to report the new settings applied) + MonitorPortConfiguration applied_settings = 3; + // A message with this field set to true is sent as soon as the port is + // succesfully opened + bool success = 4; + } } message MonitorPortSetting { diff --git a/rpc/cc/arduino/cli/commands/v1/port.pb.go b/rpc/cc/arduino/cli/commands/v1/port.pb.go index 6af9d70f214..c0b33bd5409 100644 --- a/rpc/cc/arduino/cli/commands/v1/port.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/port.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.1 +// protoc v5.26.1 // source: cc/arduino/cli/commands/v1/port.proto package commands diff --git a/rpc/cc/arduino/cli/commands/v1/settings.pb.go b/rpc/cc/arduino/cli/commands/v1/settings.pb.go new file mode 100644 index 00000000000..acf30368097 --- /dev/null +++ b/rpc/cc/arduino/cli/commands/v1/settings.pb.go @@ -0,0 +1,1974 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.1 +// protoc v5.26.1 +// source: cc/arduino/cli/commands/v1/settings.proto + +package commands + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Configuration to apply to the given instance. +// Any missing field will be kept at the default value. +type Configuration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Directories *Configuration_Directories `protobuf:"bytes,1,opt,name=directories,proto3" json:"directories,omitempty"` + Network *Configuration_Network `protobuf:"bytes,2,opt,name=network,proto3" json:"network,omitempty"` + Sketch *Configuration_Sketch `protobuf:"bytes,3,opt,name=sketch,proto3" json:"sketch,omitempty"` + BuildCache *Configuration_BuildCache `protobuf:"bytes,4,opt,name=build_cache,json=buildCache,proto3" json:"build_cache,omitempty"` + BoardManager *Configuration_BoardManager `protobuf:"bytes,5,opt,name=board_manager,json=boardManager,proto3" json:"board_manager,omitempty"` + Daemon *Configuration_Daemon `protobuf:"bytes,6,opt,name=daemon,proto3" json:"daemon,omitempty"` + Output *Configuration_Output `protobuf:"bytes,7,opt,name=output,proto3" json:"output,omitempty"` + Logging *Configuration_Logging `protobuf:"bytes,8,opt,name=logging,proto3" json:"logging,omitempty"` + Library *Configuration_Library `protobuf:"bytes,9,opt,name=library,proto3" json:"library,omitempty"` + Updater *Configuration_Updater `protobuf:"bytes,10,opt,name=updater,proto3" json:"updater,omitempty"` + Locale *string `protobuf:"bytes,100,opt,name=locale,proto3,oneof" json:"locale,omitempty"` +} + +func (x *Configuration) Reset() { + *x = Configuration{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration) ProtoMessage() {} + +func (x *Configuration) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration.ProtoReflect.Descriptor instead. +func (*Configuration) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0} +} + +func (x *Configuration) GetDirectories() *Configuration_Directories { + if x != nil { + return x.Directories + } + return nil +} + +func (x *Configuration) GetNetwork() *Configuration_Network { + if x != nil { + return x.Network + } + return nil +} + +func (x *Configuration) GetSketch() *Configuration_Sketch { + if x != nil { + return x.Sketch + } + return nil +} + +func (x *Configuration) GetBuildCache() *Configuration_BuildCache { + if x != nil { + return x.BuildCache + } + return nil +} + +func (x *Configuration) GetBoardManager() *Configuration_BoardManager { + if x != nil { + return x.BoardManager + } + return nil +} + +func (x *Configuration) GetDaemon() *Configuration_Daemon { + if x != nil { + return x.Daemon + } + return nil +} + +func (x *Configuration) GetOutput() *Configuration_Output { + if x != nil { + return x.Output + } + return nil +} + +func (x *Configuration) GetLogging() *Configuration_Logging { + if x != nil { + return x.Logging + } + return nil +} + +func (x *Configuration) GetLibrary() *Configuration_Library { + if x != nil { + return x.Library + } + return nil +} + +func (x *Configuration) GetUpdater() *Configuration_Updater { + if x != nil { + return x.Updater + } + return nil +} + +func (x *Configuration) GetLocale() string { + if x != nil && x.Locale != nil { + return *x.Locale + } + return "" +} + +type ConfigurationGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ConfigurationGetRequest) Reset() { + *x = ConfigurationGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationGetRequest) ProtoMessage() {} + +func (x *ConfigurationGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationGetRequest.ProtoReflect.Descriptor instead. +func (*ConfigurationGetRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{1} +} + +type ConfigurationGetResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The current configuration + Configuration *Configuration `protobuf:"bytes,1,opt,name=configuration,proto3" json:"configuration,omitempty"` +} + +func (x *ConfigurationGetResponse) Reset() { + *x = ConfigurationGetResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationGetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationGetResponse) ProtoMessage() {} + +func (x *ConfigurationGetResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationGetResponse.ProtoReflect.Descriptor instead. +func (*ConfigurationGetResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{2} +} + +func (x *ConfigurationGetResponse) GetConfiguration() *Configuration { + if x != nil { + return x.Configuration + } + return nil +} + +type ConfigurationSaveRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The format of the encoded settings, allowed values are "json" and "yaml" + SettingsFormat string `protobuf:"bytes,1,opt,name=settings_format,json=settingsFormat,proto3" json:"settings_format,omitempty"` +} + +func (x *ConfigurationSaveRequest) Reset() { + *x = ConfigurationSaveRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationSaveRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationSaveRequest) ProtoMessage() {} + +func (x *ConfigurationSaveRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationSaveRequest.ProtoReflect.Descriptor instead. +func (*ConfigurationSaveRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{3} +} + +func (x *ConfigurationSaveRequest) GetSettingsFormat() string { + if x != nil { + return x.SettingsFormat + } + return "" +} + +type ConfigurationSaveResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The encoded settings + EncodedSettings string `protobuf:"bytes,1,opt,name=encoded_settings,json=encodedSettings,proto3" json:"encoded_settings,omitempty"` +} + +func (x *ConfigurationSaveResponse) Reset() { + *x = ConfigurationSaveResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationSaveResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationSaveResponse) ProtoMessage() {} + +func (x *ConfigurationSaveResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationSaveResponse.ProtoReflect.Descriptor instead. +func (*ConfigurationSaveResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{4} +} + +func (x *ConfigurationSaveResponse) GetEncodedSettings() string { + if x != nil { + return x.EncodedSettings + } + return "" +} + +type ConfigurationOpenRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The encoded settings + EncodedSettings string `protobuf:"bytes,1,opt,name=encoded_settings,json=encodedSettings,proto3" json:"encoded_settings,omitempty"` + // The format of the encoded settings, allowed values are "json" and "yaml" + SettingsFormat string `protobuf:"bytes,2,opt,name=settings_format,json=settingsFormat,proto3" json:"settings_format,omitempty"` +} + +func (x *ConfigurationOpenRequest) Reset() { + *x = ConfigurationOpenRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationOpenRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationOpenRequest) ProtoMessage() {} + +func (x *ConfigurationOpenRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationOpenRequest.ProtoReflect.Descriptor instead. +func (*ConfigurationOpenRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{5} +} + +func (x *ConfigurationOpenRequest) GetEncodedSettings() string { + if x != nil { + return x.EncodedSettings + } + return "" +} + +func (x *ConfigurationOpenRequest) GetSettingsFormat() string { + if x != nil { + return x.SettingsFormat + } + return "" +} + +type ConfigurationOpenResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Warnings that occurred while opening the configuration (e.g. unknown keys, + // or invalid values) + Warnings []string `protobuf:"bytes,1,rep,name=warnings,proto3" json:"warnings,omitempty"` +} + +func (x *ConfigurationOpenResponse) Reset() { + *x = ConfigurationOpenResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationOpenResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationOpenResponse) ProtoMessage() {} + +func (x *ConfigurationOpenResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationOpenResponse.ProtoReflect.Descriptor instead. +func (*ConfigurationOpenResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{6} +} + +func (x *ConfigurationOpenResponse) GetWarnings() []string { + if x != nil { + return x.Warnings + } + return nil +} + +type SettingsGetValueRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The key to get + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // The format of the encoded_value (default is "json", allowed values are + // "json" and "yaml) + ValueFormat string `protobuf:"bytes,2,opt,name=value_format,json=valueFormat,proto3" json:"value_format,omitempty"` +} + +func (x *SettingsGetValueRequest) Reset() { + *x = SettingsGetValueRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsGetValueRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsGetValueRequest) ProtoMessage() {} + +func (x *SettingsGetValueRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsGetValueRequest.ProtoReflect.Descriptor instead. +func (*SettingsGetValueRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{7} +} + +func (x *SettingsGetValueRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *SettingsGetValueRequest) GetValueFormat() string { + if x != nil { + return x.ValueFormat + } + return "" +} + +type SettingsGetValueResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The value of the key (encoded) + EncodedValue string `protobuf:"bytes,1,opt,name=encoded_value,json=encodedValue,proto3" json:"encoded_value,omitempty"` +} + +func (x *SettingsGetValueResponse) Reset() { + *x = SettingsGetValueResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsGetValueResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsGetValueResponse) ProtoMessage() {} + +func (x *SettingsGetValueResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsGetValueResponse.ProtoReflect.Descriptor instead. +func (*SettingsGetValueResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{8} +} + +func (x *SettingsGetValueResponse) GetEncodedValue() string { + if x != nil { + return x.EncodedValue + } + return "" +} + +type SettingsSetValueRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The key to change + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // The new value (encoded), no objects, only scalar or array of scalars are + // allowed. + EncodedValue string `protobuf:"bytes,2,opt,name=encoded_value,json=encodedValue,proto3" json:"encoded_value,omitempty"` + // The format of the encoded_value (default is "json", allowed values are + // "json", "yaml" and "cli") + ValueFormat string `protobuf:"bytes,3,opt,name=value_format,json=valueFormat,proto3" json:"value_format,omitempty"` +} + +func (x *SettingsSetValueRequest) Reset() { + *x = SettingsSetValueRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsSetValueRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsSetValueRequest) ProtoMessage() {} + +func (x *SettingsSetValueRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsSetValueRequest.ProtoReflect.Descriptor instead. +func (*SettingsSetValueRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{9} +} + +func (x *SettingsSetValueRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *SettingsSetValueRequest) GetEncodedValue() string { + if x != nil { + return x.EncodedValue + } + return "" +} + +func (x *SettingsSetValueRequest) GetValueFormat() string { + if x != nil { + return x.ValueFormat + } + return "" +} + +type SettingsSetValueResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SettingsSetValueResponse) Reset() { + *x = SettingsSetValueResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsSetValueResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsSetValueResponse) ProtoMessage() {} + +func (x *SettingsSetValueResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsSetValueResponse.ProtoReflect.Descriptor instead. +func (*SettingsSetValueResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{10} +} + +type SettingsEnumerateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SettingsEnumerateRequest) Reset() { + *x = SettingsEnumerateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsEnumerateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsEnumerateRequest) ProtoMessage() {} + +func (x *SettingsEnumerateRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsEnumerateRequest.ProtoReflect.Descriptor instead. +func (*SettingsEnumerateRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{11} +} + +type SettingsEnumerateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of key/value pairs + Entries []*SettingsEnumerateResponse_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` +} + +func (x *SettingsEnumerateResponse) Reset() { + *x = SettingsEnumerateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsEnumerateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsEnumerateResponse) ProtoMessage() {} + +func (x *SettingsEnumerateResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsEnumerateResponse.ProtoReflect.Descriptor instead. +func (*SettingsEnumerateResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{12} +} + +func (x *SettingsEnumerateResponse) GetEntries() []*SettingsEnumerateResponse_Entry { + if x != nil { + return x.Entries + } + return nil +} + +type Configuration_Directories struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Data directory + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + // User directory + User string `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` + // Downloads directory + Downloads string `protobuf:"bytes,3,opt,name=downloads,proto3" json:"downloads,omitempty"` + // The directory where the built-in resources are installed + Builtin *Configuration_Directories_Builtin `protobuf:"bytes,4,opt,name=builtin,proto3,oneof" json:"builtin,omitempty"` +} + +func (x *Configuration_Directories) Reset() { + *x = Configuration_Directories{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Directories) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Directories) ProtoMessage() {} + +func (x *Configuration_Directories) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Directories.ProtoReflect.Descriptor instead. +func (*Configuration_Directories) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *Configuration_Directories) GetData() string { + if x != nil { + return x.Data + } + return "" +} + +func (x *Configuration_Directories) GetUser() string { + if x != nil { + return x.User + } + return "" +} + +func (x *Configuration_Directories) GetDownloads() string { + if x != nil { + return x.Downloads + } + return "" +} + +func (x *Configuration_Directories) GetBuiltin() *Configuration_Directories_Builtin { + if x != nil { + return x.Builtin + } + return nil +} + +type Configuration_Network struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Extra user-agent information to be appended in network requests + ExtraUserAgent *string `protobuf:"bytes,1,opt,name=extra_user_agent,json=extraUserAgent,proto3,oneof" json:"extra_user_agent,omitempty"` + // The proxy to use for network requests + Proxy *string `protobuf:"bytes,2,opt,name=proxy,proto3,oneof" json:"proxy,omitempty"` +} + +func (x *Configuration_Network) Reset() { + *x = Configuration_Network{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Network) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Network) ProtoMessage() {} + +func (x *Configuration_Network) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Network.ProtoReflect.Descriptor instead. +func (*Configuration_Network) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *Configuration_Network) GetExtraUserAgent() string { + if x != nil && x.ExtraUserAgent != nil { + return *x.ExtraUserAgent + } + return "" +} + +func (x *Configuration_Network) GetProxy() string { + if x != nil && x.Proxy != nil { + return *x.Proxy + } + return "" +} + +type Configuration_Sketch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Set to true to always export binaries to the sketch directory + AlwaysExportBinaries bool `protobuf:"varint,1,opt,name=always_export_binaries,json=alwaysExportBinaries,proto3" json:"always_export_binaries,omitempty"` +} + +func (x *Configuration_Sketch) Reset() { + *x = Configuration_Sketch{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Sketch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Sketch) ProtoMessage() {} + +func (x *Configuration_Sketch) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Sketch.ProtoReflect.Descriptor instead. +func (*Configuration_Sketch) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 2} +} + +func (x *Configuration_Sketch) GetAlwaysExportBinaries() bool { + if x != nil { + return x.AlwaysExportBinaries + } + return false +} + +type Configuration_BuildCache struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The minimum number of compilations before the cache is purged + CompilationsBeforePurge uint64 `protobuf:"varint,1,opt,name=compilations_before_purge,json=compilationsBeforePurge,proto3" json:"compilations_before_purge,omitempty"` + // Time to live of the cache in seconds + TtlSecs uint64 `protobuf:"varint,2,opt,name=ttl_secs,json=ttlSecs,proto3" json:"ttl_secs,omitempty"` +} + +func (x *Configuration_BuildCache) Reset() { + *x = Configuration_BuildCache{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_BuildCache) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_BuildCache) ProtoMessage() {} + +func (x *Configuration_BuildCache) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_BuildCache.ProtoReflect.Descriptor instead. +func (*Configuration_BuildCache) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 3} +} + +func (x *Configuration_BuildCache) GetCompilationsBeforePurge() uint64 { + if x != nil { + return x.CompilationsBeforePurge + } + return 0 +} + +func (x *Configuration_BuildCache) GetTtlSecs() uint64 { + if x != nil { + return x.TtlSecs + } + return 0 +} + +type Configuration_BoardManager struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Additional URLs to be used for the board manager + AdditionalUrls []string `protobuf:"bytes,1,rep,name=additional_urls,json=additionalUrls,proto3" json:"additional_urls,omitempty"` +} + +func (x *Configuration_BoardManager) Reset() { + *x = Configuration_BoardManager{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_BoardManager) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_BoardManager) ProtoMessage() {} + +func (x *Configuration_BoardManager) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_BoardManager.ProtoReflect.Descriptor instead. +func (*Configuration_BoardManager) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 4} +} + +func (x *Configuration_BoardManager) GetAdditionalUrls() []string { + if x != nil { + return x.AdditionalUrls + } + return nil +} + +type Configuration_Daemon struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The TCP port of the daemon + Port string `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` +} + +func (x *Configuration_Daemon) Reset() { + *x = Configuration_Daemon{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Daemon) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Daemon) ProtoMessage() {} + +func (x *Configuration_Daemon) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Daemon.ProtoReflect.Descriptor instead. +func (*Configuration_Daemon) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 5} +} + +func (x *Configuration_Daemon) GetPort() string { + if x != nil { + return x.Port + } + return "" +} + +type Configuration_Output struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Set to true to disable coloring of the output + NoColor bool `protobuf:"varint,1,opt,name=no_color,json=noColor,proto3" json:"no_color,omitempty"` +} + +func (x *Configuration_Output) Reset() { + *x = Configuration_Output{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Output) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Output) ProtoMessage() {} + +func (x *Configuration_Output) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Output.ProtoReflect.Descriptor instead. +func (*Configuration_Output) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 6} +} + +func (x *Configuration_Output) GetNoColor() bool { + if x != nil { + return x.NoColor + } + return false +} + +type Configuration_Logging struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The logging level + Level string `protobuf:"bytes,1,opt,name=level,proto3" json:"level,omitempty"` + // The logging format + Format string `protobuf:"bytes,2,opt,name=format,proto3" json:"format,omitempty"` + // The logging file + File *string `protobuf:"bytes,3,opt,name=file,proto3,oneof" json:"file,omitempty"` +} + +func (x *Configuration_Logging) Reset() { + *x = Configuration_Logging{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Logging) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Logging) ProtoMessage() {} + +func (x *Configuration_Logging) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Logging.ProtoReflect.Descriptor instead. +func (*Configuration_Logging) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 7} +} + +func (x *Configuration_Logging) GetLevel() string { + if x != nil { + return x.Level + } + return "" +} + +func (x *Configuration_Logging) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *Configuration_Logging) GetFile() string { + if x != nil && x.File != nil { + return *x.File + } + return "" +} + +type Configuration_Library struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Set to true to enable library installation from zip archives or git + // repositories + EnableUnsafeInstall bool `protobuf:"varint,1,opt,name=enable_unsafe_install,json=enableUnsafeInstall,proto3" json:"enable_unsafe_install,omitempty"` +} + +func (x *Configuration_Library) Reset() { + *x = Configuration_Library{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Library) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Library) ProtoMessage() {} + +func (x *Configuration_Library) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Library.ProtoReflect.Descriptor instead. +func (*Configuration_Library) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 8} +} + +func (x *Configuration_Library) GetEnableUnsafeInstall() bool { + if x != nil { + return x.EnableUnsafeInstall + } + return false +} + +type Configuration_Updater struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Set to true to enable notifications for updates + EnableNotification bool `protobuf:"varint,1,opt,name=enable_notification,json=enableNotification,proto3" json:"enable_notification,omitempty"` +} + +func (x *Configuration_Updater) Reset() { + *x = Configuration_Updater{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Updater) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Updater) ProtoMessage() {} + +func (x *Configuration_Updater) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Updater.ProtoReflect.Descriptor instead. +func (*Configuration_Updater) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 9} +} + +func (x *Configuration_Updater) GetEnableNotification() bool { + if x != nil { + return x.EnableNotification + } + return false +} + +type Configuration_Directories_Builtin struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The directory where the built-in libraries are installed + Libraries *string `protobuf:"bytes,1,opt,name=libraries,proto3,oneof" json:"libraries,omitempty"` +} + +func (x *Configuration_Directories_Builtin) Reset() { + *x = Configuration_Directories_Builtin{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Directories_Builtin) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Directories_Builtin) ProtoMessage() {} + +func (x *Configuration_Directories_Builtin) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Directories_Builtin.ProtoReflect.Descriptor instead. +func (*Configuration_Directories_Builtin) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 0, 0} +} + +func (x *Configuration_Directories_Builtin) GetLibraries() string { + if x != nil && x.Libraries != nil { + return *x.Libraries + } + return "" +} + +type SettingsEnumerateResponse_Entry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The key + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // The key type + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` +} + +func (x *SettingsEnumerateResponse_Entry) Reset() { + *x = SettingsEnumerateResponse_Entry{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsEnumerateResponse_Entry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsEnumerateResponse_Entry) ProtoMessage() {} + +func (x *SettingsEnumerateResponse_Entry) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsEnumerateResponse_Entry.ProtoReflect.Descriptor instead. +func (*SettingsEnumerateResponse_Entry) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{12, 0} +} + +func (x *SettingsEnumerateResponse_Entry) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *SettingsEnumerateResponse_Entry) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +var File_cc_arduino_cli_commands_v1_settings_proto protoreflect.FileDescriptor + +var file_cc_arduino_cli_commands_v1_settings_proto_rawDesc = []byte{ + 0x0a, 0x29, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x22, 0xbd, 0x0d, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x0b, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, + 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, + 0x48, 0x0a, 0x06, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6b, 0x65, 0x74, 0x63, + 0x68, 0x52, 0x06, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, 0x55, 0x0a, 0x0b, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x52, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x12, 0x5b, 0x0a, 0x0d, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x52, + 0x0c, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x48, 0x0a, + 0x06, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x52, + 0x06, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, + 0x67, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x4b, + 0x0a, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x52, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x4b, 0x0a, 0x07, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x72, 0x52, + 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x18, 0x64, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x88, 0x01, 0x01, 0x1a, 0xf9, 0x01, 0x0a, 0x0b, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x0a, + 0x09, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x5c, 0x0a, 0x07, 0x62, + 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x69, 0x65, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x62, + 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x1a, 0x3a, 0x0a, 0x07, 0x42, 0x75, 0x69, + 0x6c, 0x74, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x09, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x69, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x69, 0x65, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, + 0x6e, 0x1a, 0x72, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x2d, 0x0a, 0x10, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x72, 0x61, 0x55, + 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x70, + 0x72, 0x6f, 0x78, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x70, 0x72, + 0x6f, 0x78, 0x79, 0x88, 0x01, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, + 0x70, 0x72, 0x6f, 0x78, 0x79, 0x1a, 0x3e, 0x0a, 0x06, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, + 0x34, 0x0a, 0x16, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x14, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x69, 0x6e, + 0x61, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x63, 0x0a, 0x0a, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x75, 0x72, 0x67, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x50, 0x75, 0x72, 0x67, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x74, 0x74, 0x6c, 0x5f, 0x73, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x74, 0x74, 0x6c, 0x53, 0x65, 0x63, 0x73, 0x1a, 0x37, 0x0a, 0x0c, 0x42, 0x6f, + 0x61, 0x72, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, + 0x72, 0x6c, 0x73, 0x1a, 0x1c, 0x0a, 0x06, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x6f, 0x72, + 0x74, 0x1a, 0x23, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6e, + 0x6f, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6e, + 0x6f, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x1a, 0x59, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, + 0x67, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x17, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x04, 0x66, 0x69, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x66, 0x69, 0x6c, + 0x65, 0x1a, 0x3d, 0x0a, 0x07, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x15, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x55, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x1a, 0x3a, 0x0a, 0x07, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x13, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, + 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x6b, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, + 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x43, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x22, 0x46, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x6e, 0x0a, 0x18, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x5f, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x37, 0x0a, 0x19, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, + 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, + 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x4e, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x3f, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x73, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x1a, 0x0a, 0x18, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0xa1, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x55, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x2d, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, + 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_cc_arduino_cli_commands_v1_settings_proto_rawDescOnce sync.Once + file_cc_arduino_cli_commands_v1_settings_proto_rawDescData = file_cc_arduino_cli_commands_v1_settings_proto_rawDesc +) + +func file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP() []byte { + file_cc_arduino_cli_commands_v1_settings_proto_rawDescOnce.Do(func() { + file_cc_arduino_cli_commands_v1_settings_proto_rawDescData = protoimpl.X.CompressGZIP(file_cc_arduino_cli_commands_v1_settings_proto_rawDescData) + }) + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescData +} + +var file_cc_arduino_cli_commands_v1_settings_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_cc_arduino_cli_commands_v1_settings_proto_goTypes = []interface{}{ + (*Configuration)(nil), // 0: cc.arduino.cli.commands.v1.Configuration + (*ConfigurationGetRequest)(nil), // 1: cc.arduino.cli.commands.v1.ConfigurationGetRequest + (*ConfigurationGetResponse)(nil), // 2: cc.arduino.cli.commands.v1.ConfigurationGetResponse + (*ConfigurationSaveRequest)(nil), // 3: cc.arduino.cli.commands.v1.ConfigurationSaveRequest + (*ConfigurationSaveResponse)(nil), // 4: cc.arduino.cli.commands.v1.ConfigurationSaveResponse + (*ConfigurationOpenRequest)(nil), // 5: cc.arduino.cli.commands.v1.ConfigurationOpenRequest + (*ConfigurationOpenResponse)(nil), // 6: cc.arduino.cli.commands.v1.ConfigurationOpenResponse + (*SettingsGetValueRequest)(nil), // 7: cc.arduino.cli.commands.v1.SettingsGetValueRequest + (*SettingsGetValueResponse)(nil), // 8: cc.arduino.cli.commands.v1.SettingsGetValueResponse + (*SettingsSetValueRequest)(nil), // 9: cc.arduino.cli.commands.v1.SettingsSetValueRequest + (*SettingsSetValueResponse)(nil), // 10: cc.arduino.cli.commands.v1.SettingsSetValueResponse + (*SettingsEnumerateRequest)(nil), // 11: cc.arduino.cli.commands.v1.SettingsEnumerateRequest + (*SettingsEnumerateResponse)(nil), // 12: cc.arduino.cli.commands.v1.SettingsEnumerateResponse + (*Configuration_Directories)(nil), // 13: cc.arduino.cli.commands.v1.Configuration.Directories + (*Configuration_Network)(nil), // 14: cc.arduino.cli.commands.v1.Configuration.Network + (*Configuration_Sketch)(nil), // 15: cc.arduino.cli.commands.v1.Configuration.Sketch + (*Configuration_BuildCache)(nil), // 16: cc.arduino.cli.commands.v1.Configuration.BuildCache + (*Configuration_BoardManager)(nil), // 17: cc.arduino.cli.commands.v1.Configuration.BoardManager + (*Configuration_Daemon)(nil), // 18: cc.arduino.cli.commands.v1.Configuration.Daemon + (*Configuration_Output)(nil), // 19: cc.arduino.cli.commands.v1.Configuration.Output + (*Configuration_Logging)(nil), // 20: cc.arduino.cli.commands.v1.Configuration.Logging + (*Configuration_Library)(nil), // 21: cc.arduino.cli.commands.v1.Configuration.Library + (*Configuration_Updater)(nil), // 22: cc.arduino.cli.commands.v1.Configuration.Updater + (*Configuration_Directories_Builtin)(nil), // 23: cc.arduino.cli.commands.v1.Configuration.Directories.Builtin + (*SettingsEnumerateResponse_Entry)(nil), // 24: cc.arduino.cli.commands.v1.SettingsEnumerateResponse.Entry +} +var file_cc_arduino_cli_commands_v1_settings_proto_depIdxs = []int32{ + 13, // 0: cc.arduino.cli.commands.v1.Configuration.directories:type_name -> cc.arduino.cli.commands.v1.Configuration.Directories + 14, // 1: cc.arduino.cli.commands.v1.Configuration.network:type_name -> cc.arduino.cli.commands.v1.Configuration.Network + 15, // 2: cc.arduino.cli.commands.v1.Configuration.sketch:type_name -> cc.arduino.cli.commands.v1.Configuration.Sketch + 16, // 3: cc.arduino.cli.commands.v1.Configuration.build_cache:type_name -> cc.arduino.cli.commands.v1.Configuration.BuildCache + 17, // 4: cc.arduino.cli.commands.v1.Configuration.board_manager:type_name -> cc.arduino.cli.commands.v1.Configuration.BoardManager + 18, // 5: cc.arduino.cli.commands.v1.Configuration.daemon:type_name -> cc.arduino.cli.commands.v1.Configuration.Daemon + 19, // 6: cc.arduino.cli.commands.v1.Configuration.output:type_name -> cc.arduino.cli.commands.v1.Configuration.Output + 20, // 7: cc.arduino.cli.commands.v1.Configuration.logging:type_name -> cc.arduino.cli.commands.v1.Configuration.Logging + 21, // 8: cc.arduino.cli.commands.v1.Configuration.library:type_name -> cc.arduino.cli.commands.v1.Configuration.Library + 22, // 9: cc.arduino.cli.commands.v1.Configuration.updater:type_name -> cc.arduino.cli.commands.v1.Configuration.Updater + 0, // 10: cc.arduino.cli.commands.v1.ConfigurationGetResponse.configuration:type_name -> cc.arduino.cli.commands.v1.Configuration + 24, // 11: cc.arduino.cli.commands.v1.SettingsEnumerateResponse.entries:type_name -> cc.arduino.cli.commands.v1.SettingsEnumerateResponse.Entry + 23, // 12: cc.arduino.cli.commands.v1.Configuration.Directories.builtin:type_name -> cc.arduino.cli.commands.v1.Configuration.Directories.Builtin + 13, // [13:13] is the sub-list for method output_type + 13, // [13:13] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name +} + +func init() { file_cc_arduino_cli_commands_v1_settings_proto_init() } +func file_cc_arduino_cli_commands_v1_settings_proto_init() { + if File_cc_arduino_cli_commands_v1_settings_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConfigurationGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConfigurationGetResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConfigurationSaveRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConfigurationSaveResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConfigurationOpenRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConfigurationOpenResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SettingsGetValueRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SettingsGetValueResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SettingsSetValueRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SettingsSetValueResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SettingsEnumerateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SettingsEnumerateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration_Directories); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration_Network); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration_Sketch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration_BuildCache); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration_BoardManager); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration_Daemon); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration_Output); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration_Logging); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration_Library); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration_Updater); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Configuration_Directories_Builtin); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SettingsEnumerateResponse_Entry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[13].OneofWrappers = []interface{}{} + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[14].OneofWrappers = []interface{}{} + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[20].OneofWrappers = []interface{}{} + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[23].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_cc_arduino_cli_commands_v1_settings_proto_rawDesc, + NumEnums: 0, + NumMessages: 25, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_cc_arduino_cli_commands_v1_settings_proto_goTypes, + DependencyIndexes: file_cc_arduino_cli_commands_v1_settings_proto_depIdxs, + MessageInfos: file_cc_arduino_cli_commands_v1_settings_proto_msgTypes, + }.Build() + File_cc_arduino_cli_commands_v1_settings_proto = out.File + file_cc_arduino_cli_commands_v1_settings_proto_rawDesc = nil + file_cc_arduino_cli_commands_v1_settings_proto_goTypes = nil + file_cc_arduino_cli_commands_v1_settings_proto_depIdxs = nil +} diff --git a/rpc/cc/arduino/cli/commands/v1/settings.proto b/rpc/cc/arduino/cli/commands/v1/settings.proto new file mode 100644 index 00000000000..c55a2c122f3 --- /dev/null +++ b/rpc/cc/arduino/cli/commands/v1/settings.proto @@ -0,0 +1,167 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +syntax = "proto3"; + +package cc.arduino.cli.commands.v1; + +option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; + +// Configuration to apply to the given instance. +// Any missing field will be kept at the default value. +message Configuration { + message Directories { + message Builtin { + // The directory where the built-in libraries are installed + optional string libraries = 1; + } + // Data directory + string data = 1; + // User directory + string user = 2; + // Downloads directory + string downloads = 3; + // The directory where the built-in resources are installed + optional Builtin builtin = 4; + }; + message Network { + // Extra user-agent information to be appended in network requests + optional string extra_user_agent = 1; + // The proxy to use for network requests + optional string proxy = 2; + }; + message Sketch { + // Set to true to always export binaries to the sketch directory + bool always_export_binaries = 1; + } + message BuildCache { + // The minimum number of compilations before the cache is purged + uint64 compilations_before_purge = 1; + // Time to live of the cache in seconds + uint64 ttl_secs = 2; + } + message BoardManager { + // Additional URLs to be used for the board manager + repeated string additional_urls = 1; + } + message Daemon { + // The TCP port of the daemon + string port = 1; + } + message Output { + // Set to true to disable coloring of the output + bool no_color = 1; + } + message Logging { + // The logging level + string level = 1; + // The logging format + string format = 2; + // The logging file + optional string file = 3; + } + message Library { + // Set to true to enable library installation from zip archives or git + // repositories + bool enable_unsafe_install = 1; + } + message Updater { + // Set to true to enable notifications for updates + bool enable_notification = 1; + } + + Directories directories = 1; + Network network = 2; + Sketch sketch = 3; + BuildCache build_cache = 4; + BoardManager board_manager = 5; + Daemon daemon = 6; + Output output = 7; + Logging logging = 8; + Library library = 9; + Updater updater = 10; + + optional string locale = 100; +} + +message ConfigurationGetRequest {} + +message ConfigurationGetResponse { + // The current configuration + Configuration configuration = 1; +} + +message ConfigurationSaveRequest { + // The format of the encoded settings, allowed values are "json" and "yaml" + string settings_format = 1; +} + +message ConfigurationSaveResponse { + // The encoded settings + string encoded_settings = 1; +} + +message ConfigurationOpenRequest { + // The encoded settings + string encoded_settings = 1; + // The format of the encoded settings, allowed values are "json" and "yaml" + string settings_format = 2; +} + +message ConfigurationOpenResponse { + // Warnings that occurred while opening the configuration (e.g. unknown keys, + // or invalid values) + repeated string warnings = 1; +} + +message SettingsGetValueRequest { + // The key to get + string key = 1; + // The format of the encoded_value (default is "json", allowed values are + // "json" and "yaml) + string value_format = 2; +} + +message SettingsGetValueResponse { + // The value of the key (encoded) + string encoded_value = 1; +} + +message SettingsSetValueRequest { + // The key to change + string key = 1; + // The new value (encoded), no objects, only scalar or array of scalars are + // allowed. + string encoded_value = 2; + // The format of the encoded_value (default is "json", allowed values are + // "json", "yaml" and "cli") + string value_format = 3; +} + +message SettingsSetValueResponse {} + +message SettingsEnumerateRequest {} + +message SettingsEnumerateResponse { + message Entry { + // The key + string key = 1; + // The key type + string type = 2; + } + + // The list of key/value pairs + repeated Entry entries = 1; +} diff --git a/rpc/cc/arduino/cli/commands/v1/upload.pb.go b/rpc/cc/arduino/cli/commands/v1/upload.pb.go index 6e544c62d0c..1e1e2f7518d 100644 --- a/rpc/cc/arduino/cli/commands/v1/upload.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/upload.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.1 +// protoc v5.26.1 // source: cc/arduino/cli/commands/v1/upload.proto package commands @@ -527,10 +527,11 @@ type UploadUsingProgrammerResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The output of the upload process. - OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3" json:"out_stream,omitempty"` - // The error output of the upload process. - ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3" json:"err_stream,omitempty"` + // Types that are assignable to Message: + // + // *UploadUsingProgrammerResponse_OutStream + // *UploadUsingProgrammerResponse_ErrStream + Message isUploadUsingProgrammerResponse_Message `protobuf_oneof:"message"` } func (x *UploadUsingProgrammerResponse) Reset() { @@ -565,20 +566,45 @@ func (*UploadUsingProgrammerResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_upload_proto_rawDescGZIP(), []int{5} } +func (m *UploadUsingProgrammerResponse) GetMessage() isUploadUsingProgrammerResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *UploadUsingProgrammerResponse) GetOutStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*UploadUsingProgrammerResponse_OutStream); ok { return x.OutStream } return nil } func (x *UploadUsingProgrammerResponse) GetErrStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*UploadUsingProgrammerResponse_ErrStream); ok { return x.ErrStream } return nil } +type isUploadUsingProgrammerResponse_Message interface { + isUploadUsingProgrammerResponse_Message() +} + +type UploadUsingProgrammerResponse_OutStream struct { + // The output of the upload process. + OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3,oneof"` +} + +type UploadUsingProgrammerResponse_ErrStream struct { + // The error output of the upload process. + ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3,oneof"` +} + +func (*UploadUsingProgrammerResponse_OutStream) isUploadUsingProgrammerResponse_Message() {} + +func (*UploadUsingProgrammerResponse_ErrStream) isUploadUsingProgrammerResponse_Message() {} + type BurnBootloaderRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -701,10 +727,11 @@ type BurnBootloaderResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The output of the burn bootloader process. - OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3" json:"out_stream,omitempty"` - // The error output of the burn bootloader process. - ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3" json:"err_stream,omitempty"` + // Types that are assignable to Message: + // + // *BurnBootloaderResponse_OutStream + // *BurnBootloaderResponse_ErrStream + Message isBurnBootloaderResponse_Message `protobuf_oneof:"message"` } func (x *BurnBootloaderResponse) Reset() { @@ -739,20 +766,45 @@ func (*BurnBootloaderResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_upload_proto_rawDescGZIP(), []int{7} } +func (m *BurnBootloaderResponse) GetMessage() isBurnBootloaderResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *BurnBootloaderResponse) GetOutStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*BurnBootloaderResponse_OutStream); ok { return x.OutStream } return nil } func (x *BurnBootloaderResponse) GetErrStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*BurnBootloaderResponse_ErrStream); ok { return x.ErrStream } return nil } +type isBurnBootloaderResponse_Message interface { + isBurnBootloaderResponse_Message() +} + +type BurnBootloaderResponse_OutStream struct { + // The output of the burn bootloader process. + OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3,oneof"` +} + +type BurnBootloaderResponse_ErrStream struct { + // The error output of the burn bootloader process. + ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3,oneof"` +} + +func (*BurnBootloaderResponse_OutStream) isBurnBootloaderResponse_Message() {} + +func (*BurnBootloaderResponse_ErrStream) isBurnBootloaderResponse_Message() {} + type ListProgrammersAvailableForUploadRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1143,88 +1195,90 @@ var file_cc_arduino_cli_commands_v1_upload_proto_rawDesc = []byte{ 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5d, 0x0a, 0x1d, 0x55, 0x70, 0x6c, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6c, 0x0a, 0x1d, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x75, - 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, - 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, - 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, - 0x72, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0xb1, 0x03, 0x0a, 0x15, 0x42, 0x75, 0x72, - 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, - 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x62, 0x0a, 0x0b, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x6f, 0x75, + 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, + 0x52, 0x09, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1f, 0x0a, 0x0a, 0x65, + 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, + 0x00, 0x52, 0x09, 0x65, 0x72, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x09, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xb1, 0x03, 0x0a, 0x15, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x3d, 0x0a, - 0x0f, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x56, 0x0a, 0x16, - 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x72, 0x72, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x22, 0x80, 0x01, 0x0a, 0x28, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x75, 0x0a, 0x29, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, + 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x12, + 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x62, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x42, + 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, + 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x65, 0x0a, 0x16, 0x42, + 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x75, 0x74, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1f, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x5f, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x65, 0x72, + 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x80, 0x01, 0x0a, 0x28, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x75, 0x0a, 0x29, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x52, + 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x22, 0x8e, 0x01, 0x0a, + 0x1a, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x66, 0x0a, + 0x09, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6f, + 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x6f, + 0x6c, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x65, 0x0a, 0x1b, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, - 0x72, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x22, 0x8e, - 0x01, 0x0a, 0x1a, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, - 0x71, 0x62, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, - 0x66, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, - 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x65, 0x0a, 0x1b, 0x53, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x42, 0x48, - 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, - 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x42, 0x48, 0x5a, 0x46, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, + 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, + 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1454,6 +1508,14 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { (*UploadResponse_ErrStream)(nil), (*UploadResponse_Result)(nil), } + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*UploadUsingProgrammerResponse_OutStream)(nil), + (*UploadUsingProgrammerResponse_ErrStream)(nil), + } + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*BurnBootloaderResponse_OutStream)(nil), + (*BurnBootloaderResponse_ErrStream)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/rpc/cc/arduino/cli/commands/v1/upload.proto b/rpc/cc/arduino/cli/commands/v1/upload.proto index 8a2b6b0215d..b2d3d5bc93f 100644 --- a/rpc/cc/arduino/cli/commands/v1/upload.proto +++ b/rpc/cc/arduino/cli/commands/v1/upload.proto @@ -118,10 +118,12 @@ message UploadUsingProgrammerRequest { } message UploadUsingProgrammerResponse { - // The output of the upload process. - bytes out_stream = 1; - // The error output of the upload process. - bytes err_stream = 2; + oneof message { + // The output of the upload process. + bytes out_stream = 1; + // The error output of the upload process. + bytes err_stream = 2; + } } message BurnBootloaderRequest { @@ -150,10 +152,12 @@ message BurnBootloaderRequest { } message BurnBootloaderResponse { - // The output of the burn bootloader process. - bytes out_stream = 1; - // The error output of the burn bootloader process. - bytes err_stream = 2; + oneof message { + // The output of the burn bootloader process. + bytes out_stream = 1; + // The error output of the burn bootloader process. + bytes err_stream = 2; + } } message ListProgrammersAvailableForUploadRequest { diff --git a/rpc/cc/arduino/cli/settings/v1/settings.pb.go b/rpc/cc/arduino/cli/settings/v1/settings.pb.go deleted file mode 100644 index 44884cec06f..00000000000 --- a/rpc/cc/arduino/cli/settings/v1/settings.pb.go +++ /dev/null @@ -1,878 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 -// source: cc/arduino/cli/settings/v1/settings.proto - -package settings - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type GetAllResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The settings, in JSON format. - JsonData string `protobuf:"bytes,1,opt,name=json_data,json=jsonData,proto3" json:"json_data,omitempty"` -} - -func (x *GetAllResponse) Reset() { - *x = GetAllResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetAllResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetAllResponse) ProtoMessage() {} - -func (x *GetAllResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetAllResponse.ProtoReflect.Descriptor instead. -func (*GetAllResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{0} -} - -func (x *GetAllResponse) GetJsonData() string { - if x != nil { - return x.JsonData - } - return "" -} - -type MergeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The settings, in JSON format. - JsonData string `protobuf:"bytes,1,opt,name=json_data,json=jsonData,proto3" json:"json_data,omitempty"` -} - -func (x *MergeRequest) Reset() { - *x = MergeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MergeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MergeRequest) ProtoMessage() {} - -func (x *MergeRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MergeRequest.ProtoReflect.Descriptor instead. -func (*MergeRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{1} -} - -func (x *MergeRequest) GetJsonData() string { - if x != nil { - return x.JsonData - } - return "" -} - -type GetValueResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The key of the setting. - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // The setting, in JSON format. - JsonData string `protobuf:"bytes,2,opt,name=json_data,json=jsonData,proto3" json:"json_data,omitempty"` -} - -func (x *GetValueResponse) Reset() { - *x = GetValueResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetValueResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetValueResponse) ProtoMessage() {} - -func (x *GetValueResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetValueResponse.ProtoReflect.Descriptor instead. -func (*GetValueResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{2} -} - -func (x *GetValueResponse) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *GetValueResponse) GetJsonData() string { - if x != nil { - return x.JsonData - } - return "" -} - -type SetValueRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The key of the setting. - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // The setting, in JSON format. - JsonData string `protobuf:"bytes,2,opt,name=json_data,json=jsonData,proto3" json:"json_data,omitempty"` -} - -func (x *SetValueRequest) Reset() { - *x = SetValueRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetValueRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetValueRequest) ProtoMessage() {} - -func (x *SetValueRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetValueRequest.ProtoReflect.Descriptor instead. -func (*SetValueRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{3} -} - -func (x *SetValueRequest) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *SetValueRequest) GetJsonData() string { - if x != nil { - return x.JsonData - } - return "" -} - -type GetAllRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *GetAllRequest) Reset() { - *x = GetAllRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetAllRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetAllRequest) ProtoMessage() {} - -func (x *GetAllRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetAllRequest.ProtoReflect.Descriptor instead. -func (*GetAllRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{4} -} - -type GetValueRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The key of the setting. - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` -} - -func (x *GetValueRequest) Reset() { - *x = GetValueRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetValueRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetValueRequest) ProtoMessage() {} - -func (x *GetValueRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetValueRequest.ProtoReflect.Descriptor instead. -func (*GetValueRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{5} -} - -func (x *GetValueRequest) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -type MergeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *MergeResponse) Reset() { - *x = MergeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MergeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MergeResponse) ProtoMessage() {} - -func (x *MergeResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MergeResponse.ProtoReflect.Descriptor instead. -func (*MergeResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{6} -} - -type SetValueResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *SetValueResponse) Reset() { - *x = SetValueResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetValueResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetValueResponse) ProtoMessage() {} - -func (x *SetValueResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetValueResponse.ProtoReflect.Descriptor instead. -func (*SetValueResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{7} -} - -type WriteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Path to settings file (e.g. /path/to/arduino-cli.yaml) - FilePath string `protobuf:"bytes,1,opt,name=file_path,json=filePath,proto3" json:"file_path,omitempty"` -} - -func (x *WriteRequest) Reset() { - *x = WriteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WriteRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WriteRequest) ProtoMessage() {} - -func (x *WriteRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WriteRequest.ProtoReflect.Descriptor instead. -func (*WriteRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{8} -} - -func (x *WriteRequest) GetFilePath() string { - if x != nil { - return x.FilePath - } - return "" -} - -type WriteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *WriteResponse) Reset() { - *x = WriteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WriteResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WriteResponse) ProtoMessage() {} - -func (x *WriteResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WriteResponse.ProtoReflect.Descriptor instead. -func (*WriteResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{9} -} - -type DeleteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The key of the setting to delete. - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` -} - -func (x *DeleteRequest) Reset() { - *x = DeleteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteRequest) ProtoMessage() {} - -func (x *DeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteRequest.ProtoReflect.Descriptor instead. -func (*DeleteRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{10} -} - -func (x *DeleteRequest) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -type DeleteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *DeleteResponse) Reset() { - *x = DeleteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteResponse) ProtoMessage() {} - -func (x *DeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteResponse.ProtoReflect.Descriptor instead. -func (*DeleteResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{11} -} - -var File_cc_arduino_cli_settings_v1_settings_proto protoreflect.FileDescriptor - -var file_cc_arduino_cli_settings_v1_settings_proto_rawDesc = []byte{ - 0x0a, 0x29, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, - 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x22, 0x2d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x6c, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, - 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2b, 0x0a, 0x0c, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x22, 0x41, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, - 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6a, - 0x73, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6a, 0x73, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x0f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x41, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x23, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x0f, - 0x0a, 0x0d, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x12, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x0a, 0x0c, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x22, 0x0f, 0x0a, 0x0d, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x21, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xdd, 0x04, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x06, 0x47, 0x65, - 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x05, 0x4d, - 0x65, 0x72, 0x67, 0x65, 0x12, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x65, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2b, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x12, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_cc_arduino_cli_settings_v1_settings_proto_rawDescOnce sync.Once - file_cc_arduino_cli_settings_v1_settings_proto_rawDescData = file_cc_arduino_cli_settings_v1_settings_proto_rawDesc -) - -func file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP() []byte { - file_cc_arduino_cli_settings_v1_settings_proto_rawDescOnce.Do(func() { - file_cc_arduino_cli_settings_v1_settings_proto_rawDescData = protoimpl.X.CompressGZIP(file_cc_arduino_cli_settings_v1_settings_proto_rawDescData) - }) - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescData -} - -var file_cc_arduino_cli_settings_v1_settings_proto_msgTypes = make([]protoimpl.MessageInfo, 12) -var file_cc_arduino_cli_settings_v1_settings_proto_goTypes = []interface{}{ - (*GetAllResponse)(nil), // 0: cc.arduino.cli.settings.v1.GetAllResponse - (*MergeRequest)(nil), // 1: cc.arduino.cli.settings.v1.MergeRequest - (*GetValueResponse)(nil), // 2: cc.arduino.cli.settings.v1.GetValueResponse - (*SetValueRequest)(nil), // 3: cc.arduino.cli.settings.v1.SetValueRequest - (*GetAllRequest)(nil), // 4: cc.arduino.cli.settings.v1.GetAllRequest - (*GetValueRequest)(nil), // 5: cc.arduino.cli.settings.v1.GetValueRequest - (*MergeResponse)(nil), // 6: cc.arduino.cli.settings.v1.MergeResponse - (*SetValueResponse)(nil), // 7: cc.arduino.cli.settings.v1.SetValueResponse - (*WriteRequest)(nil), // 8: cc.arduino.cli.settings.v1.WriteRequest - (*WriteResponse)(nil), // 9: cc.arduino.cli.settings.v1.WriteResponse - (*DeleteRequest)(nil), // 10: cc.arduino.cli.settings.v1.DeleteRequest - (*DeleteResponse)(nil), // 11: cc.arduino.cli.settings.v1.DeleteResponse -} -var file_cc_arduino_cli_settings_v1_settings_proto_depIdxs = []int32{ - 4, // 0: cc.arduino.cli.settings.v1.SettingsService.GetAll:input_type -> cc.arduino.cli.settings.v1.GetAllRequest - 1, // 1: cc.arduino.cli.settings.v1.SettingsService.Merge:input_type -> cc.arduino.cli.settings.v1.MergeRequest - 5, // 2: cc.arduino.cli.settings.v1.SettingsService.GetValue:input_type -> cc.arduino.cli.settings.v1.GetValueRequest - 3, // 3: cc.arduino.cli.settings.v1.SettingsService.SetValue:input_type -> cc.arduino.cli.settings.v1.SetValueRequest - 8, // 4: cc.arduino.cli.settings.v1.SettingsService.Write:input_type -> cc.arduino.cli.settings.v1.WriteRequest - 10, // 5: cc.arduino.cli.settings.v1.SettingsService.Delete:input_type -> cc.arduino.cli.settings.v1.DeleteRequest - 0, // 6: cc.arduino.cli.settings.v1.SettingsService.GetAll:output_type -> cc.arduino.cli.settings.v1.GetAllResponse - 6, // 7: cc.arduino.cli.settings.v1.SettingsService.Merge:output_type -> cc.arduino.cli.settings.v1.MergeResponse - 2, // 8: cc.arduino.cli.settings.v1.SettingsService.GetValue:output_type -> cc.arduino.cli.settings.v1.GetValueResponse - 7, // 9: cc.arduino.cli.settings.v1.SettingsService.SetValue:output_type -> cc.arduino.cli.settings.v1.SetValueResponse - 9, // 10: cc.arduino.cli.settings.v1.SettingsService.Write:output_type -> cc.arduino.cli.settings.v1.WriteResponse - 11, // 11: cc.arduino.cli.settings.v1.SettingsService.Delete:output_type -> cc.arduino.cli.settings.v1.DeleteResponse - 6, // [6:12] is the sub-list for method output_type - 0, // [0:6] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_cc_arduino_cli_settings_v1_settings_proto_init() } -func file_cc_arduino_cli_settings_v1_settings_proto_init() { - if File_cc_arduino_cli_settings_v1_settings_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MergeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetValueResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetValueRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetValueRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MergeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetValueResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_cc_arduino_cli_settings_v1_settings_proto_rawDesc, - NumEnums: 0, - NumMessages: 12, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_cc_arduino_cli_settings_v1_settings_proto_goTypes, - DependencyIndexes: file_cc_arduino_cli_settings_v1_settings_proto_depIdxs, - MessageInfos: file_cc_arduino_cli_settings_v1_settings_proto_msgTypes, - }.Build() - File_cc_arduino_cli_settings_v1_settings_proto = out.File - file_cc_arduino_cli_settings_v1_settings_proto_rawDesc = nil - file_cc_arduino_cli_settings_v1_settings_proto_goTypes = nil - file_cc_arduino_cli_settings_v1_settings_proto_depIdxs = nil -} diff --git a/rpc/cc/arduino/cli/settings/v1/settings.proto b/rpc/cc/arduino/cli/settings/v1/settings.proto deleted file mode 100644 index c05bfbef533..00000000000 --- a/rpc/cc/arduino/cli/settings/v1/settings.proto +++ /dev/null @@ -1,91 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -syntax = "proto3"; - -package cc.arduino.cli.settings.v1; - -option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1;settings"; - -// The SettingsService provides an interface to Arduino CLI configuration -// options -service SettingsService { - // List all the settings. - rpc GetAll(GetAllRequest) returns (GetAllResponse); - - // Set multiple settings values at once. - rpc Merge(MergeRequest) returns (MergeResponse); - - // Get the value of a specific setting. - rpc GetValue(GetValueRequest) returns (GetValueResponse); - - // Set the value of a specific setting. - rpc SetValue(SetValueRequest) returns (SetValueResponse); - - // Writes to file settings currently stored in memory - rpc Write(WriteRequest) returns (WriteResponse); - - // Deletes an entry and rewrites the file settings - rpc Delete(DeleteRequest) returns (DeleteResponse); -} - -message GetAllResponse { - // The settings, in JSON format. - string json_data = 1; -} - -message MergeRequest { - // The settings, in JSON format. - string json_data = 1; -} - -message GetValueResponse { - // The key of the setting. - string key = 1; - // The setting, in JSON format. - string json_data = 2; -} - -message SetValueRequest { - // The key of the setting. - string key = 1; - // The setting, in JSON format. - string json_data = 2; -} - -message GetAllRequest {} - -message GetValueRequest { - // The key of the setting. - string key = 1; -} - -message MergeResponse {} - -message SetValueResponse {} - -message WriteRequest { - // Path to settings file (e.g. /path/to/arduino-cli.yaml) - string file_path = 1; -} - -message WriteResponse {} - -message DeleteRequest { - // The key of the setting to delete. - string key = 1; -} - -message DeleteResponse {} diff --git a/rpc/cc/arduino/cli/settings/v1/settings_grpc.pb.go b/rpc/cc/arduino/cli/settings/v1/settings_grpc.pb.go deleted file mode 100644 index 82585686aa5..00000000000 --- a/rpc/cc/arduino/cli/settings/v1/settings_grpc.pb.go +++ /dev/null @@ -1,321 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v4.24.3 -// source: cc/arduino/cli/settings/v1/settings.proto - -package settings - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - SettingsService_GetAll_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/GetAll" - SettingsService_Merge_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/Merge" - SettingsService_GetValue_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/GetValue" - SettingsService_SetValue_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/SetValue" - SettingsService_Write_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/Write" - SettingsService_Delete_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/Delete" -) - -// SettingsServiceClient is the client API for SettingsService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type SettingsServiceClient interface { - // List all the settings. - GetAll(ctx context.Context, in *GetAllRequest, opts ...grpc.CallOption) (*GetAllResponse, error) - // Set multiple settings values at once. - Merge(ctx context.Context, in *MergeRequest, opts ...grpc.CallOption) (*MergeResponse, error) - // Get the value of a specific setting. - GetValue(ctx context.Context, in *GetValueRequest, opts ...grpc.CallOption) (*GetValueResponse, error) - // Set the value of a specific setting. - SetValue(ctx context.Context, in *SetValueRequest, opts ...grpc.CallOption) (*SetValueResponse, error) - // Writes to file settings currently stored in memory - Write(ctx context.Context, in *WriteRequest, opts ...grpc.CallOption) (*WriteResponse, error) - // Deletes an entry and rewrites the file settings - Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error) -} - -type settingsServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewSettingsServiceClient(cc grpc.ClientConnInterface) SettingsServiceClient { - return &settingsServiceClient{cc} -} - -func (c *settingsServiceClient) GetAll(ctx context.Context, in *GetAllRequest, opts ...grpc.CallOption) (*GetAllResponse, error) { - out := new(GetAllResponse) - err := c.cc.Invoke(ctx, SettingsService_GetAll_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *settingsServiceClient) Merge(ctx context.Context, in *MergeRequest, opts ...grpc.CallOption) (*MergeResponse, error) { - out := new(MergeResponse) - err := c.cc.Invoke(ctx, SettingsService_Merge_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *settingsServiceClient) GetValue(ctx context.Context, in *GetValueRequest, opts ...grpc.CallOption) (*GetValueResponse, error) { - out := new(GetValueResponse) - err := c.cc.Invoke(ctx, SettingsService_GetValue_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *settingsServiceClient) SetValue(ctx context.Context, in *SetValueRequest, opts ...grpc.CallOption) (*SetValueResponse, error) { - out := new(SetValueResponse) - err := c.cc.Invoke(ctx, SettingsService_SetValue_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *settingsServiceClient) Write(ctx context.Context, in *WriteRequest, opts ...grpc.CallOption) (*WriteResponse, error) { - out := new(WriteResponse) - err := c.cc.Invoke(ctx, SettingsService_Write_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *settingsServiceClient) Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error) { - out := new(DeleteResponse) - err := c.cc.Invoke(ctx, SettingsService_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// SettingsServiceServer is the server API for SettingsService service. -// All implementations must embed UnimplementedSettingsServiceServer -// for forward compatibility -type SettingsServiceServer interface { - // List all the settings. - GetAll(context.Context, *GetAllRequest) (*GetAllResponse, error) - // Set multiple settings values at once. - Merge(context.Context, *MergeRequest) (*MergeResponse, error) - // Get the value of a specific setting. - GetValue(context.Context, *GetValueRequest) (*GetValueResponse, error) - // Set the value of a specific setting. - SetValue(context.Context, *SetValueRequest) (*SetValueResponse, error) - // Writes to file settings currently stored in memory - Write(context.Context, *WriteRequest) (*WriteResponse, error) - // Deletes an entry and rewrites the file settings - Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) - mustEmbedUnimplementedSettingsServiceServer() -} - -// UnimplementedSettingsServiceServer must be embedded to have forward compatible implementations. -type UnimplementedSettingsServiceServer struct { -} - -func (UnimplementedSettingsServiceServer) GetAll(context.Context, *GetAllRequest) (*GetAllResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAll not implemented") -} -func (UnimplementedSettingsServiceServer) Merge(context.Context, *MergeRequest) (*MergeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Merge not implemented") -} -func (UnimplementedSettingsServiceServer) GetValue(context.Context, *GetValueRequest) (*GetValueResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetValue not implemented") -} -func (UnimplementedSettingsServiceServer) SetValue(context.Context, *SetValueRequest) (*SetValueResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetValue not implemented") -} -func (UnimplementedSettingsServiceServer) Write(context.Context, *WriteRequest) (*WriteResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Write not implemented") -} -func (UnimplementedSettingsServiceServer) Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedSettingsServiceServer) mustEmbedUnimplementedSettingsServiceServer() {} - -// UnsafeSettingsServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to SettingsServiceServer will -// result in compilation errors. -type UnsafeSettingsServiceServer interface { - mustEmbedUnimplementedSettingsServiceServer() -} - -func RegisterSettingsServiceServer(s grpc.ServiceRegistrar, srv SettingsServiceServer) { - s.RegisterService(&SettingsService_ServiceDesc, srv) -} - -func _SettingsService_GetAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetAllRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).GetAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_GetAll_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).GetAll(ctx, req.(*GetAllRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SettingsService_Merge_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MergeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).Merge(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_Merge_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).Merge(ctx, req.(*MergeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SettingsService_GetValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetValueRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).GetValue(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_GetValue_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).GetValue(ctx, req.(*GetValueRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SettingsService_SetValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetValueRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).SetValue(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_SetValue_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).SetValue(ctx, req.(*SetValueRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SettingsService_Write_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(WriteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).Write(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_Write_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).Write(ctx, req.(*WriteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SettingsService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).Delete(ctx, req.(*DeleteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// SettingsService_ServiceDesc is the grpc.ServiceDesc for SettingsService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var SettingsService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "cc.arduino.cli.settings.v1.SettingsService", - HandlerType: (*SettingsServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetAll", - Handler: _SettingsService_GetAll_Handler, - }, - { - MethodName: "Merge", - Handler: _SettingsService_Merge_Handler, - }, - { - MethodName: "GetValue", - Handler: _SettingsService_GetValue_Handler, - }, - { - MethodName: "SetValue", - Handler: _SettingsService_SetValue_Handler, - }, - { - MethodName: "Write", - Handler: _SettingsService_Write_Handler, - }, - { - MethodName: "Delete", - Handler: _SettingsService_Delete_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "cc/arduino/cli/settings/v1/settings.proto", -} diff --git a/client_example/README.md b/rpc/internal/client_example/README.md similarity index 100% rename from client_example/README.md rename to rpc/internal/client_example/README.md diff --git a/client_example/hello/hello.ino b/rpc/internal/client_example/hello/hello.ino similarity index 100% rename from client_example/hello/hello.ino rename to rpc/internal/client_example/hello/hello.ino diff --git a/client_example/main.go b/rpc/internal/client_example/main.go similarity index 85% rename from client_example/main.go rename to rpc/internal/client_example/main.go index 7ae3745a598..00f0acaa7f7 100644 --- a/client_example/main.go +++ b/rpc/internal/client_example/main.go @@ -29,7 +29,6 @@ import ( "time" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" ) @@ -44,7 +43,7 @@ func main() { // Establish a connection with the gRPC server, started with the command: // arduino-cli daemon - conn, err := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()) + conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatal("error connecting to arduino-cli rpc server, you can start it by running `arduino-cli daemon`") } @@ -63,8 +62,6 @@ func main() { // Create an instance of the gRPC clients. client := rpc.NewArduinoCoreServiceClient(conn) - settingsClient := settings.NewSettingsServiceClient(conn) - // Now we can call various methods of the API... // `Version` can be called without any setup or init procedure. @@ -75,40 +72,24 @@ func main() { callLoadSketch(client) // Use SetValue to configure the arduino-cli directories. - log.Println("calling SetValue") - callSetValue(settingsClient) + callSetValue(client, "directories.data", `"`+dataDir+`"`) + callSetValue(client, "directories.downloads", `"`+path.Join(dataDir, "staging")+`"`) + callSetValue(client, "directories.user", `"`+path.Join(dataDir, "sketchbook")+`"`) - // List all the settings. - log.Println("calling GetAll()") - callGetAll(settingsClient) + // List all settings + callConfigurationSave(client) // Merge applies multiple settings values at once. - log.Println("calling Merge()") - callMerge(settingsClient, `{"foo": {"value": "bar"}, "daemon":{"port":"422"}, "board_manager": {"additional_urls":["https://example.com"]}}`) - - log.Println("calling GetAll()") - callGetAll(settingsClient) - - log.Println("calling Merge()") - callMerge(settingsClient, `{"foo": {} }`) - - log.Println("calling GetAll()") - callGetAll(settingsClient) + callSetValue(client, "daemon.port", `"422"`) + callSetValue(client, "board_manager.additional_urls", `[ "https://example.com" ]`) - log.Println("calling Merge()") - callMerge(settingsClient, `{"foo": "bar" }`) + callConfigurationSave(client) - // Get the value of the foo key. - log.Println("calling GetValue(foo)") - callGetValue(settingsClient) + callSetValue(client, "daemon.port", "") + callGetValue(client, "daemon.port") + callGetValue(client, "directories.data") - // List all the settings. - log.Println("calling GetAll()") - callGetAll(settingsClient) - - // Write settings to file. - log.Println("calling Write()") - callWrite(settingsClient) + callConfigurationSave(client) // Before we can do anything with the CLI, an "instance" must be created. // We keep a reference to the created instance because we will need it to @@ -121,7 +102,7 @@ func main() { // We set up the proxy and then run the update to verify that the proxy settings are currently used log.Println("calling setProxy") - callSetProxy(settingsClient) + callSetProxy(client) // With a brand new instance, the first operation should always be updating // the index. @@ -145,11 +126,6 @@ func main() { log.Println("calling PlatformInstall(arduino:samd@1.6.19)") callPlatformInstall(client, instance) - // Now list the installed platforms to double check previous installation - // went right. - log.Println("calling PlatformList()") - callPlatformList(client, instance) - // Upgrade the installed platform to the latest version. log.Println("calling PlatformUpgrade(arduino:samd)") callPlatformUpgrade(client, instance) @@ -252,24 +228,24 @@ func callVersion(client rpc.ArduinoCoreServiceClient) { log.Printf("arduino-cli version: %v", versionResp.GetVersion()) } -func callSetValue(client settings.SettingsServiceClient) { - _, err := client.SetValue(context.Background(), - &settings.SetValueRequest{ - Key: "directories", - JsonData: `{"data": "` + dataDir + `", "downloads": "` + path.Join(dataDir, "staging") + `", "user": "` + path.Join(dataDir, "sketchbook") + `"}`, +func callSetValue(client rpc.ArduinoCoreServiceClient, key, jsonValue string) { + log.Printf("Calling SetValue: %s = %s", key, jsonValue) + _, err := client.SettingsSetValue(context.Background(), + &rpc.SettingsSetValueRequest{ + Key: key, + EncodedValue: jsonValue, }) if err != nil { log.Fatalf("Error setting settings value: %s", err) - } } -func callSetProxy(client settings.SettingsServiceClient) { - _, err := client.SetValue(context.Background(), - &settings.SetValueRequest{ - Key: "network.proxy", - JsonData: `"http://localhost:3128"`, +func callSetProxy(client rpc.ArduinoCoreServiceClient) { + _, err := client.SettingsSetValue(context.Background(), + &rpc.SettingsSetValueRequest{ + Key: "network.proxy", + EncodedValue: `"http://localhost:3128"`, }) if err != nil { @@ -277,11 +253,10 @@ func callSetProxy(client settings.SettingsServiceClient) { } } -func callUnsetProxy(client settings.SettingsServiceClient) { - _, err := client.SetValue(context.Background(), - &settings.SetValueRequest{ - Key: "network.proxy", - JsonData: `""`, +func callUnsetProxy(client rpc.ArduinoCoreServiceClient) { + _, err := client.SettingsSetValue(context.Background(), + &rpc.SettingsSetValueRequest{ + Key: "network.proxy", }) if err != nil { @@ -289,49 +264,30 @@ func callUnsetProxy(client settings.SettingsServiceClient) { } } -func callMerge(client settings.SettingsServiceClient, jsonData string) { - _, err := client.Merge(context.Background(), - &settings.MergeRequest{ - JsonData: jsonData, - }) - - if err != nil { - log.Fatalf("Error merging settings: %s", err) - } -} - -func callGetValue(client settings.SettingsServiceClient) { - getValueResp, err := client.GetValue(context.Background(), - &settings.GetValueRequest{ - Key: "foo", +func callGetValue(client rpc.ArduinoCoreServiceClient, key string) { + getValueResp, err := client.SettingsGetValue(context.Background(), + &rpc.SettingsGetValueRequest{ + Key: key, }) if err != nil { log.Fatalf("Error getting settings value: %s", err) } - log.Printf("Value: %s: %s", getValueResp.GetKey(), getValueResp.GetJsonData()) + log.Printf("%s = %s", key, getValueResp.GetEncodedValue()) } -func callGetAll(client settings.SettingsServiceClient) { - getAllResp, err := client.GetAll(context.Background(), &settings.GetAllRequest{}) +func callConfigurationSave(client rpc.ArduinoCoreServiceClient) { + log.Println("calling ConfigurationSave() >>") + getAllResp, err := client.ConfigurationSave(context.Background(), &rpc.ConfigurationSaveRequest{ + SettingsFormat: "json", + }) if err != nil { log.Fatalf("Error getting settings: %s", err) } - log.Printf("Settings: %s", getAllResp.GetJsonData()) -} - -func callWrite(client settings.SettingsServiceClient) { - _, err := client.Write(context.Background(), - &settings.WriteRequest{ - FilePath: path.Join(dataDir, "written-settings.yml"), - }) - - if err != nil { - log.Fatalf("Error writing settings: %s", err) - } + log.Printf("Settings follow:\n\n%s", getAllResp.GetEncodedSettings()) } func createInstance(client rpc.ArduinoCoreServiceClient) *rpc.Instance { @@ -339,7 +295,7 @@ func createInstance(client rpc.ArduinoCoreServiceClient) *rpc.Instance { if err != nil { log.Fatalf("Error creating server instance: %s", err) } - return res.Instance + return res.GetInstance() } func initInstance(client rpc.ArduinoCoreServiceClient, instance *rpc.Instance) { @@ -420,7 +376,7 @@ func callPlatformSearch(client rpc.ArduinoCoreServiceClient, instance *rpc.Insta for _, plat := range platforms { // We only print ID and version of the platforms found but you can look // at the definition for the rpc.Platform struct for more fields. - log.Printf("Search result: %+v - %+v", plat.GetId(), plat.GetLatest()) + log.Printf("Search result: %+v - %+v", plat.GetMetadata().GetId(), plat.GetLatestVersion()) } } @@ -464,21 +420,6 @@ func callPlatformInstall(client rpc.ArduinoCoreServiceClient, instance *rpc.Inst } } -func callPlatformList(client rpc.ArduinoCoreServiceClient, instance *rpc.Instance) { - listResp, err := client.PlatformList(context.Background(), - &rpc.PlatformListRequest{Instance: instance}) - - if err != nil { - log.Fatalf("List error: %s", err) - } - - for _, plat := range listResp.GetInstalledPlatforms() { - // We only print ID and version of the installed platforms but you can look - // at the definition for the rpc.Platform struct for more fields. - log.Printf("Installed platform: %s - %s", plat.GetId(), plat.GetInstalled()) - } -} - func callPlatformUpgrade(client rpc.ArduinoCoreServiceClient, instance *rpc.Instance) { upgradeRespStream, err := client.PlatformUpgrade(context.Background(), &rpc.PlatformUpgradeRequest{ @@ -545,8 +486,8 @@ func callBoardSearch(client rpc.ArduinoCoreServiceClient, instance *rpc.Instance log.Fatalf("Error getting board data: %s\n", err) } - for _, board := range res.Boards { - log.Printf("Board Name: %s, Board Platform: %s\n", board.Name, board.Platform.Id) + for _, board := range res.GetBoards() { + log.Printf("Board Name: %s, Board Platform: %s\n", board.GetName(), board.GetPlatform().GetMetadata().GetId()) } } @@ -674,16 +615,16 @@ func callBoardListWatch(client rpc.ArduinoCoreServiceClient, instance *rpc.Insta } else if err != nil { log.Fatalf("Board list watch error: %s\n", err) } - if res.EventType == "error" { - log.Printf("res: %s\n", res.Error) + if res.GetEventType() == "error" { + log.Printf("res: %s\n", res.GetError()) continue } - log.Printf("event: %s, address: %s\n", res.EventType, res.Port.Port.Address) - if res.EventType == "add" { - log.Printf("protocol: %s, ", res.Port.Port.Protocol) - log.Printf("protocolLabel: %s, ", res.Port.Port.ProtocolLabel) - log.Printf("boards: %s\n\n", res.Port.MatchingBoards) + log.Printf("event: %s, address: %s\n", res.GetEventType(), res.GetPort().GetPort().GetAddress()) + if res.GetEventType() == "add" { + log.Printf("protocol: %s, ", res.GetPort().GetPort().GetProtocol()) + log.Printf("protocolLabel: %s, ", res.GetPort().GetPort().GetProtocolLabel()) + log.Printf("boards: %s\n\n", res.GetPort().GetMatchingBoards()) } } }() @@ -1019,13 +960,14 @@ func waitForPrompt(debugStreamingOpenClient rpc.ArduinoCoreService_DebugClient, func callLoadSketch(client rpc.ArduinoCoreServiceClient) { currDir, _ := os.Getwd() - sketch, err := client.LoadSketch(context.Background(), &rpc.LoadSketchRequest{ + sketchResp, err := client.LoadSketch(context.Background(), &rpc.LoadSketchRequest{ SketchPath: filepath.Join(currDir, "hello"), }) if err != nil { log.Fatalf("Error getting version: %s", err) } + sketch := sketchResp.GetSketch() log.Printf("Sketch main file: %s", sketch.GetMainFile()) log.Printf("Sketch location: %s", sketch.GetLocationPath()) log.Printf("Other sketch files: %v", sketch.GetOtherSketchFiles()) diff --git a/client_example/squid.conf b/rpc/internal/client_example/squid.conf similarity index 100% rename from client_example/squid.conf rename to rpc/internal/client_example/squid.conf diff --git a/rpc/internal/get_version_example/main.go b/rpc/internal/get_version_example/main.go new file mode 100644 index 00000000000..0143a14d1e1 --- /dev/null +++ b/rpc/internal/get_version_example/main.go @@ -0,0 +1,45 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package main + +import ( + "context" + "log" + + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +func main() { + // Establish a connection with the gRPC server + conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + log.Println(err) + log.Fatal("error connecting to arduino-cli rpc server, you can start it by running `arduino-cli daemon`") + } + defer conn.Close() + + // Create an instance of the gRPC clients. + cli := rpc.NewArduinoCoreServiceClient(conn) + + // Now we can call various methods of the API... + versionResp, err := cli.Version(context.Background(), &rpc.VersionRequest{}) + if err != nil { + log.Fatalf("Error getting version: %s", err) + } + log.Printf("arduino-cli version: %v", versionResp.GetVersion()) +} diff --git a/rpc/internal/list_cores_example/main.go b/rpc/internal/list_cores_example/main.go new file mode 100644 index 00000000000..f627ee6e448 --- /dev/null +++ b/rpc/internal/list_cores_example/main.go @@ -0,0 +1,71 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package main + +import ( + "context" + "fmt" + "io" + "log" + + "github.com/arduino/arduino-cli/commands" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" +) + +func main() { + // Create a new ArduinoCoreServer + srv := commands.NewArduinoCoreServer() + + // Disable logging + logrus.SetOutput(io.Discard) + + // Create a new instance in the server + ctx := context.Background() + resp, err := srv.Create(ctx, &rpc.CreateRequest{}) + if err != nil { + log.Fatal("Error creating instance:", err) + } + instance := resp.GetInstance() + + // Defer the destruction of the instance + defer func() { + if _, err := srv.Destroy(ctx, &rpc.DestroyRequest{Instance: instance}); err != nil { + log.Fatal("Error destroying instance:", err) + } + fmt.Println("Instance successfully destroyed") + }() + + // Initialize the instance + initStream := commands.InitStreamResponseToCallbackFunction(ctx, func(r *rpc.InitResponse) error { + fmt.Println("INIT> ", r) + return nil + }) + if err := srv.Init(&rpc.InitRequest{Instance: instance}, initStream); err != nil { + log.Fatal("Error during initialization:", err) + } + + // Search for platforms and output the result + searchResp, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{Instance: instance}) + if err != nil { + log.Fatal("Error searching for platforms:", err) + } + for _, platformSummary := range searchResp.GetSearchOutput() { + installed := platformSummary.GetInstalledRelease() + meta := platformSummary.GetMetadata() + fmt.Printf("%30s %8s %s\n", meta.GetId(), installed.GetVersion(), installed.GetName()) + } +} diff --git a/version/version.go b/version/version.go index 8a207bfa75d..2a493597e12 100644 --- a/version/version.go +++ b/version/version.go @@ -16,10 +16,7 @@ package version import ( - "os" - "path/filepath" - - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" ) // VersionInfo contains all info injected during build @@ -56,7 +53,7 @@ func NewInfo(application string) *Info { } func (i *Info) String() string { - return tr("%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s", i.Application, i.Status, i.VersionString, i.Commit, i.Date) + return i18n.Tr("%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s", i.Application, i.Status, i.VersionString, i.Commit, i.Date) } // Data implements feedback.Result interface @@ -70,5 +67,5 @@ func init() { versionString = defaultVersionString } - VersionInfo = NewInfo(filepath.Base(os.Args[0])) + VersionInfo = NewInfo("arduino-cli") }