Eliminate Scalar::Util usage from private-Error.pm
[gitweb.git] / perl / Git.xs
index c8242103b5f571990161a8e69861c3d4c6b19d3a..226dd4f681ae99bb5c53a4e63394161d92c6ff76 100644 (file)
@@ -8,15 +8,11 @@
 #include "../cache.h"
 #include "../exec_cmd.h"
 
-#define die perlyshadow_die__
-
 /* XS and Perl interface */
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
 
-#undef die
-
 
 static char *
 report_xs(const char *prefix, const char *err, va_list params)
@@ -56,7 +52,21 @@ BOOT:
 }
 
 
-# /* TODO: xs_call_gate(). See Git.pm. */
+void
+xs__call_gate(repoid, git_dir)
+       long repoid;
+       char *git_dir;
+CODE:
+{
+       static long last_repoid;
+       if (repoid != last_repoid) {
+               setup_git(git_dir,
+                         getenv(DB_ENVIRONMENT),
+                         getenv(INDEX_ENVIRONMENT),
+                         getenv(GRAFT_ENVIRONMENT));
+               last_repoid = repoid;
+       }
+}
 
 
 char *
@@ -101,6 +111,30 @@ CODE:
        free((char **) argv);
 }
 
+
+SV *
+xs_get_object(type, id)
+       char *type;
+       char *id;
+CODE:
+{
+       unsigned char sha1[20];
+       unsigned long size;
+       void *buf;
+
+       if (strlen(id) != 40 || get_sha1_hex(id, sha1) < 0)
+               XSRETURN_UNDEF;
+
+       buf = read_sha1_file(sha1, type, &size);
+       if (!buf)
+               XSRETURN_UNDEF;
+       RETVAL = newSVpvn(buf, size);
+       free(buf);
+}
+OUTPUT:
+       RETVAL
+
+
 char *
 xs_hash_object_pipe(type, fd)
        char *type;