ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] git -- хитрая задачка
@ 2010-08-24  8:31 Денис Смирнов
  2010-08-24  9:17 ` Андрей Черепанов
                   ` (2 more replies)
  0 siblings, 3 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24  8:31 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 972 bytes --]

Имеется множество git-репозиториев (около тысячи).
Большая часть их них -- устаревшие backup'ы, но какие определить
по имени или еще каким-либо очевидным характеристикам невозможно.
Разобраться в этом кошмаре вручную -- тем более.

Задача -- выявить и удалить старье (которого там процентов 90).

Лобовое решение: прогнать для каждого бранча каждого репозитория git log,
положить результат в sqlite (commit id/путь к репо/бранч). Также положить
в базу последний commit id каждого бранча каждого репозитория.

После этого я могу легко определить есть ли такой commit id в другом
репозитории. И если есть, и это не последний коммит в бранче -- то наш
бранч явно стухший и его можно удалить.

Такое решение мне не нравится тем, что придется строить базу по миллионам
commit'ов.

Можно ли придумать что-то значительно шустрее?

-- 
С уважением, Денис

http://mithraen.ru/
----------------------------------------------------------------------------


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24  8:31 [devel] git -- хитрая задачка Денис Смирнов
@ 2010-08-24  9:17 ` Андрей Черепанов
  2010-08-24  9:40   ` Денис Смирнов
  2010-08-24  9:39 ` Alexander Myltsev
  2010-08-24  9:53 ` Dmitry V. Levin
  2 siblings, 1 reply; 23+ messages in thread
From: Андрей Черепанов @ 2010-08-24  9:17 UTC (permalink / raw)
  To: ALT Linux Team development discussions

24 августа 2010 Денис Смирнов написал:
> Имеется множество git-репозиториев (около тысячи).
> Большая часть их них -- устаревшие backup'ы, но какие определить
> по имени или еще каким-либо очевидным характеристикам невозможно.
> Разобраться в этом кошмаре вручную -- тем более.
> 
> Задача -- выявить и удалить старье (которого там процентов 90).
> 
> Лобовое решение: прогнать для каждого бранча каждого репозитория git log,
> положить результат в sqlite (commit id/путь к репо/бранч). Также положить
> в базу последний commit id каждого бранча каждого репозитория.
> 
> После этого я могу легко определить есть ли такой commit id в другом
> репозитории. И если есть, и это не последний коммит в бранче -- то наш
> бранч явно стухший и его можно удалить.
> 
> Такое решение мне не нравится тем, что придется строить базу по миллионам
> commit'ов.
> 
> Можно ли придумать что-то значительно шустрее?
Как насчёт даты последней модификации?

-- 
Андрей Черепанов
ALT Linux
cas@altlinux.ru

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24  8:31 [devel] git -- хитрая задачка Денис Смирнов
  2010-08-24  9:17 ` Андрей Черепанов
@ 2010-08-24  9:39 ` Alexander Myltsev
  2010-08-24  9:42   ` Денис Смирнов
  2010-08-24  9:53 ` Dmitry V. Levin
  2 siblings, 1 reply; 23+ messages in thread
From: Alexander Myltsev @ 2010-08-24  9:39 UTC (permalink / raw)
  To: ALT Linux Team development discussions

2010/8/24 Денис Смирнов <mithraen@altlinux.ru>:
> Такое решение мне не нравится тем, что придется строить базу по миллионам
> commit'ов.

Миллион вроде не очень большое число (см. "мегагерц", "мегабайт"). Я
бы попробовал.

> Можно ли придумать что-то значительно шустрее?

Можно воспользоваться тем, что родственные репозитории всегда имеют
общие корни (коммиты без родителей). То есть сначала находим во всех
репозиториях все корни, а потом решаем задачу только в "родственных
группах". (Правда, будет ли это сильно шустрее -- неизвестно.)

-- 
AVM

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24  9:17 ` Андрей Черепанов
@ 2010-08-24  9:40   ` Денис Смирнов
  0 siblings, 0 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24  9:40 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 298 bytes --]

On Tue, Aug 24, 2010 at 01:17:38PM +0400, Андрей Черепанов wrote:

АЧ> Как насчёт даты последней модификации?

Она не позволит выявить связаны репозитории или нет. 

