Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

导入导出优化 #4602

Closed
KeRan213539 opened this issue Dec 30, 2020 · 12 comments
Closed

导入导出优化 #4602

KeRan213539 opened this issue Dec 30, 2020 · 12 comments
Labels
kind/discussion Category issues related to discussion kind/feature type/feature
Milestone

Comments

@KeRan213539
Copy link
Collaborator

KeRan213539 commented Dec 30, 2020

鉴于目前导入导出功能比较弱,导出信息比较少,提出以下几点优化想法:

  1. 目前导入功能检查如果格式不完全符合要求(部分符合)就终止导入.改为不符合的部分忽略,符合的部分处理:
    格式标准:
  • 根目录只包含文件夹和 .meta.yml 文件,其他不处理
  • .meta.yml 文件不是必须,有就处理.
  • .meta.yml 文件中只包含 所属APP 信息,不包含其他信息
  • 文件夹名称作为group ID
  • 文件夹中的文件夹不处理,只处理文件夹中的文件
  • 文件夹中的文件名作为 dataid, 文件内容作为配制内容
  • 根据dataid名称后缀简单判断文件类型,如果无后缀或者后缀无法识别默认为 text
  1. 目前导出改为导出旧版格式, 新增导出新版格式功能
    新版格式在旧格式基础上, 在 .meta.yml 中,或者新增一个 metadata 的文件以替换 .meta.yml,保存更多的信息,如文件类型等.该文件格式不必按照旧 .meta.yml 的格式, 如何方便高效解析如何组织,但是要易懂,方便人工修改
  2. 导入功能新增支持新版导入(不新增新版导入功能,而是在现有导入功能中兼容新格式)
  • 通过某种方式判断是新版还是旧版,例如判断有没有新版的 metadata 文件, 或者 .meta.yml 中有没有新版标志
  1. 【可选】导出的包可以解压修改再压缩为zip, 某些特殊情况下,再压缩后压缩包里会多出一些文件或文件夹,如果正好多出的东西满足了可解析格式,就会被解析,这时有可能解析出错,或者解析成功多出了一些莫名的配制. 对于这种特殊情况,可以考虑在配制中新增一个导入忽略列表的配制,在列表中的文件或文件夹在导入时直接忽略
  • 忽略配制支持通配符
  • 忽略配制考虑是否需要标明是文件或者文件夹
@KeRan213539 KeRan213539 added the kind/feature type/feature label Dec 30, 2020
@wjm0729
Copy link
Contributor

wjm0729 commented Dec 30, 2020

建议: meta文件组好不要以 . 开头, 下面是我的mac系统下

`xxx:config xxx$ ls -a
. .. .DS_Store .meta.yml meta.ini lan
xxx:config xxx$

xxx:config xxx$ ls
meta.ini lan`

.DS_Store .meta.yml 这两个文件在文件夹下默认是隐藏的.

@KomachiSion
Copy link
Collaborator

KomachiSion commented Dec 30, 2020

关于忽略列表,我认为是不是可以通过新版本meta.yml来处理
比如新版本meta.yml就带有这个忽略信息。 导入的时候先读取新版本meta.yml,得知一共有多少个group,每个group有多少dataId,分别是什么类型。然后有哪些可以忽略之类的

类似于:

version: 2(旧版本没有就默认为1)
A(groupId):
   a1(dataId):
      type: text|yml|...
      otherMetadata: ...
   a2:
      ....
B:
   .....

然后根据groupId和dataId 再去读对应的目录和文件加载配置就好了。

如果他有要忽略的配置,元数据里删掉那个配置就可以了。其他多余的文件不管是系统添加的还是用户破坏性添加的,都不去读取和理会就好了。

@KeRan213539
Copy link
Collaborator Author

KeRan213539 commented Dec 30, 2020

建议: meta文件组好不要以 . 开头, 下面是我的mac系统下

`xxx:config xxx$ ls -a
. .. .DS_Store .meta.yml meta.ini lan
xxx:config xxx$

xxx:config xxx$ ls
meta.ini lan`

.DS_Store .meta.yml 这两个文件在文件夹下默认是隐藏的.

旧版格式就不动了,新版格式可以搞
@wjm0729 你对这个issue有兴趣吗?

