Пример #1
0
        private async Task Generate(VersionGenerator generator)
        {
            activity = $"Generating " + generator.VersionTypeName;

            max = _metadataStore.CountFilesMissingAttributeVersion(generator.VersionTypeName);

            var files = _metadataStore.FilesMissingAttributeVersion(generator.VersionTypeName);

            processed = 0;

            foreach (var file in files)
            {
                try
                {
                    Stream content        = _metadataStore.GetFileStream(file.Id);
                    var    thumbnailValue = generator.GenerateVersion(content);
                    await _metadataStore.AddVersion(file.Id, generator.VersionTypeName, thumbnailValue);

                    processed++;
                }
                catch (Exception ex)
                {
                }
            }
        }
Пример #2
0
        private Version GetVersion(string pathToAssembly)
        {
            var assembly = Assembly.Load(File.ReadAllBytes(pathToAssembly));
            var version  = VersionGenerator.GetVersion(assembly);

            return(version);
        }
        public override bool Execute()
        {
            try
            {
                if (VersionFiles.Length == 0)
                {
                    Log.LogError("(GmodNET.VersionTool.MSBuild) Version file is not specified.");
                    return(false);
                }
                else if (VersionFiles.Length > 1)
                {
                    Log.LogError("(GmodNET.VersionTool.MSBuild) There is more than one version file for the project.");
                    return(false);
                }

                VersionGenerator gen = new VersionGenerator(VersionFiles[0]);

                FullVersion  = gen.FullVersion;
                ShortVersion = gen.VersionWithoutBuildData;

                return(true);
            }
            catch (Exception e)
            {
                Log.LogError("(GmodNET.VersionTool.MSBuild) Exception was thrown while executing VersionToolGenerate task: " + e.ToString());
                return(false);
            }
        }
Пример #4
0
 /// <summary>
 /// Called to update the fields describing <see cref="Entity"/>'s version.
 /// </summary>
 /// <param name="changedEntity">The changed entity.</param>
 /// <param name="changedField">The changed field.</param>
 /// <returns>
 /// <see langword="True"/>, if <see cref="VersionInfo"/> was changed;
 /// otherwise, <see langword="false"/>.
 /// </returns>
 protected virtual bool UpdateVersion(Entity changedEntity, FieldInfo changedField)
 {
     foreach (var field in TypeInfo.GetVersionFields().Where(f => f.AutoVersion))
     {
         SetFieldValue(field, VersionGenerator.GenerateNextVersion(GetFieldValue(field)));
     }
     return(true);
 }
Пример #5
0
        public void Test2()
        {
            using (TempRepoProvider tempRepo = new TempRepoProvider("Test2.version.json"))
            {
                VersionGenerator version_generator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                Assert.Equal("2.2.2", version_generator.FullVersion.Split('+')[0]);
            }
        }
Пример #6
0
        public void SemVerCompatibilityTest()
        {
            VersionGenerator a = new VersionGenerator("Test1.version.json");
            VersionGenerator b = new VersionGenerator("Test2.version.json");
            VersionGenerator c = new VersionGenerator("Test3.version.json");

            Assert.True(SemVersion.TryParse(a.FullVersion, out _, true) && SemVersion.TryParse(b.FullVersion, out _, true) &&
                        SemVersion.TryParse(c.FullVersion, out _, true));
        }
Пример #7
0
        private static Task <int> ShowErrors(ParserResult <Options> errors)
        {
            var helpText = HelpText.AutoBuild(errors);

            helpText.Heading   = $"ChromeRuntimeDownloader {VersionGenerator.GetVersion().SemVer}";
            helpText.Copyright = "Copyright (c) 2017-2018 DenebLab";
            Console.WriteLine(helpText);
            return(Task.FromResult(1));
        }
Пример #8
0
 protected ComputeMethodFunctionBase(
     ComputeMethodDef method,
     VersionGenerator <LTag> versionGenerator,
     IServiceProvider services,
     ILogger <ComputeMethodFunction <T> >?log = null)
     : base(method, services)
 {
     Log = log ?? NullLogger <ComputeMethodFunction <T> > .Instance;
     VersionGenerator = versionGenerator;
 }
Пример #9
0
 public ReplicaMethodInterceptor(
     Options?options,
     IServiceProvider services,
     IReplicator replicator,
     ILoggerFactory?loggerFactory = null)
     : base(options ??= new(), services, loggerFactory)
 {
     Replicator       = replicator;
     VersionGenerator = options.VersionGenerator ?? services.VersionGenerator <LTag>();
 }