-- 
С уважением, Денис

http://mithraen.ru/
----------------------------------------------------------------------------

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24  9:39 ` Alexander Myltsev
@ 2010-08-24  9:42   ` Денис Смирнов
  2010-08-24  9:47     ` Alexander Myltsev
  2010-08-24  9:49     ` Andrey Rahmatullin
  0 siblings, 2 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24  9:42 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 891 bytes --]

On Tue, Aug 24, 2010 at 01:39:31PM +0400, Alexander Myltsev wrote:

AM> Миллион вроде не очень большое число (см. "мегагерц", "мегабайт"). Я
AM> бы попробовал.

Просто все алгоритмы которые мне приходили в голову отнюдь не линейные по
количеству необходимых операций от количества репозиториев.

AM> Можно воспользоваться тем, что родственные репозитории всегда имеют
AM> общие корни (коммиты без родителей). То есть сначала находим во всех
AM> репозиториях все корни, а потом решаем задачу только в "родственных
AM> группах". (Правда, будет ли это сильно шустрее -- неизвестно.)

Это гениально! Спасибо! В родственных группах можно уже не строить базу.

А есть ли какой то способ зная id коммита определить есть ли он в истории
некоего коммита?

-- 
С уважением, Денис

http://mithraen.ru/
----------------------------------------------------------------------------

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24  9:42   ` Денис Смирнов
@ 2010-08-24  9:47     ` Alexander Myltsev
  2010-08-24  9:49     ` Andrey Rahmatullin
  1 sibling, 0 replies; 23+ messages in thread
From: Alexander Myltsev @ 2010-08-24  9:47 UTC (permalink / raw)
  To: ALT Linux Team development discussions

2010/8/24 Денис Смирнов <mithraen@altlinux.ru>:
> В родственных группах можно уже не строить базу.
>
> А есть ли какой то способ зная id коммита определить есть ли он в истории
> некоего коммита?

Нет, базу строить всё-таки придётся :-).

-- 
AVM

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24  9:42   ` Денис Смирнов
  2010-08-24  9:47     ` Alexander Myltsev
@ 2010-08-24  9:49     ` Andrey Rahmatullin
  2010-08-24  9:58       ` Dmitry V. Levin
  2010-08-24 17:58       ` Денис Смирнов
  1 sibling, 2 replies; 23+ messages in thread
From: Andrey Rahmatullin @ 2010-08-24  9:49 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 463 bytes --]

On Tue, Aug 24, 2010 at 01:42:47PM +0400, Денис Смирнов wrote:
> А есть ли какой то способ зная id коммита определить есть ли он в истории
> некоего коммита?
git merge-base первый второй
Вернёт "первый", если он является предком второго. МОжет есть проще, не
знаю.

-- 
WBR, wRAR (ALT Linux Team)
Powered by the ALT Linux fortune(6):

В локалке шифрование тоже не помешает.
Популяция ангелов в локалке очень малочисленна.
		-- mrkooll in community@

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24  8:31 [devel] git -- хитрая задачка Денис Смирнов
  2010-08-24  9:17 ` Андрей Черепанов
  2010-08-24  9:39 ` Alexander Myltsev
@ 2010-08-24  9:53 ` Dmitry V. Levin
  2010-08-24 11:35   ` Денис Смирнов
  2 siblings, 1 reply; 23+ messages in thread
From: Dmitry V. Levin @ 2010-08-24  9:53 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 1096 bytes --]

On Tue, Aug 24, 2010 at 12:31:38PM +0400, Денис Смирнов wrote:
> Имеется множество git-репозиториев (около тысячи).
> Большая часть их них -- устаревшие backup'ы, но какие определить
> по имени или еще каким-либо очевидным характеристикам невозможно.
> Разобраться в этом кошмаре вручную -- тем более.
> 
> Задача -- выявить и удалить старье (которого там процентов 90).
> 
> Лобовое решение: прогнать для каждого бранча каждого репозитория git log,
> положить результат в sqlite (commit id/путь к репо/бранч). Также положить
> в базу последний commit id каждого бранча каждого репозитория.
> 
> После этого я могу легко определить есть ли такой commit id в другом
> репозитории. И если есть, и это не последний коммит в бранче -- то наш
> бранч явно стухший и его можно удалить.

