@totvs/tds-ls
Version:
Totvs Language Server
524 lines (380 loc) • 19.9 kB
Markdown
# TDSCLi (LS)
O TDS**CLi**-LS (**C**ommand **Li**ne) é uma ferramenta do ecossistema **TOTVS Protheus** que permite ações como a compilação e aplicação de patchs via linha de comando.
Ele utiliza o **AdvPLS**, que está disponível no diretório do plugin do **TDS-VSCode** para os três sistemas operacionais homologados, conforme exemplo abaixo.

> Mais informações sobre o plugin [clique aqui](https://marketplace.visualstudio.com/items?itemName=totvs.tds-vscode).
## Utilizando o AdvPLS
Para utilização da ferramenta é necessária a criação de um **arquivo de execução**, explicado a seguir, chamado através do parâmetro `--tdsCli`.
> `> advpls --tdsCli=<params_file>`
o AdvPLS permite executar múltiplas ações em uma única chamada, por exemplo:
* Conexão ao AppServer (action=**authentication**);
* Compilação de um conjunto de fontes (**compile**);
* Defrag do RPO (**defragRPO**)
## Modo de compatibilidade
O TDSCli-LS possui um modo de compatibilidade com o TDSCli-Eclipse, para mais informações [clique aqui](#compatibilidade_legado).
## Arquivo de execução
Recomendamos o uso de um arquivo de execução com a extensão **.INI**, pois editores como o próprio VSCode farão seu *syntax highlight*, facilitando o desenvolvimento.
### Características do arquivo de execução
* As tags "`#`" ou "`;`" representam os comentários do arquivo de execução;
* Use a tag `[]` para subdividir as seções a serem executadas, exemplo:
```ini
;Exemplo
[Conectando]
action = authentication
...
[Compacta RPO]
action = defragRPO
```
* **Importante**: Duas seções **não devem ser declaradas** no arquivo de execução como subdivisão customizada:
* `[geral] -> apenas para uso interno`
* `[user] -> onde definimos as variáveis de ambiente`
## Usando caminhos relativos ou absolutos
Quando for necessário "apontar" para um arquivo, como um patch por exemplo, você poderá fazer uso de caminhos absolutos:
> **Windows:** `C:\dir\file.ptm` **ou Linux:** `/home/user/dir/file.ptm`
Ou poderá utilizar caminhos relativos ao diretório do seu arquivo de execução:
> **Windows:** `dir\file.ptm` **ou Linux:** `dir/file.ptm`
Prefira usar **caminhos absolutos**, garantindo a correta localização dos arquivos.
Você pode utilizar a barra **`/`** como separador de diretórios independentemente do seu sistema operacional.
> A execução do TDSCli-LS no **Linux** deve respeitar as regras do *AppServer Protheus* para este sistema operacional, que são:
* Utilize apenas **caracteres minúsculos** na composição do diretorio/arquivo.ext;
* **Não utilize acentuação** na composição diretorio/arquivo.ext.
## Exemplo
Agora que conhecemos o arquivo de execução vamos ver um exemplo:
```ini
; logToFile: diretorio/arquivo para arquivar log da execução
; showConsoleOutput: True exibe informações no console
logToFile=/home/mansano/tdscli/logs/log1.log
showConsoleOutput=true
; Na seção [user] definimos as variáveis de ambiente
[user]
INCLUDE_DIR=/home/mansano/_c/lib120/src/include/
; Conexão e autenticação com o AppServer
[authentication]
action=authentication
server=192.168.0.198
port=5025
secure=0
build=7.00.170117A
environment=producao
user=admin
psw=
; Compilando dois fontes
[compile]
action=compile
program=/home/mansano/tdscli/src/prog1.prw,/home/mansano/tdscli/src/prog2.prw
recompile=T
includes=${INCLUDE_DIR}
```
### Retorno
```
[LOG] Starting connection to the server 'tdscli.serverName' (192.168.0.198@5025)
[LOG] Connection to the server 'tdscli.serverName' finished.
[LOG] Starting user 'admin' authentication.
[LOG] Authenticating...
[LOG] User authenticated successfully.
[LOG] User 'admin' authentication finished.
[INFO] Starting recompile.
[LOG] Starting build for environment producao.
[LOG] Start recompile of 2 files.
[LOG] Start regular compiling /home/mansano/tdscli/src/prog1.prw (1/2).
[LOG] [SUCCESS] Source /home/mansano/tdscli/src/prog1.prw compiled successfully.
[LOG] Start regular compiling /home/mansano/tdscli/src/prog2.prw (2/2).
[LOG] [SUCCESS] Source /home/mansano/tdscli/src/prog2.prw compiled successfully.
[LOG] Committing end build.
[LOG] All files compiled successfully.
[INFO] Recompile finished.
```
## Parâmetros gerais
Os parâmetros gerais devem sempre ser inseridos no **início do arquivo** de execução.
| Parâmetro | Valor | Descrição |
|-------------------|-----------------------------------------|-------------------------------------------------------------------------------|
| logToFile | diretorio/arquivo.log | Arquivo que receberá as informações da execução do arquivo |
| showConsoleOutput | True (T) ou False (F) | True = Exibe informações no console |
### Exemplo
```ini
; logToFile: diretorio/arquivo para arquivar log da execução
; showConsoleOutput: True exibe informações no console
logToFile=/home/mansano/tdscli/logs/log1.log
showConsoleOutput=true
```
## Seção `[user]`
Na seção `[user]` definimos as variáveis de ambiente, que podem ser usadas em todas as seções do arquivo de execução.
> Para utilização da variável de ambiente use a macro `${var_name}`
### Exemplo
```ini
[user]
INCLUDE_DIR=/home/mansano/_c/lib120/src/include/
...
[compile]
action=compile
includes=${INCLUDE_DIR}
```
## Seções de usuário
As seções permitem **organizar** seu arquivo de execução, para seu nome é permitido uso de espaços e caracteres especiais.
### Exemplo
```ini
[compilação de arquivos]
action=compile
```
A execução do **arquivo é sequencial**, percorrendo todas as seções cadastradas.
> O parâmetro **`skip=True`** utilizado em uma seção permite ignorar sua execução, isso pode ser util caso necessite reaproveitar o mesmo arquivo de execução para várias finalidades.
> Cada seção contém uma **`action`**, explicadas a seguir.
## `action = validate`
Obtém a versão de *release* do AppServer, permitindo seu uso na tag **build** da **action authentication**.
| Parâmetro | Valor | Descrição |
|-----------|----------|---------------------------------|
| server | IP | Endereço IP do AppServer |
| port | numérico | Porta do AppServer |
| secure | 1 ou 0 | Se a conexão é segura ou não, 1=Conexão segura, 0=Conexão convencional |
### Exemplo
```ini
[validate]
action=validate
server=192.168.0.198
port=5025
secure=0
```
### Retorno
```
[LOG] Appserver detected with build version: 7.00.170117A and secure: 0
build: 7.00.170117A / secure: 0
```
## `action = getID`
Obtém o ID para a chave de compilação.
### Exemplo
```ini
[getID]
action=getID
```
### Retorno
```
ID: ED75-E184
```
## `action = authorization`
Aplica a chave de compilação.
> O **ID** do TDSCli-LS é diferente do TDSCLi-Eclipse, tornando as **chaves de compilação** incompatíveis.
| Parâmetro | Valor | Descrição |
|---------------|-----------------------------------------|--------------------------------------------|
| authorization | Caminho relativo ou absoluto do arquivo | Define o arquivo com a chave de compilação |
```ini
[authorization]
action=authorization
authorization=/home/mansano/tdscli/ED75-E184.aut
```
> Em caso de erro na carga do arquivo, confirme o ID da estação de trabalho, utilizando a action **getID**.
## `action = authentication`
Executa a conexão com o AppServer.
| Parâmetro | Valor | Descrição |
|-------------|-------------------|-----------------------------------------------|
| server | IP | Endereço do AppServer |
| port | numérico | Porta em que o AppServer escuta |
| secure | 1 ou 0 | Se a conexão é segura ou não, 1=Conexão segura, 0=Conexão convencional |
| build | *build* ou *AUTO* | Release do AppServer ou AUTO para detecção automática |
| user | "nome de usuário" | Usuário para autenticação |
| psw | "senha" | Senha para autenticação |
| environment | "ambiente" | Ambiente na qual será efetuada a autenticação |
### Exemplo
```ini
[authentication]
action=authentication
server=192.168.0.198
port=5025
secure=0
build=AUTO
environment=producao
user=admin
psw=
```
### Retorno
```
[LOG] Appserver detected with build version: 7.00.170117A and secure: 0
[LOG] Starting connection to the server 'tdscli.serverName' (192.168.0.198@5025)
[LOG] Connection to the server 'tdscli.serverName' finished.
[LOG] Starting user 'admin' authentication.
[LOG] Authenticating...
[LOG] User authenticated successfully.
[LOG] User 'admin' authentication finished.
```
## `action = compile`
Executa a compilação/recompilação de programas no RPO.
> Esta action depende da **action authentication**.
> Se for executar uma compilação que necessite do uso da **chave de compilação** crie a seção com a **action `authorization`** antes desta.
| Parâmetro | Valor | Descrição |
|-------------|-------------------------------------------------------------|-----------------------------------------------------------------------------------|
| program | Nomes dos arquivos e/ou diretórios separados por `,` ou `;` | Programas a serem processados |
| programList | Caminho relativo ou absoluto do arquivo | Arquivo contendo os nomes dos arquivos (**fontes ou recursos**) a serem processados (**um arquivo por linha**) |
| recompile | True (T) ou False (F) | True se deve efetuar recompilação |
| includes | Diretórios com includes separados por `,` ou `;` | Arquivos de includes, **O caminho para os diretórios de include deve sempre ser absoluto, ex: c:\dir\includes pois será utilizado pelo AppServer no momento da compilação** |
> Informar a opção `program` ou `programList` **mas não ambas**.
### Exemplo
```ini
[compile]
action=compile
program=/home/mansano/tdscli/src/prog1.prw,/home/mansano/tdscli/src/prog2.prw
recompile=T
includes=/home/mansano/_c/lib120/src/include/
```
### Retorno
```
[INFO] Starting recompile.
[LOG] Starting build for environment producao.
[LOG] Start recompile of 2 files.
[LOG] Start regular compiling /home/mansano/tdscli/src/prog1.prw (1/2).
[LOG] [SUCCESS] Source /home/mansano/tdscli/src/prog1.prw compiled successfully.
[LOG] Start regular compiling /home/mansano/tdscli/src/prog2.prw (2/2).
[LOG] [SUCCESS] Source /home/mansano/tdscli/src/prog2.prw compiled successfully.
[LOG] Committing end build.
[LOG] All files compiled successfully.
[INFO] Recompile finished.
```
## `action = patchGen`
Executa a geração de patch.
> Esta action depende da **action authentication**.
| Parâmetro | Valor | Descrição |
|------------------|-------------------------------------------------------------|-----------------------------------------------------------------------------------|
| saveLocal | Caminho relativo ou absoluto do arquivo | Diretório onde será gerado o patch localmente |
| saveRemote | Caminho relativo | Diretório onde será gerado o patch remotamente (AppServer) |
| fileResource | Nomes dos arquivos e/ou diretórios separados por `,` ou `;` | Fontes e Recursos a serem processados |
| fileResourceList | Caminho relativo ou absoluto do arquivo | Arquivo contendo os nomes dos arquivos (**fontes ou recursos**) a serem processados (**um arquivo por linha**) |
| patchType | PTM, UPD ou PAK | Extensões permitidas para arquivos de patches |
> Informar a opção `saveLocal` ou `saveRemote` **mas não ambas**.
> Informar a opção `fileResource` ou `fileResourceList` **mas não ambas**.
### Exemplo
```ini
[patchGen]
action=patchGen
fileResource=prog1,prog2
patchType=PTM
saveLocal=/home/mansano/tdscli/patch/
```
### Retorno
```
[INFO] Starting generate patch.
[LOG] Starting build for environment producao.
[LOG] Patch generated successfully.
[LOG] Patch sent from appserver to user machine.
[LOG] Cleaning up appserver OK.
[LOG] Committing end build.
[INFO] Generate patch finished.
```
## `action = patchApply`
Efetua a aplicação de patch.
> Esta action depende da **action authentication**.
| Parâmetro | Valor | Descrição |
|-----------------|-----------------------------------------|---------------------------------------------------------------------------------------------|
| patchFile | Caminho relativo ou absoluto do arquivo | Arquivo de patch a ser aplicado |
| localPatch | True (T) ou False (F) | **True** se o arquivo de patch é local ou **False** se o arquivo estiver em um diretório no AppServer |
| validatePatch | True (T) ou False (F) | True para validação do patch |
| applyOldProgram | True (T) ou False (F) | True para aplicação de programas com data de compilação mais antigas que as existentes no RPO |
### Exemplo
```ini
[patchApply]
action=patchApply
patchFile=/home/mansano/tdscli/patch/tttp120.ptm
localPatch=True
applyOldProgram=True
```
### Retorno
```
[INFO] Starting apply patch.
[LOG] Starting build for environment producao.
[LOG] Applying patch file: /home/mansano/tdscli/patch/tttp120.ptm
[LOG] Patch (tttp120.ptm) successfully applied.
[LOG] Committing end build.
[INFO] Apply patch finished.
```
## `action = [patchInfo]`
Obtém as informações de um patch.
> Esta action depende da **action authentication**.
| Parâmetro | Valor | Descrição |
|------------|-----------------------------------------|-----------------------------------------------------------|
| patchFile | Caminho relativo ou absoluto do arquivo | Arquivo de patch a ser analisado |
| localPatch | True (T) ou False (F) | **True** se o arquivo de patch é local ou **False** se o arquivo estiver em um diretório no AppServer |
| output | Caminho relativo ou absoluto do arquivo | Arquivo com as informações contidas no patch |
### Exemplo
```ini
[patchInfo]
action=patchInfo
patchFile=/home/mansano/tdscli/patch/tttp120.ptm
output=/home/mansano/tdscli/patch/tttp120.out
localPatch=True
```
### Retorno
```
[INFO] Starting patch info.
[LOG] Patch file: /home/mansano/tdscli/patch/tttp120.ptm
[LOG] Starting build for environment producao.
[LOG] Committing end build.
[INFO] Patch info finished.
```
## `action = deleteProg`
Remove programas do RPO conectado.
> Esta action depende da **action authentication**.
> Se for executar uma remoção que necessite do uso da **chave de compilação** crie a seção com a **action `authorization`** antes desta.
| Parâmetro | Valor | Descrição |
|-------------|-------------------------------------------------------------|------------------------------------------------------------------------------------|
| program | Nomes dos arquivos e/ou diretórios separados por `,` ou `;` | Programas a serem processados |
| programList | Caminho relativo ou absoluto do arquivo | Arquivo contendo os nomes dos arquivos (**fontes ou recursos**) a serem processados (**um arquivo por linha**) |
> Informar a opção `program` ou `programList` **mas não ambas**.
### Exemplo
```ini
[deleteProg]
action=deleteProg
program=prog1.prw
```
### Retorno
```
[INFO] Starting program deletion.
[LOG] Starting build for environment producao.
[LOG] All programs successfully deleted from RPO.
[LOG] Committing end build.
[INFO] Program deletion finished.
```
## `action = defragRPO`
Executa a desfragmentação do RPO.
> Esta action depende da **action authentication**.
### Exemplo
```ini
[defragRPO]
action=defragRPO
```
### Retorno
```
[INFO] Starting RPO defragmentation.
[LOG] Starting build for environment producao.
[WARN] This process may take a while.
[LOG] RPO successfully defragged.
[LOG] Committing end build.
[INFO] RPO defragmentation finished.
```
## <a name="compatibilidade_legado"></a>Compatibilidade (legado)
Para utilizar o modo de compatibilidade com **TDSCLi-Eclipse** usaremos arquivos de script (batch/bash), específicos para cada sistema operacional, e apenas uma **action pode ser chamada por execução**:
> Windows: `> tdscli.bat <action> <parâmetros_da_ação>`
> Linux: `> ./tdscli.sh <action> <parâmetros_da_ação>`
> Mac OS: `> ./tdscli.sh <action> <parâmetros_da_ação>`
### Usando parâmetros em linha de comando
`> tdscli.bat <action> <parametro_da_acao_1> <parametro_da_acao_2> <parametro_da_acao_3>...`
### Usando parâmetros em arquivo
`> tdscli.bat <action> @parametros_da_acao.txt`
> Os parâmetros obrigatórios **dependem da action**, porém em todas as actions os parâmetros de conexão da **action authentication** devem ser informados.
### Exemplo usando **parâmetros em linha de comando**
`> tdscli.bat compile serverType=AdvPL server=localhost port=1234 build=7.00.170117A environment=env user=user psw=pass includes=D:/servers/protheus/includes program=D:/fontes/advpl/prg_0001.prw;D:/fontes/advpl/prg_0002.prw;D:/fontes/advpl/prg_0003.prw authorization=D:/chave_compilacao/chave.aut recompile=t`
### Exemplo usando **parâmetros em arquivo**
`> tdscli.bat compile @compile.txt`
```ini
;compile.txt
;Exemplo de arquivo de execução para o TDSCLi (legado)
;parametros da acao authentication
serverType=AdvPL
server=localhost
port=1234
build=7.00.170117A
user=user
psw=pass
environment=env
;parametros da acao compile
includes=D:/servers/protheus/includes
program=D:/fontes/advpl/prg_0001.prw;D:/fontes/advpl/prg_0002.prw;D:/fontes/advpl/prg_0003.prw
authorization=D:/chave_compilacao/chave.aut
recompile=t
```