[Diff-tools] Что ж оно всё такое убогое?
От: Sinix  
Дата: 15.05.10 11:30
Оценка: 12 (6)
Выкроил время, потестил диффалки. Из списков на wiki и stackoverflow отобрались (по алфавиту):

Из жалости пропущены AnkhSvn diff, TFS-овский diffmerge.exe, Tortoise Merge и KDiff.
Наклёвывается весьма интересная вещь — CodeCompare, если в следующей бете наконец починят глючащий детект регионов — добавлю в список.

Скриншоты (2 mb). Исходники для проверки.
Рецепт: взять чуть-чуть кода (Program 1.cs)...
  Скрытый текст
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Calc
{
  class Program1
  {
    static void Main(string[] args)
    {
      int count = 10 * 1000;
      byte[] buffer = new byte[count];

      Random rnd = new Random();

      rnd.NextBytes(buffer);

      long total = 0;
      foreach (byte b in buffer)
      {
        total += b;
      }

      Console.WriteLine("AVG: {0}", total * 1.0 / buffer.Length);

      Console.ReadKey();
    }
  }
}

... добавить чуть-чуть рефакторинга (Program 2.cs)...
  Скрытый текст
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Calc
{
  class Program2
  {
    const int Count = 10 * 1000;

    private static byte[] GetBytes()
    {
      byte[] buffer = new byte[Count];

      new Random().NextBytes(buffer);

      return buffer;
    }

    static void Main(string[] args)
    {
      byte[] buffer = GetBytes();

      Console.WriteLine("AVG: {0}", GetAverage(buffer));

      Console.ReadKey();
    }

    private static double GetAverage(byte[] buffer)
    {
      long total = 0;
      foreach (byte b in buffer)
      {
        total += b;
      }
      return total * 1.0 / buffer.Length;
    }
  }
}

... и перетасовать (Program3.cs).
  Скрытый текст
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Calc
{
  class Program3
  {
    const int Count = 10 * 1000;

    private static byte[] GetBytes()
    {
      byte[] buffer = new byte[Count];

      new Random().NextBytes(buffer);

      return buffer;
    }

    private static double GetAverage(byte[] buffer)
    {
      long total = 0;
      foreach (byte b in buffer)
      {
        total += b;
      }
      return total * 1.0 / buffer.Length;
    }

    static void Main(string[] args)
    {
      byte[] buffer = GetBytes();

      Console.WriteLine("AVG: {0}", GetAverage(buffer));

      Console.ReadKey();
    }

  }
}


Результаты — на скриншотах.
Единственный (да и то условно) правильный дифф между Program1.cs и Program3.cs — старый добрый windiff. За ним толпятся Compare It!, Compare++, WinMerge, Beyond Compare и Araxis — у каждого свои глюки, так что явного победителя нет, порядок — по личным предпочтениям.

Из толпы слегка выбивается Compare It!, который а) иногда вспоминает про перемещённые строчки (а winmerge лучше бы про них и не вспоминал) и б) лучше остальных прожёвывает файлы c кучей изменений (доберусь до работы — скину примеры).

Чтоб сразу не переезжать в КСВ: что там ещё осталось из юзабельных diff/merge под win?

P.S. Off: когда уже [cut] и [s] добавят в редактор?
Re: [Diff-tools] Что ж оно всё такое убогое?
От: Mr.Cat  
Дата: 15.05.10 11:44
Оценка:
А зачем сравнивать последовательные модификации файла, когда в контексте vcs интересно, как отрабатытвается конкурентная модификация (ака 3-way merge)?
Re[2]: [Diff-tools] Что ж оно всё такое убогое?
От: Sinix  
Дата: 15.05.10 12:00
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>А зачем сравнивать последовательные модификации файла, когда в контексте vcs интересно, как отрабатытвается конкурентная модификация (ака 3-way merge)?


С мержем всё ещё хуже. Просто диффы чаще используются в нормальных условиях (надо же отслеживать изменения). Про конфликты уже не надо, задолбало.
Re[2]: [Diff-tools] Что ж оно всё такое убогое?
От: Sinix  
Дата: 15.05.10 12:40
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>А зачем сравнивать последовательные модификации файла, когда в контексте vcs интересно, как отрабатытвается конкурентная модификация (ака 3-way merge)?