Самый лобовой способ: зафетчить в каждый репозиторий соответствующий ему
"другой", апстримный репозиторий, после чего пройтись git for-each-ref'ом
по refs/heads и выяснить (git log -n1 --pretty=format:1 ^l_ref r_ref),
есть ли в репозитории хотя бы один актуальный локальный бранч.


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24  9:49     ` Andrey Rahmatullin
@ 2010-08-24  9:58       ` Dmitry V. Levin
  2010-08-24 18:00         ` Денис Смирнов
  2010-08-24 17:58       ` Денис Смирнов
  1 sibling, 1 reply; 23+ messages in thread
From: Dmitry V. Levin @ 2010-08-24  9:58 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 467 bytes --]

On Tue, Aug 24, 2010 at 03:49:07PM +0600, Andrey Rahmatullin wrote:
> On Tue, Aug 24, 2010 at 01:42:47PM +0400, Денис Смирнов wrote:
> > А есть ли какой то способ зная id коммита определить есть ли он в истории
> > некоего коммита?
> git merge-base первый второй
> Вернёт "первый", если он является предком второго. МОжет есть проще, не
> знаю.

http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob;f=gb-task-check-girar#l13


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24  9:53 ` Dmitry V. Levin
@ 2010-08-24 11:35   ` Денис Смирнов
  2010-08-24 11:41     ` Alexander Myltsev
                       ` (2 more replies)
  0 siblings, 3 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 11:35 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 754 bytes --]

On Tue, Aug 24, 2010 at 01:53:49PM +0400, Dmitry V. Levin wrote:

DVL> Самый лобовой способ: зафетчить в каждый репозиторий соответствующий ему
DVL> "другой", апстримный репозиторий, после чего пройтись git for-each-ref'ом
DVL> по refs/heads и выяснить (git log -n1 --pretty=format:1 ^l_ref r_ref),
DVL> есть ли в репозитории хотя бы один актуальный локальный бранч.

Хотелось бы во время всех этих проверок не модифицировать сами
репозитории. Хотя можно, конечно, копии делать...

А есть способ просто ответить на вопрос "есть ли в этом репозитории коммит
с таким-то id, и если есть, то в истории каких бранчей"?

-- 
С уважением, Денис

http://mithraen.ru/
----------------------------------------------------------------------------

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24 11:35   ` Денис Смирнов
@ 2010-08-24 11:41     ` Alexander Myltsev
  2010-08-24 17:48       ` Денис Смирнов
  2010-08-24 11:43     ` Andrey Rahmatullin
  2010-08-24 11:52     ` Ildar Mulyukov
  2 siblings, 1 reply; 23+ messages in thread
From: Alexander Myltsev @ 2010-08-24 11:41 UTC (permalink / raw)
  To: ALT Linux Team development discussions

2010/8/24 Денис Смирнов <mithraen@altlinux.ru>:
> А есть способ просто ответить на вопрос "есть ли в этом репозитории коммит
> с таким-то id,

Конечно, коммит -- это просто такой объект. git show его.

> и если есть, то в истории каких бранчей"?

А вот чтобы найти его в истории бранча, надо спускаться к нему от верхушки.

-- 
AVM

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24 11:35   ` Денис Смирнов
  2010-08-24 11:41     ` Alexander Myltsev
@ 2010-08-24 11:43     ` Andrey Rahmatullin
  2010-08-24 11:45       ` Денис Смирнов
  2010-08-24 11:52     ` Ildar Mulyukov
  2 siblings, 1 reply; 23+ messages in thread
From: Andrey Rahmatullin @ 2010-08-24 11:43 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 432 bytes --]

On Tue, Aug 24, 2010 at 03:35:10PM +0400, Денис Смирнов wrote:
> А есть способ просто ответить на вопрос "есть ли в этом репозитории коммит
> с таким-то id, и если есть, то в истории каких бранчей"?
git branch --contains

-- 
WBR, wRAR (ALT Linux Team)
Powered by the ALT Linux fortune(6):

Боюсь, статическая сборка объявлена ересью, и каждый, кто
пытается делать ее, будет подвержен анафеме.
		-- morozov in sisyphus@

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24 11:43     ` Andrey Rahmatullin
@ 2010-08-24 11:45       ` Денис Смирнов
  0 siblings, 0 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 11:45 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 238 bytes --]

