1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-13 22:04:09 +02:00

Start of package management

This commit is contained in:
Brian Fiete 2021-02-25 08:10:21 -08:00
parent e517a9745a
commit e6c4a95ccd
25 changed files with 4316 additions and 692 deletions

View file

@ -216,6 +216,7 @@ namespace IDE
public BFWindow.ShowKind mRequestedShowKind;
public WakaTime mWakaTime ~ delete _;
public PackMan mPackMan = new PackMan() ~ delete _;
public Settings mSettings = new Settings() ~ delete _;
public Workspace mWorkspace = new Workspace() ~ delete _;
public FileWatcher mFileWatcher = new FileWatcher() ~ delete _;
@ -2165,7 +2166,7 @@ namespace IDE
}
}
public void AddNewProjectToWorkspace(Project project, VerSpecRecord verSpec = null)
public void AddNewProjectToWorkspace(Project project, VerSpec verSpec = .None)
{
AddProjectToWorkspace(project);
mWorkspace.SetChanged();
@ -2186,21 +2187,19 @@ namespace IDE
var projectSpec = new Workspace.ProjectSpec();
projectSpec.mProjectName = new .(project.mProjectName);
if (verSpec != null)
if (verSpec != .None)
{
projectSpec.mVerSpec = verSpec;
}
else
{
projectSpec.mVerSpec = new .();
projectSpec.mVerSpec.SetPath(relPath);
projectSpec.mVerSpec = .Path(new String(relPath));
}
mWorkspace.mProjectSpecs.Add(projectSpec);
var dep = new Project.Dependency();
dep.mProjectName = new .("corlib");
dep.mVerSpec = new .();
dep.mVerSpec.SetSemVer("*");
dep.mVerSpec = .SemVer(new .("*"));
project.mDependencies.Add(dep);
}
@ -2457,12 +2456,16 @@ namespace IDE
for (int projectIdx = 0; projectIdx < mWorkspace.mProjects.Count; projectIdx++)
{
var project = mWorkspace.mProjects[projectIdx];
if (project.mLoadDeferred)
if ((project.mDeferState == .ReadyToLoad) || (project.mDeferState == .Pending))
{
hadLoad = true;
var projectPath = project.mProjectPath;
if (!project.Load(projectPath))
if (project.mDeferState == .Pending)
{
project.mDeferState = .Searching;
}
else if (!project.Load(projectPath))
{
OutputErrorLine("Failed to load project '{0}' from '{1}'", project.mProjectName, projectPath);
LoadFailed();
@ -2570,25 +2573,23 @@ namespace IDE
project.FinishCreate(false);
var verSpec = new VerSpecRecord();
verSpec.SetSemVer("*");
VerSpec verSpec = .SemVer(new .("*"));
defer verSpec.Dispose();
switch (AddProject("corlib", verSpec))
{
case .Ok(let libProject):
var dep = new Project.Dependency();
dep.mProjectName = new String("corlib");
dep.mVerSpec = verSpec;
dep.mVerSpec = verSpec.Duplicate();
project.mDependencies.Add(dep);
default:
delete verSpec;
}
}
var projSpec = new Workspace.ProjectSpec();
projSpec.mProjectName = new String(project.mProjectName);
projSpec.mVerSpec = new VerSpecRecord();
projSpec.mVerSpec.SetPath(".");
projSpec.mVerSpec = .Path(new String("."));
mWorkspace.mProjectSpecs.Add(projSpec);
mWorkspace.mStartupProject = project;
@ -2645,7 +2646,6 @@ namespace IDE
{
var projSpec = new Workspace.ProjectSpec();
projSpec.mProjectName = new String(projectName);
projSpec.mVerSpec = new VerSpecRecord();
mWorkspace.mProjectSpecs.Add(projSpec);
if (projSpec.mVerSpec.Parse(data) case .Err)
@ -2734,15 +2734,15 @@ namespace IDE
NotFound
}
public Result<Project, ProjectAddError> AddProject(StringView projectName, VerSpecRecord verSpecRecord)
public Result<Project, ProjectAddError> AddProject(StringView projectName, VerSpec verSpec)
{
VerSpecRecord useVerSpecRecord = verSpecRecord;
VerSpec useVerSpec = verSpec;
String verConfigDir = mWorkspace.mDir;
if (let project = mWorkspace.FindProject(projectName))
return project;
if (useVerSpecRecord.mVerSpec case .SemVer)
if (useVerSpec case .SemVer)
{
// First pass we just try to use the 'expected' project name
FindLoop: for (int pass < 2)
@ -2758,7 +2758,7 @@ namespace IDE
if (regEntry.mProjName == projectName)
{
useVerSpecRecord = regEntry.mLocation;
useVerSpec = regEntry.mLocation;
verConfigDir = regEntry.mConfigFile.mConfigDir;
break FindLoop;
}
@ -2771,7 +2771,7 @@ namespace IDE
var project = new Project();
// For project locking, assume that only anything that is referenced with a path is editable
project.mLockedDefault = !(verSpecRecord.mVerSpec case .Path);
project.mLockedDefault = !(verSpec case .Path);
project.mLocked = project.mLockedDefault;
mWorkspace.mProjects.Add(project);
@ -2786,8 +2786,9 @@ namespace IDE
}
String projectFilePath = null;
bool isDeferredLoad = false;
switch (useVerSpecRecord.mVerSpec)
switch (useVerSpec)
{
case .Path(let path):
var relPath = scope String(path);
@ -2801,16 +2802,34 @@ namespace IDE
projectFilePath.Append(absPath, "BeefProj.toml");
case .SemVer(let semVer):
//
case .Git(let url, let ver):
var verReference = new Project.VerReference();
verReference.mSrcProjectName = new String(projectName);
verReference.mVerSpec = _.Duplicate();
project.mVerReferences.Add(verReference);
var checkPath = scope String();
if (mPackMan.CheckLock(projectName, checkPath))
{
projectFilePath = scope:: String(checkPath);
}
else
isDeferredLoad = true;
default:
Fail("Invalid version specifier");
return .Err(.InvalidVersionSpec);
}
if (projectFilePath == null)
if ((projectFilePath == null) && (!isDeferredLoad))
{
return .Err(.NotFound);
}
if (isDeferredLoad)
{
mWorkspace.mProjectLoadState = .Preparing;
}
project.mProjectName.Set(projectName);
project.DeferLoad(projectFilePath);
success = true;
@ -2858,7 +2877,7 @@ namespace IDE
for (let configName in configs)
{
mWorkspace.FixOptions(configName, platformName);
}
}
}
mWorkspace.FixOptions(mConfigName, mPlatformName);