О май гад
Таки проверил 3-way merge, взяв Program1.cs за общего предка (ведь могли же 2 программиста написать код, отличающийся только порядком методов). Из умеющих справился только Beyond Compare, да и то получил 2 метода GetBytes() в результате. Нет уж, лучше по старинке

Из очередных пропущенных из жалости:
— Elliй (sic!) Computing Merge (юникод — это офигеть как сложно)
— Exam Diff
— MergePlant (автора убить табуреткой)
— и Deltopia DeltaWalker'10.
Re: [Diff-tools] Что ж оно всё такое убогое?
От: Jim_Hawkins Россия  
Дата: 15.05.10 21:13
Оценка: 7 (1)
S>Чтоб сразу не переезжать в КСВ: что там ещё осталось из юзабельных diff/merge под win?

http://www.compareandmerge.com/
Автор на RSDN бывает.
Re[3]: [Diff-tools] Что ж оно всё такое убогое?
От: Mr.Cat  
Дата: 15.05.10 21:48
Оценка: +1
Здравствуйте, Sinix, Вы писали:
S>(ведь могли же 2 программиста написать код, отличающийся только порядком методов)
Мне как-то сразу вспомнился анекдот про сибирских мужиков и японскую бензопилу.
На мой взгляд, таких ситуаций стоит (и можно) избегать.
Re[4]: [Diff-tools] Что ж оно всё такое убогое?
От: Sinix  
Дата: 16.05.10 02:45
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

S>>(ведь могли же 2 программиста написать код, отличающийся только порядком методов)

MC>Мне как-то сразу вспомнился анекдот про сибирских мужиков и японскую бензопилу.
В таком случае, WinDiff — русская пила на гусеницах и с атомным приводом. Он-то правильно всё распознал.

MC>На мой взгляд, таких ситуаций стоит (и можно) избегать.

Т.е. если бы методы ещё и различались, все остальные тулзы сразу бы исправились и начали бы правильно угадывать?

Но согласен, лучше таких проблем себе не создавать за отсутствием средств решения оных.
Re[2]: [Diff-tools] Что ж оно всё такое убогое?
От: Sinix  
Дата: 16.05.10 02:53
Оценка:
Здравствуйте, Jim_Hawkins, Вы писали:

J_H>http://www.compareandmerge.com/

J_H>Автор на RSDN бывает.
Увы, на Win7 x64 не завёлся. Постоянно выдавал

The operation could not be performed because your computer
has not enough free memory left.

Это с 4мя гигами памяти (из них 2,5 доступно). Зато триалы (ограничение по количеству сравнений, а не по срокам) считал за милую душу.
Отписался в саппорт.
Re: [Diff-tools] Что ж оно всё такое убогое?
От: Katowice  
Дата: 16.05.10 08:38
Оценка:
Есть еще бесплатный SourceGear DiffMerge.
Re[2]: [Diff-tools] Что ж оно всё такое убогое?
От: Sinix  
Дата: 16.05.10 09:40
Оценка:
Здравствуйте, Katowice, Вы писали:

K>Есть еще бесплатный SourceGear DiffMerge.

Пробовал. Также как
— Ultra Compare,
— Diffuse,
— ModelMaker[R] Structured Difference Viewer (интересен, но увы только вьювер).
У меня кажется собралась полная коллекция этих поделок.

Ничо-ничо, место пусто не бывает. Compare++ уже сейчас умеет обнаруживать и выравнивать методы, но только для cpp файлов. Обещают поддержку других языков. А там и остальные подтянутся.
Re: [Diff-tools] Что ж оно всё такое убогое?
От: Sinix  
Дата: 16.05.10 10:14
Оценка: 9 (2)
Здравствуйте, Sinix, Вы писали:

S>Наклёвывается весьма интересная вещь — CodeCompare, если в следующей бете наконец починят глючащий детект регионов — добавлю в список.


UPD. Починили в 1.0.7. В субъективном рейтинге — в первой тройке вместе с Compare It! и Compare++. Причём разработчики обещали бесплатную версию. Ждём!
Re: [Diff-tools] Что ж оно всё такое убогое?
От: z00n  
Дата: 16.05.10 17:29
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Выкроил время, потестил диффалки....



