aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lpm.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/lpm.c b/src/lpm.c
index a97c917..3caefce 100644
--- a/src/lpm.c
+++ b/src/lpm.c
@@ -299,8 +299,19 @@ static git_commit* git_retrieve_commit(git_repository* repository, const char* c
return commit;
}
+// We move this out of main, because this is a significantly expensive function,
+// and we don't need to call it every time we run lpm.
+static int git_initialized = 0;
+static void git_init() {
+ if (!git_initialized) {
+ git_libgit2_init();
+ git_initialized = 1;
+ }
+}
+
static int lpm_reset(lua_State* L) {
+ git_init();
git_repository* repository = luaL_checkgitrepo(L, 1);
const char* commit_name = luaL_checkstring(L, 2);
const char* type = luaL_checkstring(L, 3);
@@ -323,6 +334,7 @@ static int lpm_reset(lua_State* L) {
}
static int lpm_revparse(lua_State* L) {
+ git_init();
git_repository* repository = luaL_checkgitrepo(L, 1);
git_oid commit_id;
int got_commit = git_get_id(&commit_id, repository, "HEAD");
@@ -340,6 +352,7 @@ static int lpm_revparse(lua_State* L) {
}
static int lpm_init(lua_State* L) {
+ git_init();
const char* path = luaL_checkstring(L, 1);
const char* url = luaL_checkstring(L, 2);
git_repository* repository;
@@ -383,6 +396,7 @@ static int lpm_git_transfer_progress_cb(const git_transfer_progress *stats, void
}
static int lpm_fetch(lua_State* L) {
+ git_init();
git_repository* repository = luaL_checkgitrepo(L, 1);
git_remote* remote;
if (git_remote_lookup(&remote, repository, "origin")) {
@@ -977,17 +991,21 @@ int lpm_flock(lua_State* L) {
return 0;
}
-int lpm_time(lua_State* L) {
- #if _WIN32 // Fuck I hate windows jesus chrsit.
+double get_time() {
+ #if _WIN32 // Fuck I hate windows jesus chrsit.
LARGE_INTEGER LoggedTime, Freqency;
QueryPerformanceFrequency(&Frequency);
QueryPerformanceCounter(&LoggedTime);
- lua_pushnumber(L, LoggedTime.QuadPart / (double)Frequency.QuadPart);
+ return LoggedTime.QuadPart / (double)Frequency.QuadPart;
#else
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
- lua_pushnumber(L, ts.tv_sec + ts.tv_nsec * 100000000.0);
+ return ts.tv_sec + ts.tv_nsec / 1000000000.0;
#endif
+}
+
+int lpm_time(lua_State* L) {
+ lua_pushnumber(L, get_time());
return 1;
}
@@ -1055,7 +1073,6 @@ static const luaL_Reg system_lib[] = {
#endif
int main(int argc, char* argv[]) {
- git_libgit2_init();
lua_State* L = luaL_newstate();
luaL_openlibs(L);
luaL_newlib(L, system_lib);
@@ -1088,6 +1105,7 @@ int main(int argc, char* argv[]) {
}
int status = lua_tointeger(L, -1);
lua_close(L);
- git_libgit2_shutdown();
+ if (git_initialized)
+ git_libgit2_shutdown();
return status;
}