提交 74775a09 编写于 作者: N Nguyễn Thái Ngọc Duy 提交者: Junio C Hamano

show: use streaming API for showing blobs

Signed-off-by: NNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 090ea126
......@@ -20,6 +20,7 @@
#include "string-list.h"
#include "parse-options.h"
#include "branch.h"
#include "streaming.h"
/* Set a default date-time format for git log ("log.date" config variable) */
static const char *default_date_mode = NULL;
......@@ -381,8 +382,13 @@ static void show_tagger(char *buf, int len, struct rev_info *rev)
strbuf_release(&out);
}
static int show_object(const unsigned char *sha1, int show_tag_object,
struct rev_info *rev)
static int show_blob_object(const unsigned char *sha1, struct rev_info *rev)
{
fflush(stdout);
return stream_blob_to_fd(1, sha1, NULL, 0);
}
static int show_tag_object(const unsigned char *sha1, struct rev_info *rev)
{
unsigned long size;
enum object_type type;
......@@ -392,7 +398,7 @@ static int show_object(const unsigned char *sha1, int show_tag_object,
if (!buf)
return error(_("Could not read object %s"), sha1_to_hex(sha1));
if (show_tag_object)
assert(type == OBJ_TAG);
while (offset < size && buf[offset] != '\n') {
int new_offset = offset + 1;
while (new_offset < size && buf[new_offset++] != '\n')
......@@ -459,7 +465,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
const char *name = objects[i].name;
switch (o->type) {
case OBJ_BLOB:
ret = show_object(o->sha1, 0, NULL);
ret = show_blob_object(o->sha1, NULL);
break;
case OBJ_TAG: {
struct tag *t = (struct tag *)o;
......@@ -470,7 +476,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
diff_get_color_opt(&rev.diffopt, DIFF_COMMIT),
t->tag,
diff_get_color_opt(&rev.diffopt, DIFF_RESET));
ret = show_object(o->sha1, 1, &rev);
ret = show_tag_object(o->sha1, &rev);
rev.shown_one = 1;
if (ret)
break;
......
......@@ -125,7 +125,7 @@ test_expect_success 'cat-file a large file from a tag' '
git cat-file blob largefiletag >/dev/null
'
test_expect_failure 'git-show a large file' '
test_expect_success 'git-show a large file' '
git show :large1 >/dev/null
'
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册