Не вижу p4merge:
картинка
Re: Подскажите название велосипеду (anti-template-bloat)
От: superlexx  
Дата: 16.05.10 17:40
Оценка:
Странный тест, странный use case я бы сказал. Большой refactoring смотрю обычно пошагово. Для взрослого конфликтного 3-way merge -> ClearCase Merge, BeyondCompare
Re[2]: [Diff-tools] Что ж оно всё такое убогое?
От: Sinix  
Дата: 16.05.10 23:59
Оценка:
Здравствуйте, z00n, Вы писали:

Z>Не вижу p4merge:

На работе снесено (значит был хороший поводд), дома придумаю что там было не так. %)
Re[2]: Подскажите название велосипеду (anti-template-bloat)
От: Sinix  
Дата: 17.05.10 00:09
Оценка: +1
Здравствуйте, superlexx, Вы писали:

S>Странный тест, странный use case я бы сказал. Большой refactoring смотрю обычно пошагово.

Да обычнейший. Есть момент твоего последнего коммита. Есть текущий код. Даже если посмотреть что меняли по каждой ревизии отдельно, постоянно натыкаюсь на те же грабли — рефакторинг + перемещение кода.

S>Для взрослого конфликтного 3-way merge -> ClearCase Merge, BeyondCompare

Так всё проверенное даёт худшие результаты для 3-way, чем при обычном сравнении.
Beyond хоть что-то смог (хотя пока не увидел, чтобы он выделялся по точности результатов).

ClearCase Merge я так понимаю, только пакетом? Тогда пропустим.
Re: [Diff-tools] Что ж оно всё такое убогое?
От: Vain Россия google.ru
Дата: 17.05.10 11:35
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Выкроил время, потестил диффалки. Из списков н wiki и

Имел теже проблемы когда переёзжал на новую версию сторонней либы, которая имела наши фиксы — приходилось мержить. Понял что современные мержеры не будут мержить хорошо пока не поимеют языковые парсеры, хотябы на уровне парсинга кода на скопы и выделения функций.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: [Diff-tools] Что ж оно всё такое убогое?
От: Sergey Chadov Россия  
Дата: 17.05.10 15:16
Оценка:
Здравствуйте, Sinix, Вы писали:


S>Чтоб сразу не переезжать в КСВ: что там ещё осталось из юзабельных diff/merge под win?


Наверное, можно при желании Meld запустить под виндой, но я сам не пробовал, под виндой обхожусь WinMerge
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re: [Diff-tools] Что ж оно всё такое убогое?
От: Tom Россия http://www.RSDN.ru
Дата: 20.05.10 09:08
Оценка:
А что было конкретно не так с Araxis-ом? Пока лучше него не видел. CodeCompare пока не пробовал.
Народная мудрось
всем все никому ничего(с).
Re[2]: [Diff-tools] Что ж оно всё такое убогое?
От: Sinix  
Дата: 20.05.10 10:22
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>А что было конкретно не так с Araxis-ом? Пока лучше него не видел. CodeCompare пока не пробовал.

Ла всё не так.

Глюкавый мерж. Берём Program1.cs как общего предка, радуемся во что у него превратилось static void Main.

Вот почему слева — весь метод, справа — только часть?
Представляем что будет при попытке смержить?%)

Неудобный гуй. Очень тяжело отследить, что изменено, даже для варианта Program1 -> Program2. По-идиотски расположенные настройки (за это можно смело можно лишать лицензии на Ribbon UI).

Сливающий на сложных диффах алгоритм. И снова кривой гуй, требующий расставить ручками sync links, указывая номера строк *(sync links нифига не помогают кстати).

Подозреваю, araxis заточен под отличные от моих юз-кейсы.

P.S. Только не подумайте, что я гноблю исключительно araxis. Остальные ничем не лучше.

P.P.S. У CodeCompare слегка страшный вид, но после настройки (см скриншоты) — терпимо. Если есть лицензия (откуда-то нашлась, кто и когда её покупал — ), то цвета даже можно сохранить После переписки с саппортом починили подсветку overview margin — используются цвета фона, если цвет текста совпадает.
Re[3]: [Diff-tools] Что ж оно всё такое убогое?
От: Tom Россия http://www.RSDN.ru
Дата: 21.05.10 06:47
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Tom, Вы писали:


Tom>>А что было конкретно не так с Araxis-ом? Пока лучше него не видел. CodeCompare пока не пробовал.

S>Ла всё не так.
А ты не заметил что он тебе показал конфликты которые смержить руками автоматически невозможно?
Народная мудрось
всем все никому ничего(с).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.