forked from lix-project/lix
libfetchers/git: Move workdir accessor into GitRepo::getAccessor
This commit is contained in:
parent
8024b954d7
commit
7774eff10e
3 changed files with 26 additions and 4 deletions
|
@ -1,4 +1,5 @@
|
||||||
#include "git-utils.hh"
|
#include "git-utils.hh"
|
||||||
|
#include "fs-input-accessor.hh"
|
||||||
#include "input-accessor.hh"
|
#include "input-accessor.hh"
|
||||||
#include "filtering-input-accessor.hh"
|
#include "filtering-input-accessor.hh"
|
||||||
#include "cache.hh"
|
#include "cache.hh"
|
||||||
|
@ -352,6 +353,8 @@ struct GitRepoImpl : GitRepo, std::enable_shared_from_this<GitRepoImpl>
|
||||||
|
|
||||||
ref<InputAccessor> getAccessor(const Hash & rev, bool exportIgnore) override;
|
ref<InputAccessor> getAccessor(const Hash & rev, bool exportIgnore) override;
|
||||||
|
|
||||||
|
ref<InputAccessor> getAccessor(const WorkdirInfo & wd, bool exportIgnore, MakeNotAllowedError e) override;
|
||||||
|
|
||||||
static int sidebandProgressCallback(const char * str, int len, void * payload)
|
static int sidebandProgressCallback(const char * str, int len, void * payload)
|
||||||
{
|
{
|
||||||
auto act = (Activity *) payload;
|
auto act = (Activity *) payload;
|
||||||
|
@ -715,6 +718,22 @@ ref<InputAccessor> GitRepoImpl::getAccessor(const Hash & rev, bool exportIgnore)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ref<InputAccessor> GitRepoImpl::getAccessor(const WorkdirInfo & wd, bool exportIgnore, MakeNotAllowedError makeNotAllowedError)
|
||||||
|
{
|
||||||
|
auto self = ref<GitRepoImpl>(shared_from_this());
|
||||||
|
ref<InputAccessor> fileAccessor =
|
||||||
|
AllowListInputAccessor::create(
|
||||||
|
makeFSInputAccessor(path),
|
||||||
|
std::set<CanonPath> { wd.files },
|
||||||
|
std::move(makeNotAllowedError));
|
||||||
|
if (exportIgnore) {
|
||||||
|
return make_ref<GitExportIgnoreInputAccessor>(self, fileAccessor);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return fileAccessor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<std::tuple<GitRepoImpl::Submodule, Hash>> GitRepoImpl::getSubmodules(const Hash & rev, bool exportIgnore)
|
std::vector<std::tuple<GitRepoImpl::Submodule, Hash>> GitRepoImpl::getSubmodules(const Hash & rev, bool exportIgnore)
|
||||||
{
|
{
|
||||||
/* Read the .gitmodules files from this revision. */
|
/* Read the .gitmodules files from this revision. */
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "filtering-input-accessor.hh"
|
||||||
#include "input-accessor.hh"
|
#include "input-accessor.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
@ -73,6 +74,8 @@ struct GitRepo
|
||||||
|
|
||||||
virtual ref<InputAccessor> getAccessor(const Hash & rev, bool exportIgnore) = 0;
|
virtual ref<InputAccessor> getAccessor(const Hash & rev, bool exportIgnore) = 0;
|
||||||
|
|
||||||
|
virtual ref<InputAccessor> getAccessor(const WorkdirInfo & wd, bool exportIgnore, MakeNotAllowedError makeNotAllowedError) = 0;
|
||||||
|
|
||||||
virtual void fetch(
|
virtual void fetch(
|
||||||
const std::string & url,
|
const std::string & url,
|
||||||
const std::string & refspec,
|
const std::string & refspec,
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#include "processes.hh"
|
#include "processes.hh"
|
||||||
#include "git.hh"
|
#include "git.hh"
|
||||||
#include "fs-input-accessor.hh"
|
#include "fs-input-accessor.hh"
|
||||||
#include "filtering-input-accessor.hh"
|
|
||||||
#include "mounted-input-accessor.hh"
|
#include "mounted-input-accessor.hh"
|
||||||
#include "git-utils.hh"
|
#include "git-utils.hh"
|
||||||
#include "logging.hh"
|
#include "logging.hh"
|
||||||
|
@ -659,10 +658,11 @@ struct GitInputScheme : InputScheme
|
||||||
for (auto & submodule : repoInfo.workdirInfo.submodules)
|
for (auto & submodule : repoInfo.workdirInfo.submodules)
|
||||||
repoInfo.workdirInfo.files.insert(submodule.path);
|
repoInfo.workdirInfo.files.insert(submodule.path);
|
||||||
|
|
||||||
|
auto repo = GitRepo::openRepo(CanonPath(repoInfo.url), false, false);
|
||||||
|
|
||||||
ref<InputAccessor> accessor =
|
ref<InputAccessor> accessor =
|
||||||
AllowListInputAccessor::create(
|
repo->getAccessor(repoInfo.workdirInfo,
|
||||||
makeFSInputAccessor(CanonPath(repoInfo.url)),
|
getExportIgnoreAttr(input),
|
||||||
std::move(repoInfo.workdirInfo.files),
|
|
||||||
makeNotAllowedError(repoInfo.url));
|
makeNotAllowedError(repoInfo.url));
|
||||||
|
|
||||||
/* If the repo has submodules, return a mounted input accessor
|
/* If the repo has submodules, return a mounted input accessor
|
||||||
|
|
Loading…
Reference in a new issue