Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
5deb0157
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
5deb0157
编写于
5月 11, 2020
作者:
S
Sandeep Somavarapu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#93960 abiity to compare with local extensions
上级
8a48b77b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
30 addition
and
8 deletion
+30
-8
src/vs/platform/userDataSync/common/extensionsSync.ts
src/vs/platform/userDataSync/common/extensionsSync.ts
+30
-8
未找到文件。
src/vs/platform/userDataSync/common/extensionsSync.ts
浏览文件 @
5deb0157
...
...
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
SyncStatus
,
IUserDataSyncStoreService
,
ISyncExtension
,
IUserDataSyncLogService
,
IUserDataSynchroniser
,
SyncResource
,
IUserDataSyncEnablementService
,
IUserDataSyncBackupStoreService
,
ISyncResourceHandle
,
ISyncPreviewResult
}
from
'
vs/platform/userDataSync/common/userDataSync
'
;
import
{
SyncStatus
,
IUserDataSyncStoreService
,
ISyncExtension
,
IUserDataSyncLogService
,
IUserDataSynchroniser
,
SyncResource
,
IUserDataSyncEnablementService
,
IUserDataSyncBackupStoreService
,
ISyncResourceHandle
,
ISyncPreviewResult
,
USER_DATA_SYNC_SCHEME
}
from
'
vs/platform/userDataSync/common/userDataSync
'
;
import
{
Event
}
from
'
vs/base/common/event
'
;
import
{
IEnvironmentService
}
from
'
vs/platform/environment/common/environment
'
;
import
{
IExtensionManagementService
,
IExtensionGalleryService
,
IGlobalExtensionEnablementService
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
...
...
@@ -16,9 +16,10 @@ import { isNonEmptyArray } from 'vs/base/common/arrays';
import
{
AbstractSynchroniser
,
IRemoteUserData
,
ISyncData
}
from
'
vs/platform/userDataSync/common/abstractSynchronizer
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
joinPath
,
dirname
,
basename
}
from
'
vs/base/common/resources
'
;
import
{
joinPath
,
dirname
,
basename
,
isEqual
}
from
'
vs/base/common/resources
'
;
import
{
format
}
from
'
vs/base/common/jsonFormatter
'
;
import
{
applyEdits
}
from
'
vs/base/common/jsonEdit
'
;
import
{
compare
}
from
'
vs/base/common/strings
'
;
interface
IExtensionsSyncPreviewResult
extends
ISyncPreviewResult
{
readonly
localExtensions
:
ISyncExtension
[];
...
...
@@ -35,8 +36,10 @@ interface ILastSyncUserData extends IRemoteUserData {
skippedExtensions
:
ISyncExtension
[]
|
undefined
;
}
export
class
ExtensionsSynchroniser
extends
AbstractSynchroniser
implements
IUserDataSynchroniser
{
private
static
readonly
EXTENSIONS_DATA_URI
=
URI
.
from
({
scheme
:
USER_DATA_SYNC_SCHEME
,
authority
:
'
extensions
'
,
path
:
`/data.json`
});
protected
readonly
version
:
number
=
2
;
protected
isEnabled
():
boolean
{
return
super
.
isEnabled
()
&&
this
.
extensionGalleryService
.
isEnabled
();
}
...
...
@@ -132,28 +135,49 @@ export class ExtensionsSynchroniser extends AbstractSynchroniser implements IUse
async
stop
():
Promise
<
void
>
{
}
async
getAssociatedResources
({
uri
}:
ISyncResourceHandle
):
Promise
<
{
resource
:
URI
,
comparableResource
?:
URI
}[]
>
{
return
[{
resource
:
joinPath
(
uri
,
'
extensions.json
'
)
}];
return
[{
resource
:
joinPath
(
uri
,
'
extensions.json
'
)
,
comparableResource
:
ExtensionsSynchroniser
.
EXTENSIONS_DATA_URI
}];
}
async
resolveContent
(
uri
:
URI
):
Promise
<
string
|
null
>
{
if
(
isEqual
(
uri
,
ExtensionsSynchroniser
.
EXTENSIONS_DATA_URI
))
{
const
localExtensions
=
await
this
.
getLocalExtensions
();
return
this
.
format
(
localExtensions
);
}
let
content
=
await
super
.
resolveContent
(
uri
);
if
(
content
)
{
return
content
;
}
content
=
await
super
.
resolveContent
(
dirname
(
uri
));
if
(
content
)
{
const
syncData
=
this
.
parseSyncData
(
content
);
if
(
syncData
)
{
switch
(
basename
(
uri
))
{
case
'
extensions.json
'
:
const
edits
=
format
(
syncData
.
content
,
undefined
,
{});
return
applyEdits
(
syncData
.
content
,
edits
);
return
this
.
format
(
this
.
parseExtensions
(
syncData
));
}
}
}
return
null
;
}
private
format
(
extensions
:
ISyncExtension
[]):
string
{
extensions
.
sort
((
e1
,
e2
)
=>
{
if
(
!
e1
.
identifier
.
uuid
&&
e2
.
identifier
.
uuid
)
{
return
-
1
;
}
if
(
e1
.
identifier
.
uuid
&&
!
e2
.
identifier
.
uuid
)
{
return
1
;
}
return
compare
(
e1
.
identifier
.
id
,
e2
.
identifier
.
id
);
});
const
content
=
JSON
.
stringify
(
extensions
);
const
edits
=
format
(
content
,
undefined
,
{});
return
applyEdits
(
content
,
edits
);
}
async
acceptConflict
(
conflict
:
URI
,
content
:
string
):
Promise
<
void
>
{
throw
new
Error
(
`
${
this
.
syncResourceLogLabel
}
: Conflicts should not occur`
);
}
...
...
@@ -216,9 +240,7 @@ export class ExtensionsSynchroniser extends AbstractSynchroniser implements IUse
}
if
(
hasLocalChanged
)
{
// back up all disabled or market place extensions
const
backUpExtensions
=
localExtensions
.
filter
(
e
=>
e
.
disabled
||
!!
e
.
identifier
.
uuid
);
await
this
.
backupLocal
(
JSON
.
stringify
(
backUpExtensions
));
await
this
.
backupLocal
(
JSON
.
stringify
(
localExtensions
));
skippedExtensions
=
await
this
.
updateLocalExtensions
(
added
,
removed
,
updated
,
skippedExtensions
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录