@KomachiSion
Copy link
Collaborator

建议: meta文件组好不要以 . 开头, 下面是我的mac系统下

`xxx:config xxx$ ls -a
. .. .DS_Store .meta.yml meta.ini lan
xxx:config xxx$

xxx:config xxx$ ls
meta.ini lan`

.DS_Store .meta.yml 这两个文件在文件夹下默认是隐藏的.

我觉得问题不大,如果要完全重新设计,那新逻辑只读.meta.yml 就好了,然后根据元数据信息再去读别的文件,其他无关文件都一概不管。

@KomachiSion KomachiSion added the kind/discussion Category issues related to discussion label Dec 30, 2020
@KeRan213539
Copy link
Collaborator Author

KeRan213539 commented Dec 30, 2020

关于忽略列表,我认为是不是可以通过新版本meta.yml来处理
比如新版本meta.yml就带有这个忽略信息。 导入的时候先读取新版本meta.yml,得知一共有多少个group,每个group有多少dataId,分别是什么类型。然后有哪些可以忽略之类的

类似于:

version: 2(旧版本没有就默认为1)
A(groupId):
   a1(dataId):
      type: text|yml|...
      otherMetadata: ...
   a2:
      ....
B:
   .....

这种感觉搞麻烦了,解压手动修改的时候,新增一个配制还得去元数据里加一下.
忽略列表大部分情况是不需要配的,除非出现了特殊情况才需要去配下.
并且如果是通过 metadata 的话,就不需要忽略了, metadata里标明有哪些配制,就只去读这些,就不存在忽略了

@wjm0729
Copy link
Contributor

wjm0729 commented Dec 30, 2020

建议: meta文件组好不要以 . 开头, 下面是我的mac系统下
xxx:config xxx$ ls -a . .. .DS_Store .meta.yml **meta**.ini lan xxx:config xxx$ xxx:config xxx$ ls **meta**.ini lan
.DS_Store .meta.yml 这两个文件在文件夹下默认是隐藏的.

旧版格式就不动了,新版格式可以搞
@wjm0729 你对这个issue有兴趣吗?

可以的, 周末试试

@KeRan213539
Copy link
Collaborator Author

建议: meta文件组好不要以 . 开头, 下面是我的mac系统下
xxx:config xxx$ ls -a . .. .DS_Store .meta.yml **meta**.ini lan xxx:config xxx$ xxx:config xxx$ ls **meta**.ini lan
.DS_Store .meta.yml 这两个文件在文件夹下默认是隐藏的.

旧版格式就不动了,新版格式可以搞
@wjm0729 你对这个issue有兴趣吗?

可以的, 周末试试

好的,有啥问题可以加这个钉钉群: 23335652

@KomachiSion
Copy link
Collaborator

关于忽略列表,我认为是不是可以通过新版本meta.yml来处理
比如新版本meta.yml就带有这个忽略信息。 导入的时候先读取新版本meta.yml,得知一共有多少个group,每个group有多少dataId,分别是什么类型。然后有哪些可以忽略之类的
类似于:

version: 2(旧版本没有就默认为1)
A(groupId):
   a1(dataId):
      type: text|yml|...
      otherMetadata: ...
   a2:
      ....
B:
   .....

这种感觉搞麻烦了,解压手动修改的时候,新增一个配制还得去元数据里加一下.
忽略列表大部分情况是不需要配的,除非出现了特殊情况才需要去配下.
并且如果是通过 metadata 的话,就不需要忽略了, metadata里标明有哪些配制,就只去读这些,就不存在忽略了

通过对元数据指明是一种, 或者在元数据里记录过滤内容也可以, 但是type这种东西如果没有metadata 要如何记录。

@KomachiSion
Copy link
Collaborator

@wjm0729 我觉得还没有讨论清楚方案, 不要急着提PR。

@KeRan213539
Copy link
Collaborator Author

关于忽略列表,我认为是不是可以通过新版本meta.yml来处理
比如新版本meta.yml就带有这个忽略信息。 导入的时候先读取新版本meta.yml,得知一共有多少个group,每个group有多少dataId,分别是什么类型。然后有哪些可以忽略之类的
类似于:

