Controle de Código da VFS

Introdução

É possível criar e visualizar alterações nos arquivos da Virtual File System utilizando o Source Control do VS Code antes que essas alterações sejam efetivadas na base de dados. São as chamadas alterações pendentes (Pending Changes).

Para criar uma alteração pendente, o usuário deve:

  • Clicar em uma das opções entre Update From ou Update To no menu de contexto de um arquivo da VFS ou executar o respectivo comando via paleta de comandos com o arquivo desejado aberto.
  • Para o Update From, selecionar origem do conteúdo a ser sobrescrito no arquivo que foi escolhido. O usuário pode escolher de uma das bases conectadas ou da área de transferência (clipboard). Caso o usuário escolha uma base como fonte, o conteúdo usado para alterar o arquivo será o conteúdo do arquivo de mesma chave da base.
  • Para o Update To, selecionar a base de destino para a qual as alterações no arquivo corrente serão enviadas.

VFS Update From

Feito este processo, a alteração pendente será exibida no Source Control e um diff com as alterações será aberto no editor.

É importante ressaltar que uma alteração pendente nunca é imediatamente salva na Virtual File System, existindo apenas localmente enquanto o usuário não efetivá-la. Adiante será explicado como efetivar alterações.

Exemplo

A base de dados BASE-D possui um arquivo teste.js, e BASE-H possui o mesmo arquivo, de mesma chave, mas com o conteúdo diferente. Caso o usuário queira atualizar o arquivo teste.js em BASE-H a partir da BASE-D, ele deve estar com as duas bases conectadas em seu workspace e pode escolher um dos seguintes procedimentos:

  • Opção 1:

    • Executar Update From a partir do arquivo teste.js da BASE-H.
    • Selecionar como origem a BASE-D.
  • Opção 2:

    • Executar Update To a partir do arquivo teste.js da BASE-D.
    • Selecionar como destino a BASE-D.
  • Opção 3:

    • Copiar o conteúdo do arquivo teste.js da BASE-D.
    • Executar Update From a partir do arquivo teste.js da BASE-H.
    • Selecionar como origem o clipboard.

Ao fazer isso, o Source Control será preenchido com a alteração pendente, e um diff será aberto com o atual conteúdo de teste.js na BASE-H sendo exibido à esquerda, e o novo conteúdo a ser salvo na BASE-H (ou seja, o conteúdo proveniente da BASE-D) na direita. O conteúdo na direita é editável.

O usuário poderia também, por exemplo, criar uma alteração pendente para um arquivo utilizando como fonte um conteúdo avulso no clipboard não necessariamente relacionado a alguma outra base. Isso pode ser útil nos casos em que o desenvolvedor deseja salvar seu trabalho em andamento sem que isso seja persistido de imediato na Virtual File System.

Anatomia do Source Control

A seguir, um exemplo de uma alteração pendente criada para a base nginstack:

VFS Source Control

Temos em:

  1. Ações envolvendo a view do source control e a base de dados como um todo. Da esquerda para a direita:
    • View as Tree/View as a list: Altera o formato de visualização do source control.
    • Refresh: Atualiza as alterações pendentes daquela base.
    • Save All Changes on VFS: Efetiva na VFS todas as alterações listadas naquela base.
    • Views and More Actions: Acessa outras ações e opções.
  2. Ações específicas para a alteração pendente no arquivo. Da esquerda para a direita:
    • Discard Changes: Descarta alterações.
    • Edit Pending Change: Abre o arquivo de edição da alteração pendente.
    • Open Original File: Abre o arquivo original da VFS, sem as alterações.
    • Save Changes on VFS: Efetiva as alterações daquele arquivo na VFS.
  3. Ações específicas para a alteração pendente no arquivo, semelhantes ao menu 2:
    • Discard Changes
    • Save Changes on VFS

Todas as ações nos botões do menu 2 também estão presentes no menu de contexto do arquivo com alterações pendentes listado no source control. Todas as ações do menu 3 também estão presentes no menu de contexto do arquivo de alterações pendentes. No menu Views and More Actions, temos a opção Discard All Changes, que descarta todas as alterações listadas naquela base.

Semelhante aos arquivos da VFS, em que a raiz dos breadcrumbs tem o formato base (vfs). Os arquivos de alterações pendentes possuem o formato base (change). No caso do exemplo acima, temos nginstack (change).