Wiki
Distribuição
Copiar arquivos (plugins, conteúdo compartilhado) de um repositório de origem para um repositório de destino por padrões de caminho. Publicação, remapeamento, bloqueios ignorados.
Introdução
A distribuição copia arquivos (um plugin, um pacote de conteúdo compartilhado) de um repositório de origem para um repositório de destino, limitando-se a padrões de caminho. Ela cria novas revisões no destino, de modo que a sincronização incremental habitual propaga o conteúdo aos clientes. É a forma de compartilhar um mesmo plugin entre vários projetos sem copiar e colar manualmente.
Acesso e papéis
manage_rules, detida por admin e lead em todo o servidor. Um
project_admin, que não detém nenhuma capacidade, não tem acesso. Um
lead, por sua vez, pode vincular qualquer repositório a qualquer outro.
Criar um vínculo
1. Abrir a aba Distribution
A aba Distribution está na linha SERVER: um vínculo conecta dois repositórios, portanto não depende do repositório escolhido na linha PROJECT. Clique em + New Link, no canto superior direito: a janela New Distribution Link se abre.
2. Escolher a origem, o destino e os caminhos
Source Repository é o repositório de onde vêm os arquivos, Target Repository o de
destino: a origem escolhida desaparece da lista de destinos, um vínculo não pode voltar sobre si mesmo.
Path Patterns recebe um padrão por linha (por exemplo
Plugins/MyPlugin/, Content/SharedAssets/), e pelo menos um é obrigatório: sem padrão, nada
seria copiado.
3. Confirmar com Create Link
O vínculo aparece imediatamente na lista. Um vínculo que já existe entre os mesmos dois repositórios é recusado (conflito): edite o existente em vez de criar um segundo.
Padrões de caminho
Um padrão corresponde a um caminho se aparecer em algum lugar dele (busca do tipo «contém»).
Assim, um padrão Plugins/uVersion corresponde a
DefaultProject/Plugins/uVersion/Source/Foo.cpp qualquer que seja o prefixo do projeto. A barra final não
muda nada.
Publicar
1. Localizar o vínculo e suas ações
Cada vínculo ocupa uma linha da lista: source → cible, seus padrões em forma de pílulas, quem o criou e
a data da última publicação. As ações ficam agrupadas à direita da linha: Show pending files
(ícone de arquivo), Publish history (relógio), Publish, o interruptor que ativa ou
desativa o vínculo, e a exclusão.
2. Verificar o que vai sair
Show pending files expande, sob a linha, a lista dos arquivos que diferem, com sua revisão de origem e um total no título (Pending Files (N)). Cada um traz seu estado: new, modified ou locked. Se tudo estiver em dia, o painel o diz.
3. Publicar
O botão Publish executa a cópia. Um aviso verde resume «Published: X source files found, Y updated, Z skipped (locked), W unchanged». O botão fica desativado enquanto o vínculo estiver inativo, e publicar um vínculo inativo retorna um erro explícito.
Um arquivo bloqueado no destino é ignorado, não sobrescrito. Um arquivo com conteúdo idêntico (mesmo hash) é contado como inalterado e ignorado. A publicação é atômica (uma única transação).
Publish history (relógio) fornece em seguida as 50 últimas publicações: quantos arquivos atualizados e ignorados, por quem, e quando.
Remapeamento e revisões
O caminho é reescrito para o destino: o uVersion remove o que precede o padrão correspondente e depois
adiciona o prefixo detectado no destino. Exemplo: origem
DefaultProject/Plugins/uVersion/foo.cpp, padrão Plugins/uVersion, prefixo de destino
CineDroneStudio/ → CineDroneStudio/Plugins/uVersion/foo.cpp. O prefixo de destino é deduzido
de um arquivo existente no destino (lida com repositórios com ou sem subpasta de projeto).
Armadilhas comuns
«Publish» está esmaecido
O vínculo está inativo. Ative-o primeiro. Publicar um vínculo inativo retorna um erro explícito.
Um arquivo não é atualizado no destino
Ou ele está bloqueado no lado do destino (então é ignorado e contado como «locked»), ou seu conteúdo já é idêntico (contado como «unchanged»). Veja o resumo de publicação e a lista de pending files.
Um project_admin não vê a aba
É intencional: a distribuição exige manage_rules (admin ou lead). Um project_admin não tem acesso, mesmo
em seus próprios repositórios.