On Tue, Aug 24, 2010 at 05:43:04PM +0600, Andrey Rahmatullin wrote:

AR> git branch --contains

Спасибо!

-- 
С уважением, Денис

http://mithraen.ru/
----------------------------------------------------------------------------

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24 11:35   ` Денис Смирнов
  2010-08-24 11:41     ` Alexander Myltsev
  2010-08-24 11:43     ` Andrey Rahmatullin
@ 2010-08-24 11:52     ` Ildar Mulyukov
  2010-08-24 17:46       ` Денис Смирнов
  2 siblings, 1 reply; 23+ messages in thread
From: Ildar Mulyukov @ 2010-08-24 11:52 UTC (permalink / raw)
  To: devel

On 24.08.2010 17:35:10, Денис Смирнов wrote:
> On Tue, Aug 24, 2010 at 01:53:49PM +0400, Dmitry V. Levin wrote:
> 
> DVL> Самый лобовой способ: зафетчить в каждый репозиторий  
> соответствующий ему
> DVL> "другой", апстримный репозиторий, после чего пройтись git  
> for-each-ref'ом
> DVL> по refs/heads и выяснить (git log -n1 --pretty=format:1 ^l_ref  
> r_ref),
> DVL> есть ли в репозитории хотя бы один актуальный локальный бранч.
> 
> Хотелось бы во время всех этих проверок не модифицировать сами
> репозитории. Хотя можно, конечно, копии делать...

есть замечательная вещь - git new-workdir. Как раз оно. Лежит в  
git-contrib.
-- 
Ildar


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24 11:52     ` Ildar Mulyukov
@ 2010-08-24 17:46       ` Денис Смирнов
  0 siblings, 0 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 17:46 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 506 bytes --]

On Tue, Aug 24, 2010 at 05:52:26PM +0600, Ildar Mulyukov wrote:

IM> есть замечательная вещь - git new-workdir. Как раз оно. Лежит в  
IM> git-contrib.

При любой модификации копии репозитория будет модифицирован оригинал. Ибо
new-workdir просто делает симлинки на все подряд, кроме HEAD и index.

В принципе можно использовать git clone -s --bare -- это будет быстро.

-- 
С уважением, Денис

http://mithraen.ru/
----------------------------------------------------------------------------

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24 11:41     ` Alexander Myltsev
@ 2010-08-24 17:48       ` Денис Смирнов
  0 siblings, 0 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 17:48 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 429 bytes --]

On Tue, Aug 24, 2010 at 03:41:13PM +0400, Alexander Myltsev wrote:

AM> Конечно, коммит -- это просто такой объект. git show его.

Спасибо.

AM> А вот чтобы найти его в истории бранча, надо спускаться к нему от верхушки.

т.е:

git log --oneline --abbrev=40 <branch> | grep ^commit-id

?

-- 
С уважением, Денис

http://mithraen.ru/
----------------------------------------------------------------------------

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24  9:49     ` Andrey Rahmatullin
  2010-08-24  9:58       ` Dmitry V. Levin
@ 2010-08-24 17:58       ` Денис Смирнов
  2010-08-24 18:54         ` Sergey Vlasov
  1 sibling, 1 reply; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 17:58 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 759 bytes --]

On Tue, Aug 24, 2010 at 03:49:07PM +0600, Andrey Rahmatullin wrote:

AR> git merge-base первый второй
AR> Вернёт "первый", если он является предком второго. МОжет есть проще, не
AR> знаю.

70ms для репо с >8k коммитов лежащем в дисковом кэше.

Да еще и код ошибки возвращает (0 -- если нашел, 1 -- если объект есть но
в другом бранче, 128+матюк об ошибке -- если такого объекта нет в репо).

Проще уже разве что со встроенным телепатическим модулем. Спасибо!

Для того чтобы найти "корень" (первый коммит) бранча что-нибудь проще чем:

git log --oneline --first-parent --abbrev=40 <branch> | tail -1

существует?

-- 
С уважением, Денис

http://mithraen.ru/
----------------------------------------------------------------------------

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24  9:58       ` Dmitry V. Levin
@ 2010-08-24 18:00         ` Денис Смирнов
  2010-08-24 20:18           ` Sergey Vlasov
  0 siblings, 1 reply; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 18:00 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 489 bytes --]

