Пример #1
0
        public List <T> ToList(int pageIndex, int pageSize)
        {
            Type   type             = typeof(T);
            string tableName        = StoreBase.GetTableName(type);
            string columnJoinString = StoreBase.GetColumnJoinString(type);
            List <PropertyInfo> propertyInfoList = StoreBase.GetPropertyInfoList(type);
            int pageStart = (pageIndex - 1) * pageSize;
            Sql sql       = ExpressionFactory.ToWhereSql(_predicate);

            StringBuilder sqlStringBuilder = new StringBuilder();

            sqlStringBuilder.Append($"SELECT {columnJoinString} FROM {tableName}");
            if (!string.IsNullOrWhiteSpace(sql.CommandText))
            {
                sqlStringBuilder.Append($" WHERE {sql.CommandText}");
            }

            if (!string.IsNullOrWhiteSpace(_orderField) && !string.IsNullOrWhiteSpace(_orderBy))
            {
                sqlStringBuilder.Append($" ORDER BY {_orderField} {_orderBy}");
            }

            sqlStringBuilder.Append($" LIMIT {pageStart},{pageSize};");

            List <T> list = _dbSQLHelper.ExecuteList <T>(_consolePrintSql, propertyInfoList, sqlStringBuilder.ToString(), _dbSQLHelper.Convert(sql.Parameters));

            return(list);
        }
Пример #2
0
        private static Sql ResolveMethodCallIn(MethodCallExpression expression)
        {
            string left  = StoreBase.GetColumnName((MemberExpression)expression.Arguments[0]);
            string right = "";

            if (expression.Object.NodeType == ExpressionType.MemberAccess)
            {
                right = ResolveMemberValue((MemberExpression)expression.Object);
            }
            else if (expression.Object.NodeType == ExpressionType.Call)
            {
                right = ResolveMethodCall((MethodCallExpression)expression.Object).CommandText;
            }
            else
            {
                throw new ExpressionException();
            }

            if (string.IsNullOrWhiteSpace(right))
            {
                return(new Sql(Combining(left, KeywordConst.IN, "('')")));
            }

            return(new Sql(Combining(left, KeywordConst.IN, $"({right})")));
        }
Пример #3
0
        public T SingleOrDefault()
        {
            Type type = typeof(T);
            List <PropertyInfo> propertyInfoList = StoreBase.GetPropertyInfoList(type);
            string tableName        = StoreBase.GetTableName(type);
            string columnJoinString = StoreBase.GetColumnJoinString(type);
            Sql    sql = ExpressionFactory.ToWhereSql(_predicate);

            StringBuilder sqlStringBuilder  = new StringBuilder($"SELECT {columnJoinString} FROM {tableName}");
            StringBuilder pageStringBuilder = new StringBuilder($"SELECT COUNT(*) FROM {tableName}");

            if (!string.IsNullOrWhiteSpace(sql.CommandText))
            {
                sqlStringBuilder.Append($" WHERE {sql.CommandText}");
                pageStringBuilder.Append($" WHERE {sql.CommandText}");
            }
            pageStringBuilder.Append(";");

            var parameters = _dbSQLHelper.Convert(sql.Parameters);
            int total      = Convert.ToInt32(_dbSQLHelper.ExecuteScalar(_consolePrintSql, pageStringBuilder.ToString(), parameters));

            if (total > 1)
            {
                throw new SingleOrDefaultException();
            }

            sqlStringBuilder.Append($" LIMIT 0,1;");

            T instance = _dbSQLHelper.ExecuteList <T>(_consolePrintSql, propertyInfoList, sqlStringBuilder.ToString(), parameters).FirstOrDefault();

            return(instance);
        }
