Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
2c185a4f
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,发现更多精彩内容 >>
提交
2c185a4f
编写于
2月 13, 2017
作者:
C
Christof Marti
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add telemetry for clone action (fixes #20570)
上级
154df1b4
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
24 addition
and
9 deletion
+24
-9
src/vs/base/common/actions.ts
src/vs/base/common/actions.ts
+2
-1
src/vs/platform/telemetry/common/telemetry.ts
src/vs/platform/telemetry/common/telemetry.ts
+6
-1
src/vs/platform/telemetry/common/telemetryService.ts
src/vs/platform/telemetry/common/telemetryService.ts
+2
-2
src/vs/platform/telemetry/common/telemetryUtils.ts
src/vs/platform/telemetry/common/telemetryUtils.ts
+2
-2
src/vs/workbench/common/actionRegistry.ts
src/vs/workbench/common/actionRegistry.ts
+3
-2
src/vs/workbench/parts/git/electron-browser/gitActions.ts
src/vs/workbench/parts/git/electron-browser/gitActions.ts
+9
-1
未找到文件。
src/vs/base/common/actions.ts
浏览文件 @
2c185a4f
...
...
@@ -9,6 +9,7 @@ import { IEventEmitter, EventEmitter } from 'vs/base/common/eventEmitter';
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
*
as
Events
from
'
vs/base/common/events
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
ITelemetryData
}
from
'
vs/platform/telemetry/common/telemetry
'
;
export
interface
IAction
extends
IDisposable
{
id
:
string
;
...
...
@@ -202,7 +203,7 @@ export class Action implements IAction {
this
.
_order
=
value
;
}
public
run
(
event
?:
any
):
TPromise
<
any
>
{
public
run
(
event
?:
any
,
data
?:
ITelemetryData
):
TPromise
<
any
>
{
if
(
this
.
_actionCallback
!==
void
0
)
{
return
this
.
_actionCallback
(
event
);
}
...
...
src/vs/platform/telemetry/common/telemetry.ts
浏览文件 @
2c185a4f
...
...
@@ -15,6 +15,11 @@ export interface ITelemetryInfo {
instanceId
:
string
;
}
export
interface
ITelemetryData
{
from
?:
string
;
[
key
:
string
]:
any
;
}
export
interface
ITelemetryExperiments
{
showNewUserWatermark
:
boolean
;
openUntitledFile
:
boolean
;
...
...
@@ -30,7 +35,7 @@ export interface ITelemetryService {
* Sends a telemetry event that has been privacy approved.
* Do not call this unless you have been given approval.
*/
publicLog
(
eventName
:
string
,
data
?:
any
):
TPromise
<
void
>
;
publicLog
(
eventName
:
string
,
data
?:
ITelemetryData
):
TPromise
<
void
>
;
getTelemetryInfo
():
TPromise
<
ITelemetryInfo
>
;
...
...
src/vs/platform/telemetry/common/telemetryService.ts
浏览文件 @
2c185a4f
...
...
@@ -7,7 +7,7 @@
import
{
localize
}
from
'
vs/nls
'
;
import
{
escapeRegExpCharacters
}
from
'
vs/base/common/strings
'
;
import
{
ITelemetryService
,
ITelemetryInfo
,
ITelemetryExperiments
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
ITelemetryService
,
ITelemetryInfo
,
ITelemetryExperiments
,
ITelemetryData
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
ITelemetryAppender
,
defaultExperiments
}
from
'
vs/platform/telemetry/common/telemetryUtils
'
;
import
{
optional
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IConfigurationService
}
from
'
vs/platform/configuration/common/configuration
'
;
...
...
@@ -100,7 +100,7 @@ export class TelemetryService implements ITelemetryService {
this
.
_disposables
=
dispose
(
this
.
_disposables
);
}
publicLog
(
eventName
:
string
,
data
?:
any
):
TPromise
<
any
>
{
publicLog
(
eventName
:
string
,
data
?:
ITelemetryData
):
TPromise
<
any
>
{
// don't send events when the user is optout
if
(
!
this
.
_userOptIn
)
{
return
TPromise
.
as
(
undefined
);
...
...
src/vs/platform/telemetry/common/telemetryUtils.ts
浏览文件 @
2c185a4f
...
...
@@ -14,7 +14,7 @@ import { IKeybindingService, KeybindingSource } from 'vs/platform/keybinding/com
import
{
ILifecycleService
,
ShutdownReason
}
from
'
vs/platform/lifecycle/common/lifecycle
'
;
import
{
IStorageService
}
from
'
vs/platform/storage/common/storage
'
;
import
{
IWorkspaceContextService
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
ITelemetryService
,
ITelemetryExperiments
,
ITelemetryInfo
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
ITelemetryService
,
ITelemetryExperiments
,
ITelemetryInfo
,
ITelemetryData
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
ServicesAccessor
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
StorageService
}
from
'
vs/platform/storage/common/storageService
'
;
import
*
as
objects
from
'
vs/base/common/objects
'
;
...
...
@@ -28,7 +28,7 @@ export const defaultExperiments: ITelemetryExperiments = {
export
const
NullTelemetryService
=
{
_serviceBrand
:
undefined
,
_experiments
:
defaultExperiments
,
publicLog
(
eventName
:
string
,
data
?:
any
)
{
publicLog
(
eventName
:
string
,
data
?:
ITelemetryData
)
{
return
TPromise
.
as
<
void
>
(
null
);
},
isOptedIn
:
true
,
...
...
src/vs/workbench/common/actionRegistry.ts
浏览文件 @
2c185a4f
...
...
@@ -168,14 +168,15 @@ export function triggerAndDisposeAction(instantitationService: IInstantiationSer
return
undefined
;
}
const
from
=
args
&&
args
.
from
||
'
keybinding
'
;
if
(
telemetryService
)
{
telemetryService
.
publicLog
(
'
workbenchActionExecuted
'
,
{
id
:
actionInstance
.
id
,
from
:
args
&&
args
.
from
||
'
keybinding
'
});
telemetryService
.
publicLog
(
'
workbenchActionExecuted
'
,
{
id
:
actionInstance
.
id
,
from
});
}
// run action when workbench is created
return
partService
.
joinCreation
().
then
(()
=>
{
try
{
return
TPromise
.
as
(
actionInstance
.
run
()).
then
(()
=>
{
return
TPromise
.
as
(
actionInstance
.
run
(
undefined
,
{
from
}
)).
then
(()
=>
{
actionInstance
.
dispose
();
},
(
err
)
=>
{
actionInstance
.
dispose
();
...
...
src/vs/workbench/parts/git/electron-browser/gitActions.ts
浏览文件 @
2c185a4f
...
...
@@ -16,6 +16,8 @@ import { IGitService } from 'vs/workbench/parts/git/common/git';
import
{
IQuickOpenService
}
from
'
vs/platform/quickOpen/common/quickOpen
'
;
import
*
as
url
from
'
url
'
;
import
{
remote
}
from
'
electron
'
;
import
{
ITelemetryService
,
ITelemetryData
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
isPromiseCanceledError
}
from
'
vs/base/common/errors
'
;
const
dialog
=
remote
.
dialog
;
...
...
@@ -29,12 +31,13 @@ export class CloneAction extends Action {
@
IQuickOpenService
private
quickOpenService
:
IQuickOpenService
,
@
IMessageService
private
messageService
:
IMessageService
,
@
IWindowsService
private
windowsService
:
IWindowsService
,
@
ITelemetryService
private
telemetryService
:
ITelemetryService
,
@
IWorkspaceContextService
private
workspaceService
:
IWorkspaceContextService
)
{
super
(
id
,
label
);
}
run
():
TPromise
<
void
>
{
run
(
event
?:
any
,
data
?:
ITelemetryData
):
TPromise
<
void
>
{
return
this
.
quickOpenService
.
input
({
prompt
:
localize
(
'
valid
'
,
"
Provide a valid git repository URL
"
),
placeHolder
:
localize
(
'
url
'
,
"
Repository URL
"
),
...
...
@@ -50,6 +53,7 @@ export class CloneAction extends Action {
})
.
then
(
url
=>
{
if
(
!
url
)
{
this
.
telemetryService
.
publicLog
(
'
gitClone
'
,
{
...
data
,
outcome
:
'
no_URL
'
});
return
TPromise
.
as
(
null
);
}
...
...
@@ -59,6 +63,7 @@ export class CloneAction extends Action {
});
if
(
!
result
||
result
.
length
===
0
)
{
this
.
telemetryService
.
publicLog
(
'
gitClone
'
,
{
...
data
,
outcome
:
'
no_directory
'
});
return
TPromise
.
as
(
null
);
}
...
...
@@ -69,14 +74,17 @@ export class CloneAction extends Action {
const
clone
=
always
(
this
.
gitService
.
clone
(
url
,
result
[
0
]),
()
=>
promise
.
cancel
());
return
clone
.
then
(
path
=>
{
this
.
telemetryService
.
publicLog
(
'
gitClone
'
,
{
...
data
,
outcome
:
'
success
'
});
const
forceNewWindow
=
this
.
workspaceService
.
hasWorkspace
();
return
this
.
windowsService
.
openWindow
([
path
],
{
forceNewWindow
,
forceReuseWindow
:
!
forceNewWindow
});
}).
then
<
void
>
(
null
,
e
=>
{
if
(
/already exists and is not an empty directory/
.
test
(
e
.
stderr
||
''
))
{
this
.
telemetryService
.
publicLog
(
'
gitClone
'
,
{
...
data
,
outcome
:
'
directory_not_empty
'
});
return
TPromise
.
wrapError
(
localize
(
'
already exists
'
,
"
Destination repository already exists, please pick another directory to clone to.
"
));
}
this
.
telemetryService
.
publicLog
(
'
gitClone
'
,
{
...
data
,
outcome
:
isPromiseCanceledError
(
e
)
?
'
canceled
'
:
'
error
'
});
return
TPromise
.
wrapError
(
e
);
});
});
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录