On Tue, Aug 24, 2010 at 01:58:26PM +0400, Dmitry V. Levin wrote:

>> git merge-base первый второй
>> Вернёт "первый", если он является предком второго. МОжет есть проще, не
>> знаю.
DVL> http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob;f=gb-task-check-girar#l13

А чем это лучше git merge-base (при том что он код возврата дает)?

-- 
С уважением, Денис

http://mithraen.ru/
----------------------------------------------------------------------------

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24 17:58       ` Денис Смирнов
@ 2010-08-24 18:54         ` Sergey Vlasov
  2010-08-25 20:35           ` Денис Смирнов
  0 siblings, 1 reply; 23+ messages in thread
From: Sergey Vlasov @ 2010-08-24 18:54 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 484 bytes --]

On Tue, Aug 24, 2010 at 09:58:25PM +0400, Денис Смирнов wrote:
> Для того чтобы найти "корень" (первый коммит) бранча что-нибудь проще чем:
> 
> git log --oneline --first-parent --abbrev=40 <branch> | tail -1
> 
> существует?

В общем случае таких корней может быть несколько (git позволяет
объединять независимо начатые ветки).  Найти их можно, например, так:

  git log --pretty=tformat:'%H:%P' | sed -ne 's/:$//p'

Например, в репозитории самого git таких коммитов 6.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24 18:00         ` Денис Смирнов
@ 2010-08-24 20:18           ` Sergey Vlasov
  2010-08-24 23:56             ` Dmitry V. Levin
  0 siblings, 1 reply; 23+ messages in thread
From: Sergey Vlasov @ 2010-08-24 20:18 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 768 bytes --]

On Tue, Aug 24, 2010 at 10:00:17PM +0400, Денис Смирнов wrote:
> On Tue, Aug 24, 2010 at 01:58:26PM +0400, Dmitry V. Levin wrote:
> 
> >> git merge-base первый второй
> >> Вернёт "первый", если он является предком второго. МОжет есть проще, не
> >> знаю.
> DVL> http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob;f=gb-task-check-girar#l13
> 
> А чем это лучше git merge-base (при том что он код возврата дает)?

http://git.altlinux.org/people/ldv/packages/?p=gear.git;a=commitdiff;h=705d10e6596636220f65aa9c05f41a1ca69503de

Ну и, насколько я помню, в merge-all-branches из kernel-build-tools
аналогичный способ (точнее, через git rev-list --max-count=1) в
каких-то ситуациях работал существенно быстрее, чем через git
merge-base.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24 20:18           ` Sergey Vlasov
@ 2010-08-24 23:56             ` Dmitry V. Levin
  0 siblings, 0 replies; 23+ messages in thread
From: Dmitry V. Levin @ 2010-08-24 23:56 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 1844 bytes --]

On Wed, Aug 25, 2010 at 12:18:02AM +0400, Sergey Vlasov wrote:
> On Tue, Aug 24, 2010 at 10:00:17PM +0400, Денис Смирнов wrote:
> > On Tue, Aug 24, 2010 at 01:58:26PM +0400, Dmitry V. Levin wrote:
> > 
> > >> git merge-base первый второй
> > >> Вернёт "первый", если он является предком второго. МОжет есть проще, не
> > >> знаю.
> > DVL> http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob;f=gb-task-check-girar#l13
> > 
> > А чем это лучше git merge-base (при том что он код возврата дает)?
> 
> http://git.altlinux.org/people/ldv/packages/?p=gear.git;a=commitdiff;h=705d10e6596636220f65aa9c05f41a1ca69503de

Там, кстати, в commit message вкралась опечатка, меняющая смысл.

> Ну и, насколько я помню, в merge-all-branches из kernel-build-tools
> аналогичный способ (точнее, через git rev-list --max-count=1) в
> каких-то ситуациях работал существенно быстрее, чем через git
> merge-base.

Да, я это тоже заметил.
Например, у меня в coreutils.git это выглядит так:

$ time git rev-list --max-count=1 ^master coreutils-current
0.00user 0.00system 0:00.00elapsed 160%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+494minor)pagefaults 0swaps