Пример #4
0
        public T FirstOrDefault()
        {
            Type type = typeof(T);
            List <PropertyInfo> propertyInfoList = StoreBase.GetPropertyInfoList(type);
            string tableName        = StoreBase.GetTableName(type);
            string columnJoinString = StoreBase.GetColumnJoinString(type);
            Sql    sql = ExpressionFactory.ToWhereSql(_predicate);

            StringBuilder sqlStringBuilder = new StringBuilder();

            sqlStringBuilder.Append($"SELECT {columnJoinString} FROM {tableName}");
            if (!string.IsNullOrWhiteSpace(sql.CommandText))
            {
                sqlStringBuilder.Append($" WHERE {sql.CommandText}");
            }

            if (!string.IsNullOrWhiteSpace(_orderField) && !string.IsNullOrWhiteSpace(_orderBy))
            {
                sqlStringBuilder.Append($" ORDER BY {_orderField} {_orderBy}");
            }

            sqlStringBuilder.Append($" LIMIT 0,1;");

            T instance = _dbSQLHelper.ExecuteList <T>(_consolePrintSql, propertyInfoList, sqlStringBuilder.ToString(), _dbSQLHelper.Convert(sql.Parameters)).FirstOrDefault();

            return(instance);
        }
Пример #5
0
        public List <T> ToList()
        {
            Type type = typeof(T);
            List <PropertyInfo> propertyInfoList = StoreBase.GetPropertyInfoList(type);
            string tableName        = StoreBase.GetTableName(type);
            string columnJoinString = StoreBase.GetColumnJoinString(type);
            Sql    sql = ExpressionFactory.ToWhereSql(_predicate);

            StringBuilder sqlStringBuilder = new StringBuilder();

            sqlStringBuilder.Append($"SELECT {columnJoinString} FROM {tableName} WITH(NOLOCK)");
            if (!string.IsNullOrWhiteSpace(sql.CommandText))
            {
                sqlStringBuilder.Append($" WHERE {sql.CommandText}");
            }

            if (!string.IsNullOrWhiteSpace(_orderField) && !string.IsNullOrWhiteSpace(_orderBy))
            {
                sqlStringBuilder.Append($" ORDER BY {_orderField} {_orderBy}");
            }
            else
            {
                sqlStringBuilder.Append($" ORDER BY id");
            }

            sqlStringBuilder.Append($" OFFSET 0 ROWS FETCH NEXT 9999999 ROWS ONLY;");

            List <T> list = _dbSQLHelper.ExecuteList <T>(_consolePrintSql, propertyInfoList, sqlStringBuilder.ToString(), _dbSQLHelper.Convert(sql.Parameters));

            return(list);
        }
Пример #6
0
        private RefUpdateResult UpdateImpl(RevWalk.RevWalk walk, StoreBase store)
        {
            if (isNameConflicting())
            {
                return(RefUpdateResult.LockFailure);
            }

            var @lock = new LockFile(_looseFile);

            if ([email protected]())
            {
                return(RefUpdateResult.LockFailure);
            }

            try
            {
                OldObjectId = _db.IdOf(Name);
                if (_expValue != null)
                {
                    ObjectId o = OldObjectId ?? ObjectId.ZeroId;
                    if (!AnyObjectId.equals(_expValue, o))
                    {
                        return(RefUpdateResult.LockFailure);
                    }
                }

                if (OldObjectId == null)
                {
                    return(store.Store(@lock, RefUpdateResult.New));
                }

                RevObject newObj = SafeParse(walk, _newValue);
                RevObject oldObj = SafeParse(walk, OldObjectId);
                if (newObj == oldObj)
                {
                    return(store.Store(@lock, RefUpdateResult.NoChange));
                }

                RevCommit newCom = (newObj as RevCommit);
                RevCommit oldCom = (oldObj as RevCommit);
                if (newCom != null && oldCom != null)
                {
                    if (walk.isMergedInto(oldCom, newCom))
                    {
                        return(store.Store(@lock, RefUpdateResult.FastForward));
                    }
                }

                if (IsForceUpdate)
                {
                    return(store.Store(@lock, RefUpdateResult.Forced));
                }

                return(RefUpdateResult.Rejected);
            }
            finally
            {
                @lock.Unlock();
            }
        }