Пример #10
0
        public void CommitHashTest()
        {
            using (TempRepoProvider tempRepo = new TempRepoProvider("Test1.version.json"))
            {
                using Repository repo = new Repository(tempRepo.RepoDirectory.FullName);

                VersionGenerator versionGenerator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                Assert.Equal(repo.Head.Tip.Sha, versionGenerator.CommitHash);
            }
        }
        public async Task TestGeneratedFile()
        {
            string filePath = Path.GetFullPath("Test1.version.json");

            VersionGenerator gen = new VersionGenerator(filePath);

            var test = new VerifyCS.Test
            {
                TestState =
                {
                    Sources         = { SampleCode },
Пример #12
0
        public void Test4()
        {
            using (TempRepoProvider tempRepo = new TempRepoProvider("Test2.version.json"))
            {
                VersionGenerator versionGenerator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                Regex codename_checker = new Regex(@"codename", RegexOptions.ECMAScript);

                Assert.DoesNotMatch(codename_checker, versionGenerator.FullVersion);
            }
        }
Пример #13
0
        public void Test3()
        {
            using (TempRepoProvider tempRepo = new TempRepoProvider("Test1.version.json"))
            {
                VersionGenerator version_generator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                Regex codename_checker = new Regex(@"\+codename\.Test1", RegexOptions.ECMAScript);

                Assert.Matches(codename_checker, version_generator.FullVersion);
            }
        }
Пример #14
0
 public ReplicaMethodFunction(
     ComputeMethodDef method,
     IReplicator replicator,
     VersionGenerator <LTag> versionGenerator,
     ILogger <ReplicaMethodFunction <T> >?log = null)
     : base(method, ((IReplicatorImpl)replicator).Services)
 {
     Log              = log ?? NullLogger <ReplicaMethodFunction <T> > .Instance;
     DebugLog         = Log.IsEnabled(LogLevel.Debug) ? Log : null;
     VersionGenerator = versionGenerator;
     Replicator       = replicator;
 }
Пример #15
0
 public ComputeMethodFunction(
     ComputeMethodDef method,
     VersionGenerator <LTag> versionGenerator,
     IServiceProvider services,
     ILogger <ComputeMethodFunction <T> >?log = null)
     : base(method, versionGenerator, services, log)
 {
     if (method.Options.IsAsyncComputed)
     {
         throw Errors.InternalError(
                   $"This type can't be used with {nameof(ComputedOptions)}.{nameof(ComputedOptions.IsAsyncComputed)} == true option.");
     }
 }
Пример #16
0
        public void LightTagNameTest()
        {
            using (TempRepoProvider tempRepo = new TempRepoProvider("Test3.version.json"))
            {
                using Repository repo = new Repository(tempRepo.RepoDirectory.FullName);
                Commands.Checkout(repo, repo.CreateBranch("ccdd"));

                repo.ApplyTag("v3.2.1");

                VersionGenerator versionGenerator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                Assert.Equal("tag v3.2.1", versionGenerator.BranchName);
            }
        }
Пример #17
0
        public void Test6()
        {
            using (TempRepoProvider tempRepo = new TempRepoProvider("Test2.version.json"))
            {
                using Repository repo = new Repository(tempRepo.RepoDirectory.FullName);

                Commands.Checkout(repo, repo.CreateBranch("oh333"));

                VersionGenerator versionGenerator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                string expected_version = "2.2.2+head.oh333.commit." + repo.Head.Tip.Sha;

                Assert.Equal(expected_version, versionGenerator.FullVersion);
            }
        }
Пример #18
0
        public void BranchTest()
        {
            using (TempRepoProvider tempRepo = new TempRepoProvider("Test1.version.json"))
            {
                using Repository repo = new Repository(tempRepo.RepoDirectory.FullName);

                Branch test_branch = repo.CreateBranch("testbranch111");

                Commands.Checkout(repo, test_branch);

                VersionGenerator versionGenerator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                Assert.Equal("testbranch111", versionGenerator.BranchName);
            }
        }
Пример #19
0
        public void TagNameTest2()
        {
            using (TempRepoProvider tempRepo = new TempRepoProvider("Test3.version.json"))
            {
                using Repository repo = new Repository(tempRepo.RepoDirectory.FullName);
                Commands.Checkout(repo, repo.CreateBranch("ccdd"));

                Signature sig = new Signature("Test runner", "*****@*****.**", DateTimeOffset.Now);

                repo.ApplyTag("release/2.2.2");

                VersionGenerator versionGenerator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                Assert.Equal("tag release/2.2.2", versionGenerator.BranchName);
            }
        }
Пример #20
0
        public void CommitTimeTest()
        {
            // DateTime structure which represents February 3nd, 2020. It must be 2851200 seconds since January 1st, 2020
            DateTimeOffset commit_time = new DateTimeOffset(new DateTime(2020, 2, 3), TimeSpan.Zero);

            using (TempRepoProvider tempRepo = new TempRepoProvider("Test3.version.json", commit_time))
            {
                using Repository repo = new Repository(tempRepo.RepoDirectory.FullName);

                Commands.Checkout(repo, repo.CreateBranch("aabb"));

                VersionGenerator version_generator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                string expected_version = "3.0.2-alpha.1.2851200.aabb";

                Assert.Equal(expected_version, version_generator.VersionWithoutBuildData);
            }
        }
Пример #21
0
        public void Test7()
        {
            using (TempRepoProvider tempRepo = new TempRepoProvider("Test3.version.json"))
            {
                using Repository repo = new Repository(tempRepo.RepoDirectory.FullName);

                Commands.Checkout(repo, repo.CreateBranch("snd5"));

                VersionGenerator versionGenerator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                DateTime time = repo.Head.Tip.Committer.When.UtcDateTime;

                string expected_string = "3.0.2-alpha.1."
                                         + (new DateTimeOffset(time).ToUnixTimeSeconds() - new DateTimeOffset(new DateTime(2020, 1, 1), TimeSpan.Zero).ToUnixTimeSeconds())
                                         + ".snd5+codename.Test3.head.snd5.commit." + repo.Head.Tip.Sha + ".bugfix";

                Assert.Equal(expected_string, versionGenerator.FullVersion);
            }
        }
Пример #22
0
        private ExtendedRegistry GetTemporaryRegistryImpl(Assembly asm)
        {
            var res = new ExtendedRegistry();

            res.AssemblyName     = asm.GetName().Name;
            res.AppVersion       = VersionGenerator.Init(asm);
            res.MachineName      = Environment.MachineName;
            res.AssemblyFilePath = new Uri(asm.CodeBase).LocalPath;
            res.Is64BitProcess   = Environment.Is64BitProcess;
            res.ExeFileDir       = Path.GetDirectoryName(res.AssemblyFilePath);
            res.SyrupDir         = FindDir(res.ExeFileDir, _SYRUP_DIR);
            res.IsSyrup          = !string.IsNullOrEmpty(res.SyrupDir);

            res.GitDir            = FindDir(res.ExeFileDir, _GIT_DIR);
            res.DevDir            = FindDevDir(res.ExeFileDir, _DEV_DIR, res.SyrupDir);
            res.RootDir           = GetRoot(res.ExeFileDir, res.SyrupDir, res.DevDir);
            res.RepositoryRootDir = GetRepositoryRoot(res.GitDir);
            res.IsDeveloperMode   = IsDeveloperMode(res.DevDir);
            var dv = GetDevSettings(res.DevDir);


            res.WorkDir   = GetWorkDir(res.RootDir);
            res.LogDir    = GetSimpleDir(res.RootDir, _LOG_DIR, res.IsDeveloperMode);
            res.ConfigDir = GetSimpleDir(res.RootDir, _CONFIG_DIR, res.IsDeveloperMode);
            res.GlobalDir = Path.Combine(res.RootDir, _GLOBAL_DIR);



            res.IsDeveloperMode = dv.IsDeveloperMode && !dv.DeveloperConfig.IgnoreMe;

            if (res.IsDeveloperMode)
            {
                ExecuteDevModel(res, dv);
            }
#if DEBUG
            res.IsDebug = true;
#else
            res.IsDebug = false;
#endif
            Misc.CreateDirIfNotExist(res.ConfigDir);
            Misc.CreateDirIfNotExist(res.LogDir);
            return(res);
        }
Пример #23
0
        public void Test10()
        {
            using (TempRepoProvider tempRepo = new TempRepoProvider("Test3.version.json"))
            {
                using Repository repo = new Repository(tempRepo.RepoDirectory.FullName);

                Commands.Checkout(repo, repo.CreateBranch("uuuu8"));

                VersionGenerator versionGenerator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                DateTime time = repo.Head.Tip.Committer.When.UtcDateTime;

                string expected_version = "3.0.2-alpha.1."
                                          + (new DateTimeOffset(time).ToUnixTimeSeconds() - new DateTimeOffset(new DateTime(2020, 1, 1), TimeSpan.Zero).ToUnixTimeSeconds())
                                          + ".uuuu8";

                Assert.Equal(expected_version, versionGenerator.VersionWithoutBuildData);
            }
        }
Пример #24
0
        public void NormalizationTest1()
        {
            // DateTime structure which represents February 3nd, 2020. It must be 2851200 seconds since January 1st, 2020
            DateTimeOffset commit_time = new DateTimeOffset(new DateTime(2020, 2, 3), TimeSpan.Zero);

            using (TempRepoProvider tempRepo = new TempRepoProvider("Test3.version.json", commit_time))
            {
                using Repository repo = new Repository(tempRepo.RepoDirectory.FullName);

                Commands.Checkout(repo, repo.CreateBranch("feature/NewFeature"));

                VersionGenerator versionGenerator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                Assert.Equal("feature/NewFeature", versionGenerator.BranchName);

                string expected_version = "3.0.2-alpha.1.2851200.feature-NewFeature+codename.Test3.head.feature-NewFeature.commit." + repo.Head.Tip.Sha + ".bugfix";

                Assert.Equal(expected_version, versionGenerator.FullVersion);

                Assert.True(SemVersion.TryParse(versionGenerator.FullVersion, out _, true));
            }
        }
Пример #25
0
        public void NormalizationTest2()
        {
            // DateTime structure which represents February 3nd, 2020. It must be 2851200 seconds since January 1st, 2020
            DateTimeOffset commit_time = new DateTimeOffset(new DateTime(2020, 2, 3), TimeSpan.Zero);

            using (TempRepoProvider tempRepo = new TempRepoProvider("Test1.version.json", commit_time))
            {
                using Repository repo = new Repository(tempRepo.RepoDirectory.FullName);

                repo.ApplyTag("release/5.0.300");

                VersionGenerator versionGenerator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                Assert.Equal("tag release/5.0.300", versionGenerator.BranchName);

                string expected_version = "1.1.1+codename.Test1.head.tag-release-5-0-300.commit." + repo.Head.Tip.Sha;

                Assert.Equal(expected_version, versionGenerator.FullVersion);

                Assert.True(SemVersion.TryParse(versionGenerator.FullVersion, out _, true));
            }
        }
Пример #26
0
        public void DetachedHeadTest()
        {
            using (TempRepoProvider tempRepo = new TempRepoProvider("Test1.version.json"))
            {
                using Repository repo = new Repository(tempRepo.RepoDirectory.FullName);
                Commands.Checkout(repo, repo.CreateBranch("bd"));

                Commit firstCommit = repo.Head.Tip;

                File.Copy("Test3.version.json", Path.Combine(tempRepo.RepoDirectory.FullName, "Test3.version.json"));

                Signature sig = new Signature("Test runner", "*****@*****.**", DateTimeOffset.Now);

                Commands.Stage(repo, "*");
                repo.Commit("Second commit", sig, sig);

                Commands.Checkout(repo, firstCommit);

                VersionGenerator versionGenerator = new VersionGenerator(tempRepo.RepoVersionFilePath);

                Assert.Equal("detached HEAD", versionGenerator.BranchName);
            }
        }
Пример #27
0
    // Command handlers

    // [CommandHandler] inherited
    public virtual Task SignIn(SignInCommand command, CancellationToken cancellationToken = default)
    {
        var(session, user, authenticatedIdentity) = command;
        var context = CommandContext.GetCurrent();

        if (Computed.IsInvalidating())
        {
            _ = GetAuthInfo(session, default);
            _ = GetSessionInfo(session, default);
            var invSessionInfo = context.Operation().Items.Get <SessionInfo>();
            if (invSessionInfo != null)
            {
                _ = GetUser(invSessionInfo.UserId, default);
                _ = GetUserSessions(invSessionInfo.UserId, default);
            }
            return(Task.CompletedTask);
        }

        if (!user.Identities.ContainsKey(authenticatedIdentity))
        {
            throw new ArgumentOutOfRangeException(
                      $"{nameof(command)}.{nameof(SignInCommand.AuthenticatedIdentity)}");
        }

        var sessionInfo = SessionInfos.GetValueOrDefault(session.Id);

        sessionInfo ??= new SessionInfo(session.Id, Clocks.SystemClock.Now);
        if (sessionInfo.IsSignOutForced)
        {
            throw Errors.ForcedSignOut();
        }

        var isNewUser = false;
        var userWithAuthenticatedIdentity = GetByUserIdentity(authenticatedIdentity);

        if (string.IsNullOrEmpty(user.Id))
        {
            // No user.Id -> try to find existing user by authenticatedIdentity
            if (userWithAuthenticatedIdentity == null)
            {
                user = user with {
                    Id = GetNextUserId()
                };
                isNewUser = true;
            }
            else
            {
                user = MergeUsers(userWithAuthenticatedIdentity, user);
            }
        }
        else
        {
            // We have Id -> the user exists for sure, but we might need to switch
            // to userWithAuthenticatedIdentity, otherwise we'll register the same
            // UserIdentity for 2 or more users
            _ = long.Parse(user.Id, NumberStyles.Integer, CultureInfo.InvariantCulture);
            var existingUser = Users[user.Id];
            user = userWithAuthenticatedIdentity ?? MergeUsers(existingUser, user);
        }

        // Update user.Version
        user = user with {
            Version = VersionGenerator.NextVersion(user.Version),
        };

        // Update SessionInfo
        sessionInfo = sessionInfo with {
            AuthenticatedIdentity = authenticatedIdentity,
            UserId = user.Id,
        };

        // Persist changes
        Users[user.Id] = user;
        sessionInfo    = UpsertSessionInfo(sessionInfo, sessionInfo.Version);
        context.Operation().Items.Set(sessionInfo);
        context.Operation().Items.Set(isNewUser);
        return(Task.CompletedTask);
    }
Пример #28
0
 public void Init(VersionGenerator generator)
 {
     _versionGenerator = generator;
 }
Пример #29
0
        static int Main(string[] args)
        {
            Argument path_to_version_file_arg = new Argument <FileInfo>("path-to-version-file")
            {
                Description = "An absolute or relative path to a version json file."
            };

            RootCommand commandRoot = new RootCommand
            {
                Description = "GmodNET.VersionTool. SemVer 2.0.0 compatible version generator."
            };

            Command getVersionCommand = new Command("getVersion")
            {
                Description = "Get the full version including build metadata."
            };

            Option skipBuildDataOption = new Option <bool>("--skip-build-data", "Should the version generator skip build metadata in the generated version.");

            getVersionCommand.AddArgument(path_to_version_file_arg);
            getVersionCommand.AddOption(skipBuildDataOption);

            getVersionCommand.Handler = CommandHandler.Create <FileInfo, bool>((FileInfo pathToVersionFile, bool skipBuildData) =>
            {
                VersionGenerator versionGenerator = new VersionGenerator(pathToVersionFile.FullName);

                if (!skipBuildData)
                {
                    Console.WriteLine(versionGenerator.FullVersion);
                }
                else
                {
                    Console.WriteLine(versionGenerator.VersionWithoutBuildData);
                }
            });

            Command getCommitCommand = new Command("getCommit", "Get the current git commit hash.");

            getCommitCommand.AddArgument(path_to_version_file_arg);

            getCommitCommand.Handler = CommandHandler.Create((FileInfo pathToVersionFile) =>
            {
                VersionGenerator versionGenerator = new VersionGenerator(pathToVersionFile.FullName);

                Console.WriteLine(versionGenerator.CommitHash);
            });

            Command getBranchNameCommand = new Command("getBranchName", "Get the current git HEAD name.");

            getBranchNameCommand.AddArgument(path_to_version_file_arg);

            getBranchNameCommand.Handler = CommandHandler.Create((FileInfo pathToVersionFile) =>
            {
                VersionGenerator versionGenerator = new VersionGenerator(pathToVersionFile.FullName);

                Console.WriteLine(versionGenerator.BranchName);
            });

            commandRoot.Add(getVersionCommand);
            commandRoot.Add(getCommitCommand);
            commandRoot.Add(getBranchNameCommand);

            return(commandRoot.Invoke(args));
        }
Пример #30
0
        public void Test9()
        {
            VersionGenerator versionGenerator = new VersionGenerator("Test2.version.json");

            Assert.Equal("2.2.2", versionGenerator.VersionWithoutBuildData);
        }