git-off

git off handles large files in git repos
git clone https://noulin.net/git/git-off.git
Log | Files | Refs | README

commit 06b449896ad015c314d2b4bb2eb18f1f0fdbd5e4
parent bd0c69fdc7d60090a7c5880d3cac56f7752c77b2
Author: Remy Noulin (Spartatek) <remy.noulin@spartatek.se>
Date:   Mon, 21 Nov 2016 08:46:21 +0100

add support for git off config in repo

src/gitoff.coffee | 83 ++++++++++++++++++++++++++++++++++---------------------
1 file changed, 51 insertions(+), 32 deletions(-)

Diffstat:
Msrc/gitoff.coffee | 83++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
1 file changed, 51 insertions(+), 32 deletions(-)

diff --git a/src/gitoff.coffee b/src/gitoff.coffee @@ -1,11 +1,11 @@ #! /usr/bin/env coffee # TODO +# add multiple config like our git fat # add help # add rsync backend - change push and smudge # add pem config # handle wrong config like getLog -# add multiple config like our git fat # add a command to copy stores # # parse params @@ -93,6 +93,7 @@ # # helpers # expandHome: expands ~/ +# gitConfig: handles global git config # offLog: appends log to git config off.log # offLogRepo: log for commands run in git repo # exec: runs an externalHelpers with parameters @@ -103,7 +104,6 @@ # # core # transport: transport functions for git off store -# gitConfig: handles global git config # offCommands: command line functions # # main @@ -180,12 +180,35 @@ expandHome = (path) -> path = process.env.HOME + '/' + path.slice(2) path +# handles global git config +gitConfig = + 'set': (key, value)-> + exec 'gitConfig', ['--global', key, '"' + value + '"'] + return + + 'setLocal': (key, value) -> + exec('gitConfig', [key, '"' + value + '"']) + return + + 'setThisRepo': (key, value) -> + exec('gitConfig', ['--file ' + offHelpers.gitRepoRoot() + '/.git-off', key, '"' + value + '"']) + return + + 'get': (key) -> + if fs.existsSync(offHelpers.gitRepoRoot(true) + '/.git-off') == false + exec('gitConfig', [key]).stdout.trim() + else + exec('gitConfig', ['--file ' + offHelpers.gitRepoRoot() + '/.git-off', key]).stdout.trim() + + 'getSyncexec': (key) -> + syncexec externalHelpers.gitConfig + ' ' + key + # appends log to git config off.log offLog = (s) -> if runtimeConfig.log == '' # set runtimeConfig.log and get config in git # use syncexec to avoid circular calls - r = syncexec externalHelpers.gitConfig + ' off.log' + r = gitConfig.getSyncexec 'off.log' runtimeConfig.log = expandHome r.stdout.trim() # error handling if runtimeConfig.log == '' @@ -208,7 +231,7 @@ offLogRepo = (s) -> # errors are logged in off.log and in console # returns r (r.stdout, r.stderr) exec = (cmdName, paramsArray=[], ignoreStderr=false) -> - console.log externalHelpers[cmdName] + ' ' + paramsArray.join(' ') + #console.log externalHelpers[cmdName] + ' ' + paramsArray.join(' ') #offLog externalHelpers[cmdName] + ' ' + paramsArray.join(' ') r = syncexec externalHelpers[cmdName] + ' ' + paramsArray.join(' ') #console.log r.stdout @@ -254,9 +277,9 @@ copy = (src, dst) -> # userAt: returns user@ or '' # setTransport: set send and receive functions for transport offHelpers = - 'gitRepoRoot': -> + 'gitRepoRoot': (ignoreStderr=false) -> if runtimeConfig.currentRepoRoot == '' - r = exec 'gitRepoRoot' + r = exec 'gitRepoRoot', [], ignoreStderr runtimeConfig.currentRepoRoot = r.stdout.trim() runtimeConfig.currentRepoRoot @@ -267,32 +290,32 @@ offHelpers = 'offStore': -> if runtimeConfig.offStore == '' - r = exec 'gitConfig', ['off.store'] - runtimeConfig.offStore = expandHome r.stdout.trim() + r = gitConfig.get 'off.store' + runtimeConfig.offStore = expandHome r runtimeConfig.offStore 'offMode': -> if runtimeConfig.offMode == '' - r = exec 'gitConfig', ['off.mode'] - runtimeConfig.offMode = expandHome r.stdout.trim() + r = gitConfig.get 'off.mode' + runtimeConfig.offMode = expandHome r runtimeConfig.offMode 'offScp': -> if runtimeConfig.offScp == '' - r = exec 'gitConfig', ['off.scphost'] - runtimeConfig.offScp = expandHome r.stdout.trim() + r = gitConfig.get 'off.scphost' + runtimeConfig.offScp = expandHome r runtimeConfig.offScp 'offScpUser': -> if runtimeConfig.offScpUser == '' - r = exec 'gitConfig', ['off.scpuser'] - runtimeConfig.offScpUser = expandHome r.stdout.trim() + r = gitConfig.get 'off.scpuser' + runtimeConfig.offScpUser = expandHome r runtimeConfig.offScpUser 'log': -> if runtimeConfig.log == '' # use syncexec to avoid circular calls - r = syncexec externalHelpers.gitConfig + ' off.log' + r = gitConfig.getSyncexec 'off.log' runtimeConfig.log = expandHome r.stdout.trim() runtimeConfig.log @@ -350,19 +373,6 @@ transport = # to be initialized by setTransport return -# handles global git config -gitConfig = - 'set': (key, value)-> - exec 'gitConfigGlobal', [key, '"' + value + '"'] - return - - 'setLocal': (key, value) -> - exec('gitConfig', [key, '"' + value + '"']) - return - - 'get': (key) -> - exec('gitConfig', [key]).stdout.trim() - # command line functions # localSetup: setup current git # install: setup git config (default global) @@ -403,11 +413,20 @@ offCommands = # setup config only if not already set if gitConfig.get('filter.off.clean') == '' or setCfg != gitConfig.set - setCfg('filter.off.clean','git off clean %f') + if setCfg == gitConfig.setThisRepo + gitConfig.setLocal('filter.off.clean','git off clean %f') + else + setCfg('filter.off.clean','git off clean %f') if gitConfig.get('filter.off.smudge') == '' or setCfg != gitConfig.set - setCfg('filter.off.smudge','git off smudge %f') + if setCfg == gitConfig.setThisRepo + gitConfig.setLocal('filter.off.smudge','git off smudge %f') + else + setCfg('filter.off.smudge','git off smudge %f') if offHelpers.log() == '' or setCfg != gitConfig.set - setCfg('off.log',offDEFAULTS.log) + if setCfg == gitConfig.setThisRepo + gitConfig.setLocal('off.log',offDEFAULTS.log) + else + setCfg('off.log',offDEFAULTS.log) if offHelpers.offMode() == '' or setCfg != gitConfig.set setCfg('off.mode', offDEFAULTS.mode) @@ -686,7 +705,7 @@ thisrepo = (cmd) -> cmd(gitConfig['set']) else # setup config in current repo - cmd(gitConfig['setLocal']) + cmd(gitConfig['setThisRepo']) return if process.argv[2] == 'install'