Пример #7
0
        public async Task <IEnumerable <ProductBase> > GetProducts(StoreBase store, List <Guid> guids)
        {
            var client  = new RestClient(store.ApiUrl);
            var request = new RestRequest(_paths["products"]);

            request.AddJsonBody(guids);
            request.Method = Method.POST;
            var response = await client.ExecuteAsync <IEnumerable <ProductBase> >(request);

            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                return(response.Data);
            }
            else
            {
                if (response.ErrorException != null)
                {
                    throw response.ErrorException;
                }
                else
                {
                    throw new Exception(response.StatusDescription);
                }
            }
        }
Пример #8
0
        /// <summary>
        /// 保存合并设置
        /// </summary>
        /// <param name="busiNo">业务编号</param>
        /// <param name="si">Sys_Summary_Item对象</param>
        /// <returns>DataRowSaveResult</returns>
        public DataRowSaveResult SaveDB(string busiNo, Sys_Summary_Item si)
        {
            byte[]  byt = StoreBase.GetBytes(si).Value;
            DataRow dr  = this.FindRow("BusiNo", busiNo);

            if (dr == null)
            {
                dr = this.NewRow(); this.Rows.Add(dr);
            }
            dr["UserID"]        = Sys_User.m_LoginUserID;
            dr["BusiNo"]        = busiNo;
            dr["SummaryObject"] = byt;
            bf_Busi           bb   = bf_Busis.GetItem("Sys_Summary_Set");
            DataRowSaveResult drsr = null;

            if (dr.RowState == DataRowState.Added)
            {
                drsr = bb.DataRowInsert(dr);
            }
            if (dr.RowState == DataRowState.Modified)
            {
                drsr = bb.DataRowUpdate(dr);
            }
            if (drsr.Success)
            {
                dr.AcceptChanges(); return(null);
            }
            dr.RejectChanges();
            return(drsr);
        }
Пример #9
0
        public virtual void Load(StringReaderEx str, object obj)
        {
            Type t = obj.GetType();

            var fields = t.GetFields(getFieldFlags).Where(f => f.GetCustomAttributes(typeof(StoreThis), true).Length > 0).ToArray();

            int len = str.ReadLineInt();

            if (fields.Length != len)
            {
                throw new UnityException("Incorrect save file");
            }

            for (int i = 0; i < len; i++)
            {
                string fieldName = str.ReadLine();
                string fieldData = str.ReadLine();

                //Debug.Log("    > Loading field "+fieldName);
                FieldInfo finfo = fields.Where(f => f.Name == fieldName).First();
                if (finfo == null)
                {
                    continue;
                }
                StoreBase.LoadField(finfo, obj, fieldData);
            }
        }
        public Registrator(IConfiguration conf, StoreBase storeObj)
        {
            this.configuration = conf;
            var aggregatorUrl = conf.GetValue <string>("aggregatorUrl");

            this.storeObj = storeObj;
            _client       = new RestClient(aggregatorUrl);
        }
Пример #11
0
 public DisplayStore(StoreBase storeBase, InventoryBase inventoryBase)
 {
     Manager         = UIManager.instance;
     Store           = storeBase;
     Inventory       = inventoryBase;
     MenuPanelParent = CreateStoreUI(new Vector2(0, 0),
                                     new Vector2(0, 0));
 }
Пример #12
0
        /// <summary>
        /// Clone
        /// </summary>
        /// <returns></returns>
        public new SanPackMain Clone()
        {
            SanPackMain sanPackMain = base.Clone() as SanPackMain;

            sanPackMain.StoreBase = StoreBase.Clone();
            sanPackMain.Oper      = Oper.Clone();

            return(sanPackMain);
        }
