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:
| M | src/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'