Ejemplo n.º 1
0
 public CommitInfo(CommitOption option, ICollection <ITreeNodePath> dirtyItemList, ICollection <ITreeNodePath> dirtyPropertiesList, ICollection <IDocument> dirtyDocumentList)
 {
     this.Option              = option;
     this.DirtyItemList       = dirtyItemList;
     this.DirtyPropertiesList = dirtyPropertiesList;
     this.DirtyDocumentList   = dirtyDocumentList;
 }
Ejemplo n.º 2
0
        public static Result Commit(this FileSystemClient fs, U8Span mountName, CommitOption option)
        {
            Result             rc;
            FileSystemAccessor fileSystem;
            Span <byte>        logBuffer = stackalloc byte[0x40];

            if (fs.Impl.IsEnabledAccessLog())
            {
                Tick start = fs.Hos.Os.GetSystemTick();
                rc = fs.Impl.Find(out fileSystem, mountName);
                Tick end = fs.Hos.Os.GetSystemTick();

                var sb = new U8StringBuilder(logBuffer, true);
                sb.Append(LogName).Append(mountName).Append(LogCommitOption).AppendFormat((int)option.Flags, 'X');
                logBuffer = sb.Buffer;

                fs.Impl.OutputAccessLogUnlessResultSuccess(rc, start, end, null, new U8Span(logBuffer));
            }
            else
            {
                rc = fs.Impl.Find(out fileSystem, mountName);
            }
            fs.Impl.AbortIfNeeded(rc);
            if (rc.IsFailure())
            {
                return(rc);
            }

            if (fs.Impl.IsEnabledAccessLog() && fileSystem.IsEnabledAccessLog())
            {
                Tick start = fs.Hos.Os.GetSystemTick();
                rc = RunCommit(fs, option, fileSystem);
                Tick end = fs.Hos.Os.GetSystemTick();

                fs.Impl.OutputAccessLog(rc, start, end, null, new U8Span(logBuffer));
            }
            else
            {
                rc = RunCommit(fs, option, fileSystem);
            }
            fs.Impl.AbortIfNeeded(rc);
            return(rc);
Ejemplo n.º 3
0
            static Result RunCommit(FileSystemClient fs, CommitOption option, FileSystemAccessor fileSystem)
            {
                if ((option.Flags & (CommitOptionFlag.ClearRestoreFlag | CommitOptionFlag.SetRestoreFlag)) == 0)
                {
                    return(fileSystem.Commit());
                }

                if (option.Flags != CommitOptionFlag.ClearRestoreFlag &&
                    option.Flags != CommitOptionFlag.SetRestoreFlag)
                {
                    return(ResultFs.InvalidCommitOption.Log());
                }

                Result rc = fileSystem.GetSaveDataAttribute(out SaveDataAttribute attribute);

                if (rc.IsFailure())
                {
                    return(rc);
                }

                if (attribute.ProgramId == SaveData.InvalidProgramId)
                {
                    attribute.ProgramId = SaveData.AutoResolveCallerProgramId;
                }

                var extraDataMask = new SaveDataExtraData();

                extraDataMask.Flags = SaveDataFlags.Restore;

                var extraData = new SaveDataExtraData();

                extraDataMask.Flags = option.Flags == CommitOptionFlag.SetRestoreFlag
                    ? SaveDataFlags.Restore
                    : SaveDataFlags.None;

                return(fs.Impl.WriteSaveDataFileSystemExtraData(SaveDataSpaceId.User, in attribute, in extraData,
                                                                in extraDataMask));
            }