Пример #13
0
    public void Init(StoreBase store)
    {
        var creators = this.GetType().GetFields()
                       .Where(f => f.GetValue(this).GetType().IsSubclassOf(typeof(DispatcherBase)))
                       .Select(f => f.GetValue(this) as DispatcherBase)
                       .ToList();

        creators.ForEach(c => c.Init(store));
    }
Пример #14
0
        /// <summary>
        /// Clone
        /// </summary>
        /// <returns></returns>
        public new SanPackList Clone()
        {
            SanPackList sanPackList = base.Clone() as SanPackList;

            sanPackList.SanPackMain = SanPackMain.Clone();
            sanPackList.StoreBase   = StoreBase.Clone();

            return(sanPackList);
        }
Пример #15
0
        public virtual Periods ToPeriods(byte[] bytes)
        {
            BooleanValue <Periods> bv = StoreBase.GetObjectBV <Periods>(bytes, true, "");

            if (bv.Success)
            {
                return(bv.Value);
            }
            return(null);
        }
Пример #16
0
        public virtual byte[] ToBytes()
        {
            BooleanValue <byte[]> bv = StoreBase.GetBytes(this, true, "");

            if (bv.Success)
            {
                return(bv.Value);
            }
            return(null);
        }
Пример #17
0
        /// <summary>
        /// 克隆函数实现
        /// </summary>
        /// <returns></returns>
        public new SanDept Clone()
        {
            SanDept sanDept = base.Clone() as SanDept;

            sanDept.StoreBase = StoreBase.Clone();

            sanDept.Oper = Oper.Clone();

            return(sanDept);
        }
Пример #18
0
        public List <dynamic> Query(string sql, dynamic parameter)
        {
            if (string.IsNullOrWhiteSpace(sql))
            {
                throw new EmptySQLException();
            }

            var            parameters = StoreBase.DynamicToParameters(parameter);
            List <dynamic> list       = _dbSQLHelper.ExecuteList(_consolePrintSql, sql, _dbSQLHelper.Convert(parameters));

            return(list);
        }
Пример #19
0
        public bool Delete <T>(Expression <Func <T, bool> > predicate)
        {
            if (predicate == null)
            {
                throw new ExpressionIsNullException();
            }

            Sql sql = StoreBase.BuildDeleteSQL(predicate);

            bool isNewConnection = TransactionIsOpen.Value;

            return(_dbSQLHelper.ExecuteNonQuery(isNewConnection, _consolePrintSql, sql.CommandText, _dbSQLHelper.Convert(sql.Parameters)) > 0);
        }
Пример #20
0
 public EntitySet(
     ChangeSet changeSet,
     StoreBase dataSource,
     bool validateEntity
     )
 {
     _changeSet      = changeSet;
     _dataSource     = dataSource;
     _validateEntity = validateEntity;
     if (validateEntity)
     {
         _validator = MobileDB.Validator;
     }
 }
Пример #21
0
        public bool Insert <T>(T instance)
        {
            if (instance == null)
            {
                throw new DataIsNullException();
            }

            string sql        = StoreBase.BuildInsertSQL(instance);
            var    parameters = StoreBase.BuildParameters(ExpressionFactory.GetColumnList(instance));

            bool isNewConnection = TransactionIsOpen.Value;

            return(_dbSQLHelper.ExecuteNonQuery(isNewConnection, _consolePrintSql, sql, _dbSQLHelper.Convert(parameters)) > 0);
        }
Пример #22
0
        public int Count()
        {
            Sql sql = ExpressionFactory.ToWhereSql(_predicate);

            StringBuilder stringBuilder = new StringBuilder($"SELECT COUNT(*) FROM {StoreBase.GetTableName(typeof(T))} WITH(NOLOCK)");

            if (!string.IsNullOrWhiteSpace(sql.CommandText))
            {
                stringBuilder.Append($" WHERE {sql.CommandText}");
            }

            int total = Convert.ToInt32(_dbSQLHelper.ExecuteScalar(_consolePrintSql, stringBuilder.ToString(), _dbSQLHelper.Convert(sql.Parameters)));

            return(total);
        }