version: 2(旧版本没有就默认为1)
A(groupId):
   a1(dataId):
      type: text|yml|...
      otherMetadata: ...
   a2:
      ....
B:
   .....

这种感觉搞麻烦了,解压手动修改的时候,新增一个配制还得去元数据里加一下.
忽略列表大部分情况是不需要配的,除非出现了特殊情况才需要去配下.
并且如果是通过 metadata 的话,就不需要忽略了, metadata里标明有哪些配制,就只去读这些,就不存在忽略了

通过对元数据指明是一种, 或者在元数据里记录过滤内容也可以, 但是type这种东西如果没有metadata 要如何记录。

新版导出导入就是为了解决之前导出内容过于简单的问题. 我觉得可以讨论下,除了增加 type, 还有没有什么需要增加的?
元数据里纪录过滤,导出的时候根本不知道要过滤啥. 导出的包是不会含有需要过滤的内容的,要过滤的内容是解压编辑后产生的.
现在我这大概3个方案:

  1. 不弄过滤的功能,用户编辑导出包后手工清楚多余文件. 导入时只处理能识别的,无法识别的直接略过
  2. 元数据里纪录导出了哪些数据,导入时只处理这些数据. 这样的话手工编辑导出包时就麻烦点,如果新增了配制就得在元数据里增加一条纪录
  3. 在server的配制里增加忽略列表,用户可根据实际情况增加忽略配制. 大部分情况下都不需要配制该列表,只有那种编辑导出包后多了文件或文件夹的才需要配制

@wjm0729
Copy link
Contributor

wjm0729 commented Jan 4, 2021

@KeRan213539 @KomachiSion
我也觉得过滤列表有点多余,只要关注核心业务不易出问题就行
至于元数据是否需要加新属性, 我觉得看后期需要吧. 后期能通过升级代码方便加就行

version: 2(旧版本没有就默认为1)
A(groupId):
   a1(dataId):
      type: text|yml|...
      otherMetadata: ...
   a2:
      ....
B:
   .....

meta数据用这种格式不错

pr的路是:

导入时只关注满足要求的文件(group文件夹必须以 group- 开头, 且只导入group-xxx文件夹下的名称不是以.开头的文件), 其它的直接忽略.
meta文件只作为信息补充, 不是必须的

这样做的目的是规则和代码实现都简单.

@KeRan213539
Copy link
Collaborator Author

KeRan213539 commented Jan 4, 2021

@KeRan213539 @KomachiSion
我也觉得过滤列表有点多余,只要关注核心业务不易出问题就行
至于元数据是否需要加新属性, 我觉得看后期需要吧. 后期能通过升级代码方便加就行

version: 2(旧版本没有就默认为1)
A(groupId):
   a1(dataId):
      type: text|yml|...
      otherMetadata: ...
   a2:
      ....
B:
   .....

meta数据用这种格式不错

pr的路是:

导入时只关注满足要求的文件(group文件夹必须以 group- 开头, 且只导入group-xxx文件夹下的名称不是以.开头的文件), 其它的直接忽略.
meta文件只作为信息补充, 不是必须的

这样做的目的是规则和代码实现都简单.

过滤列表是针对你之前编辑压缩包后多了文件的情况的,不过如果你那种是个例的话,可以不搞过滤的功能. 过滤这个再讨论吧.
提几点建议:

  1. 先按照这个ISSUE中的第一点, 先优化下现有导入.这个优化单独PR
  2. 把新导出格式的思路写个简单的方案发出来讨论下,先不忙着PR
  3. 【重要】每个PR单独一个分支,不要以你之前PR的分支创建新分支,而是从 dev 分支创建新分支.否者之前PR的提交会包含在新的PR中. 为你本地git仓库创建一个上游,直接指向nacos主仓库, 每次创建分支时从主仓库这个上游的dev分支创建. 当然,代码还是提交到你 fork 的仓库中

KomachiSion pushed a commit that referenced this issue Apr 16, 2021
* add new version config export feat

* add new export button

* fix ci

* fix magical value

* add YamlParserConstructor
parse config reduce loop

* fix ci
@KomachiSion KomachiSion added this to the 1.4.2 milestone Apr 16, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/discussion Category issues related to discussion kind/feature type/feature
Projects
None yet
Development

No branches or pull requests

3 participants