Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
git
提交
9cac9d36
G
git
项目概览
李少辉-开发者
/
git
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
git
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9cac9d36
编写于
11月 30, 2005
作者:
J
Junio C Hamano
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'jc/subdir'
上级
5401f304
99e01692
变更
38
隐藏空白更改
内联
并排
Showing
38 changed file
with
168 addition
and
20 deletion
+168
-20
apply.c
apply.c
+18
-0
cache.h
cache.h
+2
-0
checkout-index.c
checkout-index.c
+11
-1
clone-pack.c
clone-pack.c
+2
-0
commit-tree.c
commit-tree.c
+2
-0
convert-objects.c
convert-objects.c
+2
-0
fetch-pack.c
fetch-pack.c
+2
-0
fsck-objects.c
fsck-objects.c
+2
-0
git-add.sh
git-add.sh
+5
-0
git-branch.sh
git-branch.sh
+7
-4
git-count-objects.sh
git-count-objects.sh
+1
-1
git-diff.sh
git-diff.sh
+5
-0
git-lost-found.sh
git-lost-found.sh
+1
-2
git-ls-remote.sh
git-ls-remote.sh
+5
-0
git-merge-octopus.sh
git-merge-octopus.sh
+5
-0
git-tag.sh
git-tag.sh
+6
-1
git-verify-tag.sh
git-verify-tag.sh
+13
-4
hash-object.c
hash-object.c
+15
-3
http-fetch.c
http-fetch.c
+2
-0
http-push.c
http-push.c
+1
-0
local-fetch.c
local-fetch.c
+2
-0
merge-base.c
merge-base.c
+2
-0
merge-index.c
merge-index.c
+1
-0
mktag.c
mktag.c
+2
-0
pack-objects.c
pack-objects.c
+2
-0
pack-redundant.c
pack-redundant.c
+2
-0
peek-remote.c
peek-remote.c
+3
-0
prune-packed.c
prune-packed.c
+2
-0
read-tree.c
read-tree.c
+2
-0
send-pack.c
send-pack.c
+1
-0
setup.c
setup.c
+25
-3
ssh-fetch.c
ssh-fetch.c
+2
-0
ssh-upload.c
ssh-upload.c
+3
-0
tar-tree.c
tar-tree.c
+2
-0
unpack-file.c
unpack-file.c
+2
-0
unpack-objects.c
unpack-objects.c
+2
-0
update-server-info.c
update-server-info.c
+2
-0
write-tree.c
write-tree.c
+4
-1
未找到文件。
apply.c
浏览文件 @
9cac9d36
...
...
@@ -16,6 +16,9 @@
// --numstat does numeric diffstat, and doesn't actually apply
// --index-info shows the old and new index info for paths if available.
//
static
const
char
*
prefix
;
static
int
prefix_length
=
-
1
;
static
int
allow_binary_replacement
=
0
;
static
int
check_index
=
0
;
static
int
write_index
=
0
;
...
...
@@ -1706,6 +1709,12 @@ static int use_patch(struct patch *p)
return
0
;
x
=
x
->
next
;
}
if
(
0
<
prefix_length
)
{
int
pathlen
=
strlen
(
pathname
);
if
(
pathlen
<=
prefix_length
||
memcmp
(
prefix
,
pathname
,
prefix_length
))
return
0
;
}
return
1
;
}
...
...
@@ -1845,6 +1854,15 @@ int main(int argc, char **argv)
line_termination
=
0
;
continue
;
}
if
(
check_index
&&
prefix_length
<
0
)
{
prefix
=
setup_git_directory
();
prefix_length
=
prefix
?
strlen
(
prefix
)
:
0
;
git_config
(
git_default_config
);
}
if
(
0
<
prefix_length
)
arg
=
prefix_filename
(
prefix
,
prefix_length
,
arg
);
fd
=
open
(
arg
,
O_RDONLY
);
if
(
fd
<
0
)
usage
(
apply_usage
);
...
...
cache.h
浏览文件 @
9cac9d36
...
...
@@ -147,8 +147,10 @@ extern char *get_graft_file(void);
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
extern
const
char
**
get_pathspec
(
const
char
*
prefix
,
const
char
**
pathspec
);
extern
const
char
*
setup_git_directory_gently
(
int
*
);
extern
const
char
*
setup_git_directory
(
void
);
extern
const
char
*
prefix_path
(
const
char
*
prefix
,
int
len
,
const
char
*
path
);
extern
const
char
*
prefix_filename
(
const
char
*
prefix
,
int
len
,
const
char
*
path
);
#define alloc_nr(x) (((x)+16)*3/2)
...
...
checkout-index.c
浏览文件 @
9cac9d36
...
...
@@ -34,6 +34,9 @@
*/
#include "cache.h"
static
const
char
*
prefix
;
static
int
prefix_length
;
static
struct
checkout
state
=
{
.
base_dir
=
""
,
.
base_dir_len
=
0
,
...
...
@@ -69,6 +72,10 @@ static int checkout_all(void)
struct
cache_entry
*
ce
=
active_cache
[
i
];
if
(
ce_stage
(
ce
))
continue
;
if
(
prefix
&&
*
prefix
&&
(
ce_namelen
(
ce
)
<=
prefix_length
||
memcmp
(
prefix
,
ce
->
name
,
prefix_length
)
))
continue
;
if
(
checkout_entry
(
ce
,
&
state
)
<
0
)
errs
++
;
}
...
...
@@ -91,6 +98,9 @@ int main(int argc, char **argv)
int
newfd
=
-
1
;
int
all
=
0
;
prefix
=
setup_git_directory
();
prefix_length
=
prefix
?
strlen
(
prefix
)
:
0
;
if
(
read_cache
()
<
0
)
{
die
(
"invalid cache"
);
}
...
...
@@ -155,7 +165,7 @@ int main(int argc, char **argv)
if
(
all
)
die
(
"git-checkout-index: don't mix '--all' and explicit filenames"
);
checkout_file
(
arg
);
checkout_file
(
prefix_path
(
prefix
,
prefix_length
,
arg
)
);
}
if
(
all
)
...
...
clone-pack.c
浏览文件 @
9cac9d36
...
...
@@ -271,6 +271,8 @@ int main(int argc, char **argv)
int
fd
[
2
];
pid_t
pid
;
setup_git_directory
();
nr_heads
=
0
;
heads
=
NULL
;
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
...
...
commit-tree.c
浏览文件 @
9cac9d36
...
...
@@ -91,6 +91,8 @@ int main(int argc, char **argv)
if
(
argc
<
2
||
get_sha1_hex
(
argv
[
1
],
tree_sha1
)
<
0
)
usage
(
commit_tree_usage
);
setup_git_directory
();
check_valid
(
tree_sha1
,
"tree"
);
for
(
i
=
2
;
i
<
argc
;
i
+=
2
)
{
char
*
a
,
*
b
;
...
...
convert-objects.c
浏览文件 @
9cac9d36
...
...
@@ -316,6 +316,8 @@ int main(int argc, char **argv)
unsigned
char
sha1
[
20
];
struct
entry
*
entry
;
setup_git_directory
();
if
(
argc
!=
2
||
get_sha1
(
argv
[
1
],
sha1
))
usage
(
"git-convert-objects <sha1>"
);
...
...
fetch-pack.c
浏览文件 @
9cac9d36
...
...
@@ -424,6 +424,8 @@ int main(int argc, char **argv)
int
fd
[
2
];
pid_t
pid
;
setup_git_directory
();
nr_heads
=
0
;
heads
=
NULL
;
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
...
...
fsck-objects.c
浏览文件 @
9cac9d36
...
...
@@ -431,6 +431,8 @@ int main(int argc, char **argv)
{
int
i
,
heads
;
setup_git_directory
();
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
const
char
*
arg
=
argv
[
i
];
...
...
git-add.sh
浏览文件 @
9cac9d36
#!/bin/sh
die
()
{
echo
>
&2
"
$*
"
exit
1
}
usage
()
{
die
"usage: git add [-n] [-v] <file>..."
}
...
...
git-branch.sh
浏览文件 @
9cac9d36
#!/bin/sh
.
git-sh-setup
GIT_DIR
=
`
git-rev-parse
--git-dir
`
||
exit
$?
die
()
{
echo
>
&2
"
$*
"
exit
1
}
usage
()
{
echo
>
&2
"usage:
$(
basename
$0
)
"
' [-d <branch>] | [[-f] <branch> [start-point]]
...
...
@@ -12,8 +17,7 @@ If two arguments, create a new branch <branchname> based off of <start-point>.
exit
1
}
headref
=
$(
GIT_DIR
=
"
$GIT_DIR
"
git-symbolic-ref HEAD |
sed
-e
's|^refs/heads/||'
)
headref
=
$(
git-symbolic-ref HEAD |
sed
-e
's|^refs/heads/||'
)
delete_branch
()
{
option
=
"
$1
"
...
...
@@ -114,4 +118,3 @@ then
fi
fi
git update-ref
"refs/heads/
$branchname
"
$rev
git-count-objects.sh
浏览文件 @
9cac9d36
...
...
@@ -3,7 +3,7 @@
# Copyright (c) 2005 Junio C Hamano
#
.
git-sh-setup
GIT_DIR
=
`
git-rev-parse
--git-dir
`
||
exit
$?
dc </dev/null 2>/dev/null
||
{
# This is not a real DC at all -- it just knows how
...
...
git-diff.sh
浏览文件 @
9cac9d36
...
...
@@ -7,6 +7,11 @@ rev=$(git-rev-parse --revs-only --no-flags --sq "$@") || exit
flags
=
$(
git-rev-parse
--no-revs
--flags
--sq
"
$@
"
)
files
=
$(
git-rev-parse
--no-revs
--no-flags
--sq
"
$@
"
)
die
()
{
echo
>
&2
"
$*
"
exit
1
}
# I often say 'git diff --cached -p' and get scolded by git-diff-files, but
# obviously I mean 'git diff --cached -p HEAD' in that case.
case
"
$rev
"
in
...
...
git-lost-found.sh
浏览文件 @
9cac9d36
#!/bin/sh
.
git-sh-setup
GIT_DIR
=
`
git-rev-parse
--git-dir
`
||
exit
$?
laf
=
"
$GIT_DIR
/lost-found"
rm
-fr
"
$laf
"
&&
mkdir
-p
"
$laf
/commit"
"
$laf
/other"
||
exit
...
...
git-ls-remote.sh
浏览文件 @
9cac9d36
...
...
@@ -6,6 +6,11 @@ usage () {
exit
1
;
}
die
()
{
echo
>
&2
"
$*
"
exit
1
}
while case
"$#"
in
0
)
break
;;
esac
do
case
"
$1
"
in
...
...
git-merge-octopus.sh
浏览文件 @
9cac9d36
...
...
@@ -8,6 +8,11 @@
LF
=
'
'
die
()
{
echo
>
&2
"
$*
"
exit
1
}
# The first parameters up to -- are merge bases; the rest are heads.
bases
=
head
=
remotes
=
sep_seen
=
for
arg
...
...
git-tag.sh
浏览文件 @
9cac9d36
#!/bin/sh
# Copyright (c) 2005 Linus Torvalds
.
git-sh-setup
GIT_DIR
=
`
git-rev-parse
--git-dir
`
||
exit
$?
usage
()
{
echo
>
&2
"Usage: git-tag [-a | -s | -u <key-id>] [-f | -d] [-m <msg>] <tagname> [<head>]"
exit
1
}
die
()
{
echo
>
&2
"
$*
"
exit
1
}
annotate
=
signed
=
force
=
...
...
git-verify-tag.sh
浏览文件 @
9cac9d36
#!/bin/sh
.
git-sh-setup
GIT_DIR
=
`
git-rev-parse
--git-dir
`
||
exit
$?
die
()
{
echo
>
&2
"
$*
"
exit
1
}
type
=
"
$(
git-cat-file
-t
"
$1
"
2>/dev/null
)
"
||
die
"
$1
: no such object."
...
...
@@ -7,6 +13,9 @@ type="$(git-cat-file -t "$1" 2>/dev/null)" ||
test
"
$type
"
=
tag
||
die
"
$1
: cannot verify a non-tag object of type
$type
."
git-cat-file tag
"
$1
"
>
.tmp-vtag
||
exit
1
cat
.tmp-vtag |
sed
'/-----BEGIN PGP/Q'
| gpg
--verify
.tmp-vtag -
||
exit
1
rm
-f
.tmp-vtag
git-cat-file tag
"
$1
"
>
"
$GIT_DIR
/.tmp-vtag"
||
exit
1
cat
"
$GIT_DIR
/.tmp-vtag"
|
sed
'/-----BEGIN PGP/Q'
|
gpg
--verify
"
$GIT_DIR
/.tmp-vtag"
-
||
exit
1
rm
-f
"
$GIT_DIR
/.tmp-vtag"
hash-object.c
浏览文件 @
9cac9d36
...
...
@@ -29,6 +29,8 @@ int main(int argc, char **argv)
int
i
;
const
char
*
type
=
"blob"
;
int
write_object
=
0
;
const
char
*
prefix
=
NULL
;
int
prefix_length
=
-
1
;
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
if
(
!
strcmp
(
argv
[
i
],
"-t"
))
{
...
...
@@ -36,10 +38,20 @@ int main(int argc, char **argv)
die
(
hash_object_usage
);
type
=
argv
[
i
];
}
else
if
(
!
strcmp
(
argv
[
i
],
"-w"
))
else
if
(
!
strcmp
(
argv
[
i
],
"-w"
))
{
if
(
prefix_length
<
0
)
{
prefix
=
setup_git_directory
();
prefix_length
=
prefix
?
strlen
(
prefix
)
:
0
;
}
write_object
=
1
;
else
hash_object
(
argv
[
i
],
type
,
write_object
);
}
else
{
const
char
*
arg
=
argv
[
i
];
if
(
0
<=
prefix_length
)
arg
=
prefix_filename
(
prefix
,
prefix_length
,
arg
);
hash_object
(
arg
,
type
,
write_object
);
}
}
return
0
;
}
http-fetch.c
浏览文件 @
9cac9d36
...
...
@@ -922,6 +922,8 @@ int main(int argc, char **argv)
int
arg
=
1
;
int
rc
=
0
;
setup_git_directory
();
while
(
arg
<
argc
&&
argv
[
arg
][
0
]
==
'-'
)
{
if
(
argv
[
arg
][
1
]
==
't'
)
{
get_tree
=
1
;
...
...
http-push.c
浏览文件 @
9cac9d36
...
...
@@ -1237,6 +1237,7 @@ int main(int argc, char **argv)
int
rc
=
0
;
int
i
;
setup_git_directory
();
setup_ident
();
remote
=
xmalloc
(
sizeof
(
*
remote
));
...
...
local-fetch.c
浏览文件 @
9cac9d36
...
...
@@ -207,6 +207,8 @@ int main(int argc, char **argv)
char
*
commit_id
;
int
arg
=
1
;
setup_git_directory
();
while
(
arg
<
argc
&&
argv
[
arg
][
0
]
==
'-'
)
{
if
(
argv
[
arg
][
1
]
==
't'
)
get_tree
=
1
;
...
...
merge-base.c
浏览文件 @
9cac9d36
...
...
@@ -236,6 +236,8 @@ int main(int argc, char **argv)
struct
commit
*
rev1
,
*
rev2
;
unsigned
char
rev1key
[
20
],
rev2key
[
20
];
setup_git_directory
();
while
(
1
<
argc
&&
argv
[
1
][
0
]
==
'-'
)
{
char
*
arg
=
argv
[
1
];
if
(
!
strcmp
(
arg
,
"-a"
)
||
!
strcmp
(
arg
,
"--all"
))
...
...
merge-index.c
浏览文件 @
9cac9d36
...
...
@@ -102,6 +102,7 @@ int main(int argc, char **argv)
if
(
argc
<
3
)
usage
(
"git-merge-index [-o] [-q] <merge-program> (-a | <filename>*)"
);
setup_git_directory
();
read_cache
();
i
=
1
;
...
...
mktag.c
浏览文件 @
9cac9d36
...
...
@@ -111,6 +111,8 @@ int main(int argc, char **argv)
if
(
argc
!=
1
)
usage
(
"cat <signaturefile> | git-mktag"
);
setup_git_directory
();
// Read the signature
size
=
0
;
for
(;;)
{
...
...
pack-objects.c
浏览文件 @
9cac9d36
...
...
@@ -473,6 +473,8 @@ int main(int argc, char **argv)
struct
object_entry
**
list
;
int
i
;
setup_git_directory
();
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
const
char
*
arg
=
argv
[
i
];
...
...
pack-redundant.c
浏览文件 @
9cac9d36
...
...
@@ -600,6 +600,8 @@ int main(int argc, char **argv)
unsigned
char
*
sha1
;
char
buf
[
42
];
/* 40 byte sha1 + \n + \0 */
setup_git_directory
();
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
const
char
*
arg
=
argv
[
i
];
if
(
!
strcmp
(
arg
,
"--"
))
{
...
...
peek-remote.c
浏览文件 @
9cac9d36
...
...
@@ -27,6 +27,9 @@ int main(int argc, char **argv)
char
*
dest
=
NULL
;
int
fd
[
2
];
pid_t
pid
;
int
nongit
=
0
;
setup_git_directory_gently
(
&
nongit
);
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
char
*
arg
=
argv
[
i
];
...
...
prune-packed.c
浏览文件 @
9cac9d36
...
...
@@ -58,6 +58,8 @@ int main(int argc, char **argv)
{
int
i
;
setup_git_directory
();
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
const
char
*
arg
=
argv
[
i
];
...
...
read-tree.c
浏览文件 @
9cac9d36
...
...
@@ -629,6 +629,8 @@ int main(int argc, char **argv)
unsigned
char
sha1
[
20
];
merge_fn_t
fn
=
NULL
;
setup_git_directory
();
newfd
=
hold_index_file_for_update
(
&
cache_file
,
get_index_file
());
if
(
newfd
<
0
)
die
(
"unable to create new cachefile"
);
...
...
send-pack.c
浏览文件 @
9cac9d36
...
...
@@ -273,6 +273,7 @@ int main(int argc, char **argv)
int
fd
[
2
],
ret
;
pid_t
pid
;
setup_git_directory
();
argv
++
;
for
(
i
=
1
;
i
<
argc
;
i
++
,
argv
++
)
{
char
*
arg
=
*
argv
;
...
...
setup.c
浏览文件 @
9cac9d36
...
...
@@ -47,6 +47,21 @@ const char *prefix_path(const char *prefix, int len, const char *path)
return
path
;
}
/*
* Unlike prefix_path, this should be used if the named file does
* not have to interact with index entry; i.e. name of a random file
* on the filesystem.
*/
const
char
*
prefix_filename
(
const
char
*
pfx
,
int
pfx_len
,
const
char
*
arg
)
{
static
char
path
[
PATH_MAX
];
if
(
!
pfx
||
!*
pfx
||
arg
[
0
]
==
'/'
)
return
arg
;
memcpy
(
path
,
pfx
,
pfx_len
);
strcpy
(
path
+
pfx_len
,
arg
);
return
path
;
}
const
char
**
get_pathspec
(
const
char
*
prefix
,
const
char
**
pathspec
)
{
const
char
*
entry
=
*
pathspec
;
...
...
@@ -92,7 +107,7 @@ static int is_toplevel_directory(void)
return
1
;
}
static
const
char
*
setup_git_directory_1
(
void
)
const
char
*
setup_git_directory_gently
(
int
*
nongit_ok
)
{
static
char
cwd
[
PATH_MAX
+
1
];
int
len
,
offset
;
...
...
@@ -139,8 +154,15 @@ static const char *setup_git_directory_1(void)
break
;
chdir
(
".."
);
do
{
if
(
!
offset
)
if
(
!
offset
)
{
if
(
nongit_ok
)
{
if
(
chdir
(
cwd
))
die
(
"Cannot come back to cwd"
);
*
nongit_ok
=
1
;
return
NULL
;
}
die
(
"Not a git repository"
);
}
}
while
(
cwd
[
--
offset
]
!=
'/'
);
}
...
...
@@ -172,7 +194,7 @@ int check_repository_format(void)
const
char
*
setup_git_directory
(
void
)
{
const
char
*
retval
=
setup_git_directory_
1
(
);
const
char
*
retval
=
setup_git_directory_
gently
(
NULL
);
check_repository_format
();
return
retval
;
}
ssh-fetch.c
浏览文件 @
9cac9d36
...
...
@@ -131,6 +131,8 @@ int main(int argc, char **argv)
prog
=
getenv
(
"GIT_SSH_PUSH"
);
if
(
!
prog
)
prog
=
"git-ssh-upload"
;
setup_git_directory
();
while
(
arg
<
argc
&&
argv
[
arg
][
0
]
==
'-'
)
{
if
(
argv
[
arg
][
1
]
==
't'
)
{
get_tree
=
1
;
...
...
ssh-upload.c
浏览文件 @
9cac9d36
...
...
@@ -121,6 +121,9 @@ int main(int argc, char **argv)
prog
=
getenv
(
COUNTERPART_ENV_NAME
);
if
(
!
prog
)
prog
=
COUNTERPART_PROGRAM_NAME
;
setup_git_directory
();
while
(
arg
<
argc
&&
argv
[
arg
][
0
]
==
'-'
)
{
if
(
argv
[
arg
][
1
]
==
'w'
)
arg
++
;
...
...
tar-tree.c
浏览文件 @
9cac9d36
...
...
@@ -407,6 +407,8 @@ int main(int argc, char **argv)
void
*
buffer
;
unsigned
long
size
;
setup_git_directory
();
switch
(
argc
)
{
case
3
:
basedir
=
argv
[
2
];
...
...
unpack-file.c
浏览文件 @
9cac9d36
...
...
@@ -29,6 +29,8 @@ int main(int argc, char **argv)
if
(
argc
!=
2
||
get_sha1
(
argv
[
1
],
sha1
))
usage
(
"git-unpack-file <sha1>"
);
setup_git_directory
();
puts
(
create_temp_file
(
sha1
));
return
0
;
}
unpack-objects.c
浏览文件 @
9cac9d36
...
...
@@ -269,6 +269,8 @@ int main(int argc, char **argv)
int
i
;
unsigned
char
sha1
[
20
];
setup_git_directory
();
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
const
char
*
arg
=
argv
[
i
];
...
...
update-server-info.c
浏览文件 @
9cac9d36
...
...
@@ -19,5 +19,7 @@ int main(int ac, char **av)
if
(
i
!=
ac
)
usage
(
update_server_info_usage
);
setup_git_directory
();
return
!!
update_server_info
(
force
);
}
write-tree.c
浏览文件 @
9cac9d36
...
...
@@ -86,9 +86,12 @@ static int write_tree(struct cache_entry **cachep, int maxentries, const char *b
int
main
(
int
argc
,
char
**
argv
)
{
int
i
,
funny
;
int
entries
=
read_cache
()
;
int
entries
;
unsigned
char
sha1
[
20
];
setup_git_directory
();
entries
=
read_cache
();
if
(
argc
==
2
)
{
if
(
!
strcmp
(
argv
[
1
],
"--missing-ok"
))
missing_ok
=
1
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录