Пример #23
0
        public virtual void Save(StringWriterEx str, object obj)
        {
            Type t = obj.GetType();

            var fields = t.GetFields(getFieldFlags).Where(f => f.GetCustomAttributes(typeof(StoreThis), true).Length > 0).ToArray();

            str.WriteLine(fields.Length);
            //Debug.Log("   > Class has "+fields.Length+" fields");
            foreach (FieldInfo f in fields)
            {
                str.WriteLine(f.Name);

                str.WriteLine(StoreBase.SaveField(f, obj));
            }
        }
Пример #24
0
        public bool Update <T>(Expression <Func <T, bool> > expression, T instance)
        {
            if (expression == null)
            {
                throw new ExpressionIsNullException();
            }
            if (instance == null)
            {
                throw new DataIsNullException();
            }

            var result = StoreBase.BuildUpdateSQLAndParameters(expression, instance);

            bool isNewConnection = TransactionIsOpen.Value;

            return(_dbSQLHelper.ExecuteNonQuery(isNewConnection, _consolePrintSql, result.Item1, _dbSQLHelper.Convert(result.Item2)) > 0);
        }
Пример #25
0
        public static T Create <T>(IDataReader reader, List <PropertyInfo> propertyInfoList)
        {
            T instance = Activator.CreateInstance <T>();

            foreach (PropertyInfo property in propertyInfoList)
            {
                string key   = StoreBase.GetPropertyColumnAttributeName(property);
                object value = reader[key];
                if (value is DBNull)
                {
                    continue;
                }

                property.SetValue(instance, value);
            }
            return(instance);
        }
Пример #26
0
        /// <summary>
        /// 克隆函数实现
        /// </summary>
        /// <returns></returns>
        public new SanApplyMain Clone()
        {
            SanApplyMain sanApplyMain = base.Clone() as SanApplyMain;

            sanApplyMain.StoreBase = StoreBase.Clone();

            sanApplyMain.ApplyOper = ApplyOper.Clone();

            sanApplyMain.AppoveOper = AppoveOper.Clone();

            sanApplyMain.ReturnOper = ReturnOper.Clone();

            sanApplyMain.ReturnAPPOper = ReturnAPPOper.Clone();

            sanApplyMain.StopOper = StopOper.Clone();

            return(sanApplyMain);
        }
Пример #27
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <DBContext>(options => {
                options.UseMySql(Configuration.GetConnectionString("Db"),
                                 mySqlOptions => mySqlOptions
                                 .CharSet(CharSet.Utf8)
                                 .EnableRetryOnFailure(5)
                                 // replace with your Server Version and Type
                                 .ServerVersion(new Version(8, 0, 18), ServerType.MySql));
            });
            var storeObj = new StoreBase();

            Configuration.GetSection("Store").Bind(storeObj);
            services.AddSingleton <StoreBase>(storeObj);
            services.AddHealthChecks();
            services.Configure <KestrelServerOptions>(
                Configuration.GetSection("Kestrel"));
            services.AddControllers();
            services.AddSwaggerGen();
        }
