summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-13 23:06:03 +0800
committerruki <[email protected]>2022-04-13 23:06:03 +0800
commitc6c62b573fb79dbf89733591f46ce92e10ee6fab (patch)
tree2dca011079f154c5fd9b6a24853ceda61d5194c5
parent9e4be5c8d422a2f089e15679865b217d0958b98c (diff)
add git.push
-rw-r--r--xmake/modules/devel/git/checkout.lua8
-rw-r--r--xmake/modules/devel/git/push.lua58
-rw-r--r--xmake/modules/private/service/remote_build/client.lua8
3 files changed, 61 insertions, 13 deletions
diff --git a/xmake/modules/devel/git/checkout.lua b/xmake/modules/devel/git/checkout.lua
index c78d8f439..fb1a24e27 100644
--- a/xmake/modules/devel/git/checkout.lua
+++ b/xmake/modules/devel/git/checkout.lua
@@ -37,16 +37,8 @@ import("lib.detect.find_tool")
-- @endcode
--
function main(commit, opt)
-
- -- init options
opt = opt or {}
-
- -- find git
local git = assert(find_tool("git"), "git not found!")
-
- -- init argv
local argv = {"checkout", commit}
-
- -- checkout it
os.vrunv(git.program, argv, {curdir = opt.repodir})
end
diff --git a/xmake/modules/devel/git/push.lua b/xmake/modules/devel/git/push.lua
new file mode 100644
index 000000000..aaeee5c28
--- /dev/null
+++ b/xmake/modules/devel/git/push.lua
@@ -0,0 +1,58 @@
+--!A cross-platform build utility based on Lua
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-- Copyright (C) 2015-present, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file push.lua
+--
+
+-- imports
+import("core.base.option")
+import("lib.detect.find_tool")
+import("branch", {alias = "git_branch"})
+
+-- push to given remote url and branch
+--
+-- @param url the remote url
+-- @param opt the argument options
+--
+-- @code
+--
+-- import("devel.git")
+--
+-- git.push(url, {branch = "master, remote_branch = "xxx", force = true, "repodir = "/tmp/xmake", password = "xxx"})
+--
+-- @endcode
+--
+function main(url, opt)
+ opt = opt or {}
+ local git = assert(find_tool("git"), "git not found!")
+
+ local argv = {"push", url}
+ if opt.force then
+ table.insert(argv, "--force")
+ end
+ local branch = opt.branch or git_branch(opt)
+ assert(branch, "git branch not found!")
+ if opt.remote_branch then
+ branch = branch .. ":" .. opt.remote_branch
+ end
+ table.insert(argv, branch)
+ local stdin
+ if opt.password then
+ stdin = opt.password .. "\n"
+ end
+ os.vrunv(git.program, argv, {curdir = opt.repodir, stdin = stdin})
+end
diff --git a/xmake/modules/private/service/remote_build/client.lua b/xmake/modules/private/service/remote_build/client.lua
index 1031aec60..19e739409 100644
--- a/xmake/modules/private/service/remote_build/client.lua
+++ b/xmake/modules/private/service/remote_build/client.lua
@@ -269,14 +269,12 @@ function remote_build_client:_do_syncfiles(remote_path, remote_branch)
local user = assert(config.get("remote_build.client.user"), "config(remote_build.client.user): not found!")
local pass = config.get("remote_build.client.pass")
local addr = self:addr()
- local branch = git.branch({repodir = os.curdir()})
- assert(branch, "git branch not found!")
assert(remote_path, "git remote path not found!")
assert(remote_branch, "git remote branch not found!")
- -- get remote url
- local remote_url = string.format("%s@%s:%s %s:%s", user, addr, remote_path, branch, remote_branch)
- print(remote_url)
+ -- push to remote
+ local remote_url = string.format("%s@%s:%s", user, addr, remote_path)
+ git.push(remote_url, {remote_branch = remote_branch, password = pass})
end
function remote_build_client:__tostring()