$ time git log -n1 --pretty=format:1 ^master coreutils-current > /dev/null 
0.00user 0.00system 0:00.00elapsed 160%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+500minor)pagefaults 0swaps

$ time git merge-base coreutils-current master
1d10eb8b1eeff9dd0fe1bbbc212e9535203acff0
0.71user 0.01system 0:00.72elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+9166minor)pagefaults 0swaps

Судя по статистике minor pagefaults, git rev-list --max-count=1 немного
дешевле чем git log -n1 --pretty=format:1, и любой из них существенно
дешевле и гораздо быстрее чем git merge-base.


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-24 18:54         ` Sergey Vlasov
@ 2010-08-25 20:35           ` Денис Смирнов
  2010-08-26 11:51             ` Sergey Vlasov
  0 siblings, 1 reply; 23+ messages in thread
From: Денис Смирнов @ 2010-08-25 20:35 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 640 bytes --]

On Tue, Aug 24, 2010 at 10:54:48PM +0400, Sergey Vlasov wrote:

SV> В общем случае таких корней может быть несколько (git позволяет
SV> объединять независимо начатые ветки).  Найти их можно, например, так:
SV> 
SV>   git log --pretty=tformat:'%H:%P' | sed -ne 's/:$//p'
SV> 
SV> Например, в репозитории самого git таких коммитов 6.

Спасибо!
А для того чтобы запросить корни от нескольких веток -- это решение
правильно отработает опцию --all для git log, или надо опрашивать каждую
ветку отдельно?

-- 
С уважением, Денис

http://mithraen.ru/
----------------------------------------------------------------------------

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [devel] git -- хитрая задачка
  2010-08-25 20:35           ` Денис Смирнов
@ 2010-08-26 11:51             ` Sergey Vlasov
  0 siblings, 0 replies; 23+ messages in thread
From: Sergey Vlasov @ 2010-08-26 11:51 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 865 bytes --]

On Thu, Aug 26, 2010 at 12:35:49AM +0400, Денис Смирнов wrote:
> On Tue, Aug 24, 2010 at 10:54:48PM +0400, Sergey Vlasov wrote:
> 
> SV> В общем случае таких корней может быть несколько (git позволяет
> SV> объединять независимо начатые ветки).  Найти их можно, например, так:
> SV> 
> SV>   git log --pretty=tformat:'%H:%P' | sed -ne 's/:$//p'
> SV> 
> SV> Например, в репозитории самого git таких коммитов 6.
> 
> Спасибо!
> А для того чтобы запросить корни от нескольких веток -- это решение
> правильно отработает опцию --all для git log, или надо опрашивать каждую
> ветку отдельно?

Должно работать и с --all (правда, в результате окажутся смешанными и
действительно независимые ветки, которые могли быть в репозитории).

Есть ещё один вариант реализации (хотя скорость примерно одинаковая):

  git rev-list --parents --all | grep -v ' '

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2010-08-26 11:51 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-24  8:31 [devel] git -- хитрая задачка Денис Смирнов
2010-08-24  9:17 ` Андрей Черепанов
2010-08-24  9:40   ` Денис Смирнов
2010-08-24  9:39 ` Alexander Myltsev
2010-08-24  9:42   ` Денис Смирнов
2010-08-24  9:47     ` Alexander Myltsev
2010-08-24  9:49     ` Andrey Rahmatullin
2010-08-24  9:58       ` Dmitry V. Levin
2010-08-24 18:00         ` Денис Смирнов
2010-08-24 20:18           ` Sergey Vlasov
2010-08-24 23:56             ` Dmitry V. Levin
2010-08-24 17:58       ` Денис Смирнов
2010-08-24 18:54         ` Sergey Vlasov
2010-08-25 20:35           ` Денис Смирнов
2010-08-26 11:51             ` Sergey Vlasov
2010-08-24  9:53 ` Dmitry V. Levin
2010-08-24 11:35   ` Денис Смирнов
2010-08-24 11:41     ` Alexander Myltsev
2010-08-24 17:48       ` Денис Смирнов
2010-08-24 11:43     ` Andrey Rahmatullin
2010-08-24 11:45       ` Денис Смирнов
2010-08-24 11:52     ` Ildar Mulyukov
2010-08-24 17:46       ` Денис Смирнов

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git