mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-09-15 15:15:29 +02:00
fix: preserve and anonymize truncated folder warnings
This commit is contained in:
@@ -163,11 +163,12 @@ export default class Repository {
|
|||||||
}
|
}
|
||||||
if (!hasFile || opt.force) {
|
if (!hasFile || opt.force) {
|
||||||
await FileModel.deleteMany({ repoId: this.repoId }).exec();
|
await FileModel.deleteMany({ repoId: this.repoId }).exec();
|
||||||
const files = await this.source.getFiles(opt.progress);
|
const source = this.source;
|
||||||
|
const files = await source.getFiles(opt.progress);
|
||||||
files.forEach((f) => (f.repoId = this.repoId));
|
files.forEach((f) => (f.repoId = this.repoId));
|
||||||
await FileModel.insertMany(files);
|
await FileModel.insertMany(files);
|
||||||
|
|
||||||
const sourceWithTruncation = this.source as unknown as {
|
const sourceWithTruncation = source as unknown as {
|
||||||
truncatedFolderList?: string[];
|
truncatedFolderList?: string[];
|
||||||
};
|
};
|
||||||
if (Array.isArray(sourceWithTruncation.truncatedFolderList)) {
|
if (Array.isArray(sourceWithTruncation.truncatedFolderList)) {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { anonymizePath } from "../../core/anonymize-utils";
|
||||||
import * as express from "express";
|
import * as express from "express";
|
||||||
import config from "../../config";
|
import config from "../../config";
|
||||||
import got from "got";
|
import got from "got";
|
||||||
@@ -389,7 +390,9 @@ router.get(
|
|||||||
isAdmin: user?.isAdmin === true,
|
isAdmin: user?.isAdmin === true,
|
||||||
isOwner: user?.id == repo.model.owner,
|
isOwner: user?.id == repo.model.owner,
|
||||||
hasWebsite: !!repo.options.page && !!repo.options.pageSource,
|
hasWebsite: !!repo.options.page && !!repo.options.pageSource,
|
||||||
truncatedFolders: repo.model.truncatedFolders || [],
|
truncatedFolders: (repo.model.truncatedFolders || []).map((path) =>
|
||||||
|
anonymizePath(path, repo.options.terms || [])
|
||||||
|
),
|
||||||
// Submodule contents are not included in GitHub archives/trees, so
|
// Submodule contents are not included in GitHub archives/trees, so
|
||||||
// they end up as empty folders in the anonymized repository. Surface
|
// they end up as empty folders in the anonymized repository. Surface
|
||||||
// a warning in the explorer when the repository uses submodules (#737).
|
// a warning in the explorer when the repository uses submodules (#737).
|
||||||
|
|||||||
@@ -144,6 +144,18 @@ describe("production regressions", function () {
|
|||||||
} catch (error) { expect(error.message).to.equal("token_expired"); }
|
} catch (error) { expect(error.message).to.equal("token_expired"); }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("retains truncation warnings from the source instance that fetched the tree", async function () {
|
||||||
|
const FileModel = require("../src/core/model/files/files.model").default;
|
||||||
|
stub(db, "isConnected", false);
|
||||||
|
for (const method of ["exists", "deleteMany", "find"]) stub(FileModel, method, () => ({ exec: async () => method === "find" ? [] : null }));
|
||||||
|
stub(FileModel, "insertMany", async () => []);
|
||||||
|
const repo = new Repository(new RepoModel({ repoId: "repo", options: {} }));
|
||||||
|
repo.computeSize = async () => {};
|
||||||
|
Object.defineProperty(repo, "source", { get() { return { truncatedFolderList: [], async getFiles() { this.truncatedFolderList = ["private/folder"]; return []; } }; } });
|
||||||
|
await repo.files({ force: true });
|
||||||
|
expect(repo.model.truncatedFolders).to.deep.equal(["private/folder"]);
|
||||||
|
});
|
||||||
|
|
||||||
function response() {
|
function response() {
|
||||||
return { headers: {}, header(key, value) { this.headers[key] = value; return this; },
|
return { headers: {}, header(key, value) { this.headers[key] = value; return this; },
|
||||||
contentType() { return this; }, status(value) { this.statusCode = value; return this; }, end() {}, send() {} };
|
contentType() { return this; }, status(value) { this.statusCode = value; return this; }, end() {}, send() {} };
|
||||||
|
|||||||
Reference in New Issue
Block a user