make: meu próprio repositório simples

1

Eu tenho uma conta em um servidor da minha universidade. Eu quero compartilhar um código de programa com outro aluno. Eu pensei que deveria colocá-lo na minha conta do github. Infelizmente, não posso porque o código faz parte de um concurso.

Eu decidi fazer um Makefile para que pudéssemos facilmente fazer upload e download de arquivos. Depois de um tempo, finalmente entendi que não é suficiente. Então eu implementei o sistema de correção para que apenas as alterações sejam armazenadas. Não deve haver problemas com pequenas alterações simultâneas.

O Makefile quase faz o trabalho, mas há alguns detalhes que não posso resolver. O Makefile

all: download
PHONY: all, download, upload, getFiles

.ONESHELL:
getFiles:
    rm ../.tmp -r
    mkdir ../.tmp
    @(ssh $(user)@host "tar c *") | tar xv -C ../.tmp 

download: getFiles
    @diff -u ../.tmp . | patch -p1
    rm ../.tmp -r

upload: getFiles
    @diff -uN ../.tmp . | (ssh $(user)@host "patch -p1")
    rm ../.tmp -r

Eu removi todos os dados do host. Agora eu quero fazer o upload, mas o programa tar pára porque não há arquivos para download, a fim de descobrir as alterações.

Além disso, não consigo pensar no caso: devo usar -N em diff ou não? Simplesmente, eu não sei como se comporta quando eu apago um arquivo.

Há outro problema: quando algo dá errado, o diretório .tmp não é removido. O diretório deve ser removido toda vez. A próxima ação sempre faz o download do status atual do "repositório".

Eu reconheço totalmente o fato de que ele não é um repositório, mas não consigo configurar um programa de servidor no host remoto e acho que o Makefile fará o trabalho por mim.

Quaisquer sugestões serão apreciadas.

    
por lord.didger 09.12.2011 / 20:11

1 resposta

1

Eu finalmente consegui consertar o Makefile. Eu acho que funciona bem. Obviamente, não é um repositório profissional, mas faz o trabalho. O Makefile:

-include name

all: download
PHONY: all, download, upload, getFiles

DIFFFLAGS = -uNr

.ONESHELL:
getFiles:
    rm .tmp -r
    mkdir .tmp
    (ssh $(user)@$(HOST) "tar c ") | tar xv -C .tmp

download: getFiles
        diff $(DIFFFLAGS) program .tmp/roboty | patch -p1 -d program

upload: getFiles
    diff $(DIFFFLAGS) .tmp/roboty program | (ssh $(user)@$(HOST) "umask 070 && patch -p1")

patch-extern:
    diff $(DIFFFLAGS) program program-workplace | patch -p1 -d program

patch-local:
    diff $(DIFFFLAGS) program program-workplace | patch -p1 -dR program-workplace

backup:
    tar cf backup.tar program-workplace

.ONESHELL:
clear:
    rm 'find program-workplace/ -name "*~"'
    rm 'find program-workplace/ -name "*.class"'
    
por 11.12.2011 / 10:57