Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
hash: ruleEntry.hash
});
}
if (!entry) {
// If you get here, the entry didn't match
// In raw-mode this is a no-find.
if (!bake) break;
// In bake mode, look for rule that may serve this path.
return searchRules();
}
if (bake && (entry.mode === modes.sym)) {
if (!check("blob", entry.hash)) return;
var blob = storage.get(entry.hash);
var link = binary.toUnicode(blob);
var rest = parts.slice(index + 1).join("/");
var linkPath = pathJoin(partial, link, rest);
return resolvePath(linkPath, bake, callback);
}
// We're good, move on!
mode = entry.mode;
hash = entry.hash;
partial = newPath;
if (mode === modes.commit) root = partial;
index++;
} else {
break;
}
}
if (meta.mode === modes.sym) {
var target = bodec.toUnicode(yield repo.loadAs("blob", meta.hash));
target = pathJoin(base, subPath, '..', target, subRest);
return yield* pathToEntry(target);
}
// Check for .gitmodules file
meta = yield repo.pathToEntry(root, ".gitmodules");
if (!(meta && modes.isFile(meta.mode))) {
throw new Error("Missing .gitmodules file");
}
// Load and parse the .gitmodules file.
// TODO: cache this in memory by path and hash
var config = configCodec.decode(bodec.toUnicode(yield repo.loadAs("blob", meta.hash)));
config = config.submodule[subPath];
if (!config) {
throw new Error("Missing .gitmodules entry for " + subPath);
}
// Iterate the search loop with the new repo and path.
ref = config.ref || "refs/heads/master";
repo = yield* getRepo(config.url, ref);
base = subPath;
path = subRest;
}
};
}
function* render(pathToEntry, url, runtimes) {
// Strip of query string from url to get pathname.
var pathname = getPathname(url);
var meta = yield* pathToEntry(pathname);
if (!meta) return;
var repo = meta.repo;
// Send redirects for symlinks
if (meta.mode === modes.sym) {
var target = yield repo.loadAs("blob", meta.hash);
target = bodec.toUnicode(target);
if (target[0] !== "/") target = pathJoin(url, "..", target);
return [302, {Location: target}];
}
// Special rules for tree requests.
if (meta.mode === modes.tree) {
// Make sure requests for trees end in trailing slashes.
if (pathname[pathname.length - 1] !== "/") {
return [301, { Location: pathname + "/" }];
}
// Load the actual tree listing, this should be cached by mem-cache.
var tree = yield repo.loadAs("tree", meta.hash);
// Look for a index file
if (tree["index.html"] && modes.isFile(tree["index.html"].mode)) {
meta = tree["index.html"];
meta.repo = repo;
function onBody(err, body) {
if (err) return callback(err);
var text;
try { text = binary.toUnicode(body); }
catch (err) { return callback(err); }
callback(null, text);
}
}
let key;
const tag : any = {};
while (body[i] !== 0x0a) {
start = i;
i = indexOf(body, 0x20, start);
if (i < 0) throw new SyntaxError("Missing space");
key = bodec.toRaw(body, start, i++);
start = i;
i = indexOf(body, 0x0a, start);
if (i < 0) throw new SyntaxError("Missing linefeed");
let value : any = bodec.toUnicode(body, start, i++);
if (key === "tagger") value = decodePerson(value);
tag[key] = value;
}
i++;
tag.message = bodec.toUnicode(body, i, body.length);
return tag as TagBody;
}
function decodeTag(body) {
var i = 0;
var start;
var key;
var tag = {};
while (body[i] !== 0x0a) {
start = i;
i = indexOf(body, 0x20, start);
if (i < 0) throw new SyntaxError("Missing space");
key = bodec.toRaw(body, start, i++);
start = i;
i = indexOf(body, 0x0a, start);
if (i < 0) throw new SyntaxError("Missing linefeed");
var value = bodec.toUnicode(body, start, i++);
if (key === "tagger") value = decodePerson(value);
tag[key] = value;
}
i++;
tag.message = bodec.toUnicode(body, i, body.length);
return tag;
}
function decodeTag(body : Uint8Array) {
let i = 0;
let start;
let key;
const tag : any = {};
while (body[i] !== 0x0a) {
start = i;
i = indexOf(body, 0x20, start);
if (i < 0) throw new SyntaxError("Missing space");
key = bodec.toRaw(body, start, i++);
start = i;
i = indexOf(body, 0x0a, start);
if (i < 0) throw new SyntaxError("Missing linefeed");
let value : any = bodec.toUnicode(body, start, i++);
if (key === "tagger") value = decodePerson(value);
tag[key] = value;
}
i++;
tag.message = bodec.toUnicode(body, i, body.length);
return tag as TagBody;
}
var commit = {
tree: "",
parents: parents,
author: "",
committer: "",
message: ""
};
while (body[i] !== 0x0a) {
start = i;
i = indexOf(body, 0x20, start);
if (i < 0) throw new SyntaxError("Missing space");
key = bodec.toRaw(body, start, i++);
start = i;
i = indexOf(body, 0x0a, start);
if (i < 0) throw new SyntaxError("Missing linefeed");
var value = bodec.toUnicode(body, start, i++);
if (key === "parent") {
parents.push(value);
}
else {
if (key === "author" || key === "committer") {
value = decodePerson(value);
}
commit[key] = value;
}
}
i++;
commit.message = bodec.toUnicode(body, i, body.length);
return commit;
}
function onLoad(err, body, hash) {
if (body === undefined) return callback(err);
if (type === "text") body = bodec.toUnicode(body);
if (type === "array") body = toArray(body);
return callback(err, body, hash);
}
}