Пример #28
0
        private static Sql ResolveMethodCallEqualsOrLike(MethodCallExpression expression)
        {
            string left  = StoreBase.GetColumnName((MemberExpression)expression.Object);
            string right = "";

            if (expression.Arguments[0] is MemberExpression)
            {
                right = Eval((MemberExpression)expression.Arguments[0]);
            }
            else if (expression.Arguments[0] is ConstantExpression)
            {
                right = ResolveConstant((ConstantExpression)expression.Arguments[0]);
            }
            else if (expression.Arguments[0] is MethodCallExpression)
            {
                right = ResolveMethodCall((MethodCallExpression)expression.Arguments[0]).CommandText;
            }
            else
            {
                throw new ExpressionException();
            }

            Sql sql = new Sql();

            switch (expression.Method.Name)
            {
            case KeywordConst.Equals:
                sql.CommandText = Combining(left, "=", $"@{left}");
                sql.Parameters.Add(new Parameter(left, right));
                return(sql);

            case KeywordConst.Contains:
                sql.CommandText = Combining(left, KeywordConst.LIKE, $"@{left}");
                sql.Parameters.Add(new Parameter(left, $"%{right}%"));
                return(sql);

            default:
                throw new ExpressionException();
            }
        }
Пример #29
0
        public List <T> ToList(int pageIndex, int pageSize, out int total, out int totalPage)
        {
            Type type = typeof(T);
            List <PropertyInfo> propertyInfoList = StoreBase.GetPropertyInfoList(type);
            string tableName        = StoreBase.GetTableName(type);
            string columnJoinString = StoreBase.GetColumnJoinString(type);
            Sql    sql = ExpressionFactory.ToWhereSql(_predicate);

            int pageStart = (pageIndex - 1) * pageSize;

            StringBuilder sqlStringBuilder  = new StringBuilder($"SELECT {columnJoinString} FROM {tableName} WITH(NOLOCK)");
            StringBuilder pageStringBuilder = new StringBuilder($"SELECT COUNT(*) FROM {tableName} WITH(NOLOCK)");

            if (!string.IsNullOrWhiteSpace(sql.CommandText))
            {
                sqlStringBuilder.Append($" WHERE {sql.CommandText}");
                pageStringBuilder.Append($" WHERE {sql.CommandText}");
            }
            pageStringBuilder.Append(";");

            var parameters = _dbSQLHelper.Convert(sql.Parameters);

            total     = Convert.ToInt32(_dbSQLHelper.ExecuteScalar(_consolePrintSql, pageStringBuilder.ToString(), parameters));
            totalPage = (total % pageSize == 0) ? (total / pageSize) : (total / pageSize + 1);

            if (!string.IsNullOrWhiteSpace(_orderField) && !string.IsNullOrWhiteSpace(_orderBy))
            {
                sqlStringBuilder.Append($" ORDER BY {_orderField} {_orderBy}");
            }
            else
            {
                sqlStringBuilder.Append($" ORDER BY id");
            }

            sqlStringBuilder.Append($" OFFSET {pageStart} ROWS FETCH NEXT {pageSize} ROWS ONLY;");

            List <T> list = _dbSQLHelper.ExecuteList <T>(_consolePrintSql, propertyInfoList, sqlStringBuilder.ToString(), parameters);

            return(list);
        }
Пример #30
0
        public void TruncateTable <T>()
        {
            string tableName = StoreBase.GetTableName(typeof(T));

            _dbSQLHelper.ExecuteNonQuery(true, _consolePrintSql, $"TRUNCATE TABLE {tableName};");
        }
Пример #31
0
        private RefUpdateResult UpdateImpl(RevWalk.RevWalk walk, StoreBase store)
        {
            int lastSlash = Name.LastIndexOf('/');
            if (lastSlash > 0)
            {
                if (Repository.getAllRefs().ContainsKey(Name.Slice(0, lastSlash)))
                {
                    return RefUpdateResult.LockFailure;
                }
            }

            string rName = Name + "/";
            foreach (Ref r in Repository.getAllRefs().Values)
            {
                if (r.Name.StartsWith(rName))
                {
                    return RefUpdateResult.LockFailure;
                }
            }

            var @lock = new LockFile(_looseFile);
            if ([email protected]())
            {
                return RefUpdateResult.LockFailure;
            }

            try
            {
                OldObjectId = _db.IdOf(Name);
                if (_expValue != null)
                {
                    ObjectId o = OldObjectId ?? ObjectId.ZeroId;
                    if (!_expValue.Equals(o))
                    {
                        return RefUpdateResult.LockFailure;
                    }
                }

                if (OldObjectId == null)
                {
                    return store.Store(@lock, RefUpdateResult.New);
                }

                RevObject newObj = SafeParse(walk, _newValue);
                RevObject oldObj = SafeParse(walk, OldObjectId);
                if (newObj == oldObj)
                {
                    return store.Store(@lock, RefUpdateResult.NoChange);
                }

                if (newObj is RevCommit && oldObj is RevCommit)
                {
                    if (walk.isMergedInto((RevCommit)oldObj, (RevCommit)newObj))
                    {
                        return store.Store(@lock, RefUpdateResult.FastForward);
                    }
                }

                if (IsForceUpdate)
                {
                    return store.Store(@lock, RefUpdateResult.Forced);
                }

                return RefUpdateResult.Rejected;
            }
            finally
            {
                @lock.Unlock();
            }
        }
Пример #32
0
        private RefUpdateResult updateImpl(RevWalk.RevWalk walk, StoreBase store)
        {
            LockFile @lock;
            RevObject newObj;
            RevObject oldObj;

            @lock = new LockFile(looseFile);
            if ([email protected]())
                return RefUpdateResult.LockFailure;
            try
            {
                OldObjectId = db.IdOf(Name);
                if (expValue != null)
                {
                    ObjectId o;
                    o = OldObjectId != null ? OldObjectId : ObjectId.ZeroId;
                    if (!expValue.Equals(o))
                        return RefUpdateResult.LockFailure;
                }
                if (OldObjectId == null)
                    return store.Store(@lock, RefUpdateResult.New);

                newObj = safeParse(walk, newValue);
                oldObj = safeParse(walk, OldObjectId);
                if (newObj == oldObj)
                    return store.Store(@lock, RefUpdateResult.NoChange);

                if (newObj is RevCommit && oldObj is RevCommit)
                {
                    if (walk.isMergedInto((RevCommit)oldObj, (RevCommit)newObj))
                        return store.Store(@lock, RefUpdateResult.FastForward);
                }

                if (IsForceUpdate)
                    return store.Store(@lock, RefUpdateResult.Forced);
                return RefUpdateResult.Rejected;
            }
            finally
            {
                @lock.Unlock();
            }
        }
Пример #33
0
        private RefUpdateResult UpdateImpl(RevWalk.RevWalk walk, StoreBase store)
        {
            if (isNameConflicting())
            {
                return RefUpdateResult.LockFailure;
            }

            using (LockFile @lock = new LockFile(_looseFile))
            {
                if ([email protected]())
                {
                    return RefUpdateResult.LockFailure;
                }

                OldObjectId = _db.IdOf(Name);
                if (_expValue != null)
                {
                    ObjectId o = OldObjectId ?? ObjectId.ZeroId;
                    if (!AnyObjectId.equals(_expValue, o))
                    {
                        return RefUpdateResult.LockFailure;
                    }
                }

                if (OldObjectId == null)
                {
                    return store.Store(@lock, RefUpdateResult.New);
                }

                RevObject newObj = SafeParse(walk, _newValue);
                RevObject oldObj = SafeParse(walk, OldObjectId);
                if (newObj == oldObj)
                {
                    return store.Store(@lock, RefUpdateResult.NoChange);
                }

                RevCommit newCom = (newObj as RevCommit);
                RevCommit oldCom = (oldObj as RevCommit);
                if (newCom != null && oldCom != null)
                {
                    if (walk.isMergedInto(oldCom, newCom))
                    {
                        return store.Store(@lock, RefUpdateResult.FastForward);
                    }
                }

                if (IsForceUpdate)
                {
                    return store.Store(@lock, RefUpdateResult.Forced);
                }

                return RefUpdateResult.Rejected;
            }
        }